1. 程式人生 > >ArcMap和ArcGIS Pro載入百度地圖

ArcMap和ArcGIS Pro載入百度地圖

  前面釋出了兩篇我用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服務

 新增WMTS服務

2.    輸入WMTS服務的能力文件地址:

http://demo.cxgis.com/wmts/baidu/vec?request=getcapabilities

輸入WMTS服務地址

3.新增圖層.開啟新增的WMTS服務,獲取其中的圖層,可以看到有Baidu_Vec_Map,這個是電子地圖的,右鍵圖層新增到當前地圖中,左側的TOC就會顯示該圖層

Baidu_Vec_Map圖層

4.驗證座標. 百度地圖3級以下是沒有瓦片的,因此顯示全圖時,最開始是沒有地圖的,可以放大幾級就會出現地圖了。該服務是嚴格根據百度地圖的座標進行換算,圖上每個點座標都很精確,我們輸入百度座標原點【0,0】,可以看到定位很正確。

[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!

BJ

也就是說利用這個座標系在上面進行資料採集和標繪,至少更百度地圖肯定是可以百分百精確匹配的

6. 我們和天地圖及ESRI的地圖進行一個對比看看偏差如何。

左邊是百度地圖,有便是Esri的Topographic地圖

 

左邊是天地圖,右邊是百度地圖

 

放大後會發現座標還是偏差的

由於百度地圖是有自己的偏移演算法的,因此任何投影都是無法一次性解決所有問題的,這也是商業使然,中國人都不喜歡按標準來搞,沒辦法!

但是本方法能夠解決在百度地圖座標系統下能夠非常精確的統一.

親測在ArcMap 10.6中也可以,截圖忘記截了!

 

 

&n