经过不断试用与修改,这个查看器最终还是完成了设计、实现。查看器,顾名思义,没有编辑功能:说的白一点,只是一个以OpenStreetMap为底图的显示装置罢了。和专业GIS相比,这款基于插件的OpenStreetMap瓦片查看器客户端显得单薄。和消费类GIS(如面向浏览器的地图API)相比,它是本地的,似乎和Native应用更加合拍。
其实一直以来想利用业余时间做这样一个工具,使得非计算机专业的工程师们可以拥有一款支持漫游、标图、动画效果的轻量级地理信息插件,特别是掌握C++、C#等本地工具的工程师们可以不经学习即能获得GIS二次开发能力,目前看来,已经做到了~~我们看看这些效果。
这使得这款查看器可以在windows, Linux下运行,比如
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");
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);
就会插入一个点。
如果想为这个地图开发新的图层和插件,只要仿照工程中两个插件 grid, geomarker 产生自己的插件即可。配合主线程的定时器,不停的更新图元的坐标,便产生了动画效果。
-----------------------------------------------------
非计算机专业的工程师们大量使用本地开发工具,在不同的领域创造价值。与前端工程师不同,OpenStreetMap 对应的Web前端对他们是陌生的,希望这款小工具能够帮助他们在需要时利用几天时间迅速在本地应用程序中获得简单的GIS体验,追逐心中的梦想。这款查看器本身在不断更新,编译源代码是最好的方式。由于依赖项很多,我在发布时,最后只能使用Depwalker等软件把动态链接库弄妥。最好的办法是把编译出的Release东东拷贝到 Qt库的bin文件夹下,而后调用
idc.exe .\qtaxviewer_planetosm.dll /regserver注册控件(XP下采用Qt5.3.2+regsvr32.exe注册会有问题)。