前面发布了两篇我用ArcBruTile开发用于ArcMap加载百度地图的插件ArcBruTileBaidu,放在网上后评论和反响还不错,还有两位大学同窗经过百度搜索竟然搜到我本人!文章和技术介绍也被网络上复制粘贴了不少次,开发了那么多没人用的数字城市平台软件和GIS系统,这一个工具才感受本身还有点用。算法
毕竟只是茶余饭后的兴趣爱好,对该插件升级和维护的也不是很及时,也致使不少需求没跟上,对不起各位用户。网络
ArcBruTileBaidu插件有以下几个大的缺陷:工具
1. 须要下载安装包进行安装,极大几率是由于环境不支持安装会不成功!性能
2. 因为是ArcGIS Add-In开发,对ArcMap的版本要求特别高,每一个版本都要从新编译一套插件,根本就不可能每一个版本都编译到,我当时仍是用的一个虚拟机,安装了两个版本,ArcMap 10.0和10.1,所以也就基本上只支持这两种,并且还常常出现不兼容的问题。spa
3. B/S系统最怕ActiveX,C/S系统最怕COM,因为ArcGISAdd-In开发采用的COM组件,动不动就崩溃,你有时候都很难调试问题。插件
4. 因为是本地安装,参数配置都是下载在本地,所以百度地图更新或参数变化,就会致使程序崩溃或地图不出来。3d
5. 因为当时就是玩玩,程序写的也不健壮,常常各类问题。调试
这个东西需求很大,一直鞭策着我进行升级或重构,但本人太懒,一直拖着。最近在使用ArcGISPro加载天地图的WMTS服务时,发现偏移的有点厉害,就深刻研究和分析了下ArcGIS Pro加载WMTS服务原理和机制,所以将ArcBruTileBaidu插件的思路换成将百度地图适配为标准的WMTS服务,这样能够有效地解决上述缺陷。orm
1. 用户不再用安装任何插件,直接使用在线服务便可。blog
2. 妈妈不再用担忧不一样版本的ArcMap了,并且还能支持最新的ArcGIS Pro了。
3. ArcMap和ArcGISPro原生就支持加载WMTS服务,性能好,不会崩溃了。
4. 采用在线模式,随时进行升级和参数更改。
5. 经过OGC的WMTS标准服务,其它B/S系统中也能够直接调用(目前该功能还没有开放)
废话少说,直接开始讲使用教程吧
1. 打开ArcGIS Pro 添加WMTS服务
2. 输入WMTS服务的能力文档地址:
http://demo.cxgis.com/wmts/baidu/vec?request=getcapabilities
3.添加图层.打开添加的WMTS服务,获取其中的图层,能够看到有Baidu_Vec_Map,这个是电子地图的,右键图层添加到当前地图中,左侧的TOC就会显示该图层
4.验证坐标. 百度地图3级如下是没有瓦片的,所以显示全图时,最开始是没有地图的,能够放大几级就会出现地图了。该服务是严格根据百度地图的坐标进行换算,图上每一个点坐标都很精确,咱们输入百度坐标原点【0,0】,能够看到定位很正确。
5.再试下百度坐标定位验证. 我爱**,咱们来看下***的定位是否正确呢。例如的经纬度大约为116.404,39.915,通过转换便可获得平面坐标:
varprojection =new BMap.MercatorProjection();var point = projection.lngLatToPoint(new BMap.Point(116.404, 39.915));;
12958175, 4825923.77,咱们输入该坐标定位过去,Perfect!
也就是说利用这个坐标系在上面进行数据采集和标绘,至少更百度地图确定是能够百分百精确匹配的
6. 咱们和天地图及ESRI的地图进行一个对比看看误差如何。
因为百度地图是有本身的偏移算法的,所以任何投影都是没法一次性解决全部问题的,这也是商业使然,中国人都不喜欢按标准来搞,没办法!
可是本方法可以解决在百度地图坐标系统下可以很是精确的统一.
亲测在ArcMap 10.6中也能够,截图忘记截了!