经过不断试用与改动,这个查看器终于还是完毕了设计、实现。查看器,顾名思义,没有编辑功能:说的白一点,仅仅是一个以OpenStreetMap为底图的显示装置罢了。和专业GIS相比,这款基于插件的OpenStreetMap瓦片查看器client显得单薄。和消费类GIS(如面向浏览器的地图API)相比,它是本地的。似乎和Native应用更加合拍。

事实上一直以来想利用业余时间做这样一个工具,使得非计算机专业的project师们能够拥有一款支持漫游、标图、动画效果的轻量级地理信息插件,特别是掌握C++、C#等本地工具的project师们能够不经学习即能获得GIS二次开发能力,眼下看来,已经做到了~~我们看看这些效果。

1、在Qt中引入planetosm widget

      通过Qt designer 的插件功能,我们能够方便的引入OSM瓦片查看器client:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

这使得这款查看器能够在windows, Linux下执行,比方

1.1 Qt widget in RaspberryPI (ARM)



1.2 Qt widget in Ubuntu



2、在Windows下使用ActiveX

      托ActiveQt的福。Widgets 直接能够公布为 ActiveX控件,从而使得外部程序如 C#, MFC 开发的东东能够直接使用:

3、外部开发接口-简单并直观

对C#等外部程序。提供基于键-值的高度可扩展接口。 



能够看一看操作的接口。怎样标绘一个点到地图上:
string res = axqtaxviewer_planetosm.osm_layer_call_function("geomarker1",
"function=update_point;name=哈哈;type=1;" +
"lat=35.2;lon=101.783;" +
"style_pen=2;color_pen=0,0,255,128;width_pen=3;" +
"style_brush=1;color_brush=0,255,0,128;" +
"color_label=0,0,255,96;weight_label=99;size_label=12;" +
"width=16;height=20;");

在上面的操作中,C#调用的是函数 osm_layer_call_function,这个函数有两个參数。第一个參数表示要调用哪个图层的功能。也就是图层的名字;第二个參数是调用功能的參数表,为分号切割參数对。等号切割键、值的字符串。通过这个统一的接口,能够訪问各个插件(图层)提供的几十种功能。我们也能够插入一个多边形:

string res = axqtaxviewer_planetosm.osm_layer_call_function("geomarker1",
"function=update_polygon;name=ID4;type=4;"+
<"lat0=12.2;lon0=67.3;"+
"lat1=14.3;lon1=62.8;"+
"lat2=22.7;lon2=66.5;"+
"lat3=11.5;lon3=72.2;"+
"lat4=10.8;lon4=69.4;"+
"style_pen=2;color_pen=0,0,255,128;" +
"width_pen=3;style_brush=1;color_brush=0,255,0,128;");

并顺带为标记加入上文字凝视,这些凝视能够在用户点击时弹出:

res = axqtaxviewer_planetosm.osm_layer_call_function("geomarker1",
"function=update_props;name=ID2;" +
"LABEL=Neimeng;EXPRESS=YunDa;Pero=NORMAL;" +
"CheckTime=2014-12-30 07:18:32;" +
"From=Huhehaote;To=YinChuan");

在Qt内部。除了上述方式,还有等效的QMap<QString, QVariant> 映射方式。对一个图层pif, 运行:

			QMap<QString, QVariant> inPara, outPara;
inPara["function"] = "update_point";
inPara["name"] = "YUNDA-EXPRESS-23837364";
inPara["lat"] = lat;
inPara["lon"] = lon;
inPara["color_pen"] = "0,0,255,128";
inPara["color_brush"] = "0,0,0,64";
inPara["width"] = "7";
inPara["height"] = "7";
inPara["type"] = 1;
outPara = pif->call_func(inPara);

就会插入一个点。

假设想为这个地图开发新的图层和插件,仅仅要仿照project中两个插件 grid, geomarker 产生自己的插件就可以。

配合主线程的定时器,不停的更新图元的坐标,便产生了动画效果。

-----------------------------------------------------

4、后记

非计算机专业的project师们大量使用本地开发工具,在不同的领域创造价值。与前端project师不同,OpenStreetMap 相应的Web前端对他们是陌生的。希望这款小工具可以帮助他们在须要时利用几天时间迅速在本地应用程序中获得简单的GIS体验。追逐心中的梦想。这款查看器本身在不断更新,编译源码是最好的方式。因为依赖项非常多。我在公布时,最后仅仅能使用Depwalker等软件把动态链接库弄妥。

最好的办法是把编译出的Release东东复制到 Qt库的bin目录下,而后调用

