经过不断试用与改动,这个查看器终于还是完毕了设计、实现。查看器,顾名思义,没有编辑功能:说的白一点,仅仅是一个以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. AttributeError: 'tuple' object has no attribute 'extend'

    出错demo In [5]: a.extend([4,5]) --------------------------------------------------------------------- ...

  2. js 删除数组中某一项的几种方法总结

    第一种:改变原数组 借用原生数组方法:splice(index,len,[item])  剪接 借用原生对象方法:delete array[index] + array.slice(0, index) ...

  3. java组件不存在解决方案:右侧Maven Projects展开后左上角第一个刷新按钮 刷新后就会从新加载所有java的依赖项了

    java组件不存在解决方案:右侧Maven Projects展开后左上角第一个刷新按钮 刷新后就会从新加载所有java的依赖项了 软件:idea 问题产生:其他同事进行开发,引入新java组件后提交 ...

  4. 工具:docs网页笔记

    用到工具python 网页笔记工具:mkdocs https://www.cnblogs.com/bigmagic/p/10309260.html 案例: https://github.com/zha ...

  5. JAVA基础——内存流

    掌握内存操作流 输入和输出都是从文件中来的,当然,也可将输出的位置设置在内存上,这就需要ByteArrayInputStream和ByteArrayOutputStream ByteArrayInpu ...

  6. js 页面图片等元素在普通元素中滚动动态加载技术

    /*! * 2012-01-13 v1.1 偏移值计算修改 position → offset * 2012-09-25 v1.2 增加滚动容器参数, 回调参数 * 2015-11-17 v1.3 只 ...

  7. mysql高效率随机获取n条数据写法

    今天做项目遇到这个问题,本来想用mysql自带的随机函数来实现,但是想到这样做功能是实现了,但是效率真的好差!一下子想不到好的方法,就去网上找了一下,记录下来,好好研究学习一下. ID连续的情况下(注 ...

  8. Python之布尔

    Python之布尔(bool) 在计算机中的所用判断,都是用布尔的True和False来判断的. 条件成立:True ( 1 ) 条件不成立:False ( 0 ) 以下情况是False: [ ]:空 ...

  9. 程序包javax.servlet.http不存在

    在maven test项目时,出现错误: java:[7,26] 程序包javax.servlet.http不存在 原因:pom.xml中未引入javax.servlert-api相关的包 <d ...

  10. Vue如何在data中正常引入图片路径

    在Vue项目中通过data设置图片路径,然后在template中引入后页面无法显示图片,浏览器控制台报错:                        刚开始以为是路径出问题了,于是绝对路径.相对路 ...