天天看點

基于GMap.Net的地圖解決方案

一 地圖的加載與顯示

關于gmap的介紹與使用可以看我以前的文章:

<a href="http://www.cnblogs.com/luxiaoxun/p/3463250.html">gmap.net開發之在winform和wpf中使用gmap.net地圖插件</a>

gmap.net是.net下一個地圖控件,可以基于http協定加載各個公司的地圖,如google,bing,arcgis的,主要原理是通過解析各個公司的地圖服務的url,傳入相應的參數得到對應的切片底圖(tiled map),如一個高德地圖的gmapprovider的實作如下:

基于GMap.Net的地圖解決方案
基于GMap.Net的地圖解決方案
基于GMap.Net的地圖解決方案

如下為高德地圖的顯示:

基于GMap.Net的地圖解決方案

通過類似的辦法,可以實作加載google、騰訊的地圖,百度的地圖也可以加載,但是因為百度采用自己的加偏算法(bd-09),導緻加載的地圖顯示偏差大,當在不同的地圖間切換時,無法正确顯示。。

二 marker的顯示與操作

gmapmarker為地圖上要顯示的資料元素,繼承gmapmarker可以實作自己想要的地圖元素效果,如下顯示自定義元素的樣式:

基于GMap.Net的地圖解決方案

三 圖形的顯示與操作

在地圖上手動畫各種多邊形,來實作類似“電子圍欄”的功能,可以使用gmappolygon。

如下為我實作的圓形(circle)、矩形(rectangle)、多邊形(polygon)和折線段(polyline):

基于GMap.Net的地圖解決方案

實作類似百度地圖“測距”的功能:

基于GMap.Net的地圖解決方案

通過點、線和提示框可以實作類似百度地圖的“測距”功能,點選紅色的“x”,實作删除這次測距。

四 位址解析與路徑查找

位址解析:gmap中的位址解析主要用到geocodingprovider中的如下方法:

基于GMap.Net的地圖解決方案
基于GMap.Net的地圖解決方案

路徑查找:gmap中的路徑查找主要用到routingprovider的如下方法:

基于GMap.Net的地圖解決方案
基于GMap.Net的地圖解決方案

接口使用方式:

geocodingprovider和routingprovider都是通過目前的mapprovider轉換得到的,也就是說如果要在加載的地圖上實作位址解析與路徑查找,就需要實作加載地圖的三大接口:

gmapprovider接口:用于顯示地圖。

routingprovider:用于路徑查找。

geocodingprovider:用于位址解析。

五 坐标糾偏

中國國内的地圖都是經過“加偏”處理的,是以被稱為“火星坐标”。

現在主流的坐标系是wgs84坐标系,即地球坐标系,國際上通用的坐标系,經過國家測繪局要求采用gcj02算法加偏後即為“火星坐标”,百度在“火星坐标”的基礎上又采用了自己的加偏算法bd09加偏後,得到“百度坐标”,國内的搜狗坐标系、圖吧坐标系等,估計也是在gcj02基礎上加密而成的。

而現在google中國、騰訊和高德采用的是wgs84經過gcj02算法加偏後的“火星坐标”。

通過gps裝置采集到的坐标一般是沒有經過“加偏”處理的wgs84坐标,是以放到國内地圖上顯示會有誤差,可以把采集到的坐标也通過加偏算法加偏後再放到地圖上顯示,就可以得到對應的地點。

如下是經過加偏算法加偏後處理的情況:

基于GMap.Net的地圖解決方案

如上使用google中國地圖,現在采用的算法在地圖1-16級可以基本沒有誤差,誤差很小,當然和采集裝置采集的點的準确度也有關系。

當地圖放大超過16級時候,就出現了誤差,但誤差也就在幾米:

基于GMap.Net的地圖解決方案

六 中國行政區域邊界

有中國各個省市的邊界資料,就可以實作行政區域的顯示:

如下顯示江蘇省和南京市的行政邊界:

基于GMap.Net的地圖解決方案
基于GMap.Net的地圖解決方案

ps:現在手上有全國的各個省、市、縣區的行政邊界。

七 地圖下載下傳與緩存

gmap會自動在本地緩存一些通路過的地圖,預設是不删除的,是以當通路的地圖區域越多時,本地的地圖緩存也就越大。

當然你也可以手動下載下傳地圖到本地資料庫(支援sqlite、mysql、mssql、postgresql),如下所示:

基于GMap.Net的地圖解決方案

緩存到本地的離線地圖資料就可以作為地圖資料包使用。

八 離線方案

離線地圖下載下傳,cs或bs離線地圖使用:

聯系方式:站内信,qq:599965176

 參考:

https://greatmaps.codeplex.com/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

http://www.cnblogs.com/luxiaoxun/p/3802559.html

繼續閱讀