Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(5) 小结

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

这使得这款查看器能够在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#等外部程序。提供基于键-值的高度可扩展接口。

云盘接口说明PDF, 提取0466

能够看一看操作的接口。怎样标绘一个点到地图上:

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克隆地址

时间: 2024-12-14 15:21:02

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

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

(相关的代码能够从https://github.com/goldenhawking/mercator.qtviewer.git直接克隆) 我们如今是准备做一个C/S架构的地图显示控件.就必定牵扯到坐标系和UI的界面控制. 1.墨卡托投影 眼下osm採用墨卡托投影,这个投影的原理能够用一个假想实验解释. 如果地球是一个透明的球体.在球体的球心有一个光源.我们把一张幕布沿着赤道卷起来.使之与地球内切,地球上的一个点在这块幕布上的投影就是其墨卡托投影位置. 上图中,地球半径是R=6378137米,可想

[转载]通达信插件选股(基于通达信插件编程规范的简单分析)

[转载]通达信插件选股(基于通达信插件编程规范的简单分析) 原文地址:通达信插件选股(基于通达信插件编程规范的简单分析)作者:哈尔滨猫猫 首先声明,鄙人是编程人员,不是股民.对选股概念了解甚少.本文仅作编程人员学习借鉴之用.不对选股理论进行探讨和解释. 以前有客户找我做过通达信插件选股的小任务,当时第一次接触面向接口(此类“接口”)编程,也是第一次接触到股票里相关的概念.最近由于接手一个任务,与上次开发相类似,故旧事重提,仔细研究一番.将个人学习研究所得知识与大家分享.在网上搜相关资料,可用的.

jQuery补充,基于jQuery的bxslider轮播器插件

基于jQuery的bxslider轮播器插件 html <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=n

android基于插件式开发

之前没有听过app插件式开发今天就做一下学习的笔记.这里的插件式开发通俗的讲就是把一个很大的app分成n多个比较小的app,其中有一个app是主app.网上查了一下采用了这种开发模式的有支付宝客户端.QQ换肤其他的就不得而知了有人说微信也是基于插件的但是微信在更新的时候会下载全部的应用程序把旧的完全覆盖所以猜想应该目前不是吧. 基于插件的开发列举两个比较突出的优点: 1.应用程序非常容易扩招,比如有一个新的领域要加到旧的应用程序中来只需把这个新的领域做为一个插件,只开发这个小的app就可以了旧的

完全开源基于插件的开发框架(使用DEV实现Ribbon界面)

以前写了几篇关于插件的文章: C#一步一步实现插件框架的示例(一) C#一步一步实现插件框架的示例(二) C#一步一步实现插件框架的示例(三) C#一步一步实现插件框架的示例(四) 按以上步骤可以即可实现自己的插件框架,可以大大地提高开发的效率和程序的稳定性.依据此思路,参考了网上的一些方法和代码,并使用DEV界面库实习了一套基于插件的开发框架,集成了一个简单实用的权限管理,开发一些小型的管理软件很方便,现在完全开源.在上述开源的代码中,有权限管理的模块可以做为开发插件的例子,同时也使用了一个N

插件化编程实现的一份糖炒栗子~~

迷茫的原因是因为想得太多,做得太少.因为只是 想 真的很容易,转瞬之间就会产生无数个念头,或许是该做点什么了吧. 但是整个人都是懒的,是废的,是大脑控制不住自己的行为的.解决方案唯有一步一步的去把行为变成习惯. 坚持一件事挺不容易的,不论结果的好坏,过程中总有收获的,坚持,不会是一件坏事. 胡言乱语结束~~~ 下面是记录分享的一点东西~~请笑纳 0.结构一览 1.定义插件接口 using System; using System.Collections.Generic; using System

基于jQuery功能强大的图片查看器插件

viewer是一款功能强大的图片查看器jQuery插件.它可以实现ACDsee等看图软件的部分功能.它可以对图片进行移动,缩放,旋转,翻转,可以前后浏览一组图片.该图片查看器还支持移动设备,支持键盘控制,功能十分强大. 在线预览   源码下载 安装 可以通过nmp或bower来安装该图片查看器插件. npm install imageviewer bower install imageviewer 使用方法 使用该幻灯片插件需要引入jQuery,viewer.css和viewer.js文件. <

2Unity3D教程宝典之插件篇:Unity3D插件详细评测及教学下载

转载自风宇冲Unity3D教程学院 http://blog.sina.com.cn/s/blog_471132920101crh3.html 引言:想用Unity3D制作优秀的游戏,插件是必不可少的.工欲善其事必先利其器.本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具.为此我写了插件的经验及理论讲解,涉及插件的 学习/辨别/选择/配合.也写了插件的 评测/教程/下载.关于评测,带有一定的主观性,仅供参考.关于教程,热门插件网上已经有很多教程了,本文提供链接,网上资料少的插

Qt Quick综合实例之文件查看器

如果你基于Qt SDK 5.3.1来创建一个Qt Quick App项目,项目模板为你准备的main.qml文档的根元素是ApplicationWindow或Window.这次我们就以ApplicationWindow为例,围绕着它实现一个综合实例:文件查看器.通过文件查看器的实现,我们来再次领略一下Qt Quick的犀利. 版权所有foruok,转载请注明出处:http://blog.csdn.net/foruok. 本实例将会用到下列特性: ApplicationWindow MenuBar