idc.exe .\qtaxviewer_planetosm.dll /regserver

注冊控件(XP下採用Qt5.3.2+regsvr32.exe注冊会有问题)。

      *在  win7 下,须要使用管理员注冊。使用用户权限也是能够注冊的,但仅能本用户使用。

      为了方便windows用户尝试。使用Qt工具链预生成了 一个包。有兴趣的人能够下载。第一篇介绍里面有git克隆地址

      
     

Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(5) 小结的更多相关文章

  1. Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(1)-墨卡托投影与坐标控制

    (相关的代码能够从https://github.com/goldenhawking/mercator.qtviewer.git直接克隆) 我们如今是准备做一个C/S架构的地图显示控件.就必定牵扯到坐标 ...

  2. jQuery 插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

  3. jQuery 图片查看插件 Magnify 开发简介(仿 Windows 照片查看器)

    前言 因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽.调整大小.最大化, ...

  4. 用Qt写软件系列二:QCookieViewer(浏览器Cookie查看器)

    预备 继上篇<浏览器缓存查看器QCacheViewer>之后,本篇开始QCookieViewer的编写.Cookie技术作为网站收集用户隐私信息.分析用户偏好的一种手段,广泛应用于各大网站 ...

  5. 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)

    介绍 Cache技术广泛应用于计算机行业的软硬件领域.该技术既是人们对新技术探讨的结果,也是对当前软硬件计算能力的一种妥协.在浏览器中使用cache技术,可以大幅度提高web页面的响应速度,降低数据传 ...

  6. jQuery插件综合应用(一)注册

    一.介绍 注册和登录是每个稍微有点规模的网站就应该有的功能.登陆功能与注册功能类似,也比注册功能要简单些.所以本文就以注册来说明jQuery插件的应用. jQuery插件的使用非常简单,如果只按照jQ ...

  7. jQuery插件综合应用(三)发布文章页面

    一.使用的插件 一个折叠的功能导航,由Akordeon插件实现.Nanoscroller插件与Tagit插件主要用于美化页面.这里只是测试,其实还可以综合使用其它的插件,例如将Akordeon插件换成 ...

  8. jQuery插件综合应用(二)文字为主的页面

    一.介绍 文字内容是每个网站都有的内容,网站在展示文字内容时,总是比图片.视频等富媒体内容要难一些,因为富媒体容易被用户接受.尤其是越多的文字内容越难以被用户通篇的阅读,跳跃式阅读往往是阅读的主要方式 ...

  9. 移动端下拉刷新、加载更多插件dropload.js(基于jQuery/Zepto)

    移动端下拉刷新.加载更多插件dropload.js(基于jQuery/Zepto) 原文:http://www.grycheng.com/?p=1869 废话不多说,先让大家看一下案例效果: DEMO ...

随机推荐

  1. vue vueRouter vuex Axios webpack 前端常用内容

    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中.

  2. 第一节、ES6的开发环境搭建

    https://blog.csdn.net/zls986992484/article/details/70819462 下面这个不好使 https://blog.csdn.net/gao5311624 ...

  3. Web应用启动时,后台自动启动一个线程

    (1)前言 前几天,manager问道一个问题:能不能实现类似于cron的后台管理方式.问题解决后,想对这几个问题进行一下简单的总结.以便抛砖引玉!首先简单的提及一下cron. Cron,计划任务,是 ...

  4. ajax 分页点击数据缓存

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Map集合遍历的方式(以HashMap为例)

    环境:jdk1.8 HashMap的遍历方式有多种,下面将会一一列出. 首先我们先在HashMap中添加几个键值对. HashMap<Integer, String> map = new ...

  6. mui.openWindow的html5+和web传参的兼容

    mui.openWindow兼容web&plus环境下的页面传参 背景介绍 刚刚好要写个微信公众号和html5+兼容的项目 发现总是用localStorage传参不是事啊 太不优雅了 想了想还 ...

  7. 细说php第八章笔记(初稿)

    8.1 函数的定义      函数是被命名的:      函数是独立的:      函数执行特定的任务:      函数可以用将一个返回值返回给调用他的程序 函数的优越性      提高程序的重用性 ...

  8. 【Codeforces 1117C】Magic Ship

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终 ...

  9. HDU 3157 Crazy Circuits

    Crazy Circuits Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...

  10. HDU-1163Eddy's digital Roots,九余定理的另一种写法!

    下午做了NYOJ-424Eddy's digital Roots后才正式接触了九余定理,不过这题可不是用的九余定理做的.网上的博客千篇一律,所以本篇就不发篇幅过多介绍九余定理了: 但还是要知道什么是九 ...