前面發布了兩篇我用ArcBruTile開發用於ArcMap加載百度地圖的插件ArcBruTileBaidu,放在網上后評論和反響還不錯,還有兩位大學同學通過百度搜索居然搜到我本人!文章和技術介紹也被網絡上復制粘貼了很多次,開發了那么多沒人用的數字城市平台軟件和GIS系統,這一個工具才感覺自己還有點用。
畢竟只是茶余飯后的興趣愛好,對該插件升級和維護的也不是很及時,也導致很多需求沒跟上,對不起各位用戶。
ArcBruTileBaidu插件有如下幾個大的缺陷:
1. 需要下載安裝包進行安裝,極大概率是因為環境不支持安裝會不成功!
2. 由於是ArcGIS Add-In開發,對ArcMap的版本要求特別高,每個版本都要重新編譯一套插件,根本就不可能每個版本都編譯到,我當時還是用的一個虛擬機,安裝了兩個版本,ArcMap 10.0和10.1,因此也就基本上只支持這兩種,而且還經常出現不兼容的問題。
3. B/S系統最怕ActiveX,C/S系統最怕COM,由於ArcGISAdd-In開發采用的COM組件,動不動就崩潰,你有時候都很難調試問題。
4. 由於是本地安裝,參數配置都是下載在本地,因此百度地圖更新或參數變化,就會導致程序崩潰或地圖不出來。
5. 由於當時就是玩玩,程序寫的也不健壯,經常各種問題。
這個東西需求很大,一直鞭策着我進行升級或重構,但本人太懶,一直拖着。最近在使用ArcGISPro加載天地圖的WMTS服務時,發現偏移的有點厲害,就深入研究和分析了下ArcGIS Pro加載WMTS服務原理和機制,因此將ArcBruTileBaidu插件的思路換成將百度地圖適配為標准的WMTS服務,這樣可以有效地解決上述缺陷。
1. 用戶再也不用安裝任何插件,直接使用在線服務即可。
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中也可以,截圖忘記截了!