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

    cd 到该项目的一个本地仓库下 log 查看提交记录,找到想要的提交记录,粘贴对应的希哈值 执行 git checkout 希哈值 这本地的这个仓库的代码就会变成你想要的那个版本的代码

  2. pringBoot Controller接收参数的几种常用方式

    第一类:请求路径参数1.@PathVariable 获取路径参数.即url/{id}这种形式.2.@RequestParam 获取查询参数.即url?name=这种形式例子 GEThttp://loc ...

  3. Java递归扫描文件路径

    import java.io.File; public class Test { public static int count = 0; public static void main(String ...

  4. Spring.Boot.1 -- 概览

    Spring Boot 是如何简化Java 开发的 SpringBoot的一些重要特征 长久以来,Spring 框架作为Java应用开发的框架地位稳固.最近在云计算.大数据.无结构数据持续化.函数式反 ...

  5. 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)

    议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...

  6. mysql多表合并为一张表

    有人提出要将4张表合并成一张.数据量比较大,有4千万条数据.有很多重复数据,需要对某一列进行去重. 数据量太大的话,可以看我另外一篇:http://www.cnblogs.com/magmell/p/ ...

  7. 排序算法,以php为代码示例

    一.冒泡排序 <?php/** * Created by PhpStorm. * User: 郑楚周 * Date: 2018/9/28 * Time: 16:10 */ /**冒泡排序 * C ...

  8. 第十七节:Scrapy爬虫框架之item.py文件以及spider中使用item

    Scrapy原理图: item位于原理图的最左边 item.py文件是报存爬取数据的容器,他使用的方法和字典很相似,但是相比字典item多了额外的保护机制,可以避免拼写错误或者定义错误. 1.创建it ...

  9. PS学习笔记(05)

    PS学习笔记(09) [2]马赛克背景 找一张图片.然后新建图层,让前景色背景色恢复到默认的状态(黑.白) 在新建图层上填充黑色-->滤镜-->渲染->云彩 像素化-->马赛克 ...

  10. 关于Web服务接口测试的一些问题及答案

    本篇主要是像想要了解并且学习接口测试的朋友,做一个入门的简单介绍 1.什么是接口 答:接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提 ...