在Gmap中“”變相“”實現按行政區劃邊界下載地圖
阿新 • • 發佈:2019-02-03
來到新的公司,剛開始學習Gmap沒幾天,考慮到以後的專案中地圖方面可能不再使用arcengine來開發,從而向開源gis入手,接到的第一項任務就是在gmap中實現地圖按照各地行政區劃下載,給了我一份wpf版本的gmap原始碼,我先用了一下,第一印象感覺就是個開源的離線地圖下載工具,下載的方式為按住alt選擇一塊矩形區域。
由於做engine開發一年了,慣性的思維促使我想要實現這個功能,首先找到一份全國省市邊界的shp資料,以及建立一張省市關聯的行政區劃表來供使用者選擇地區,根據選擇的name去shp中查詢屬性欄位等於選擇選擇的name那一塊然後高亮顯示一下,然後將其轉為gmap的下載型別,在網上查了一天,看了很多例子也下了一些程式碼,似乎根本就沒法直接載入shp,然後繼續搜尋,一邊看原始碼,發現其繪製的下載區域其實是GMapPolygon,而GMapPolygon是很多PointLatLng合成,也就是熟悉的地理經緯度座標,一開始測試的時候我還是在winform版本下用的,而到了wpf版本則沒有了圖層這一概念,下面附上核心程式碼,傳入的引數為所選擇的省市名稱
public void LoadDistrictPloygon(string province,string city) { string path=""; StreamReader sr = null; if (city == "全部") { path= @"d:\\china\\province\\" + province + ".txt"; } else { path = @"d:\\china\\city\\" + city + ".txt"; } try { sr = new StreamReader(path, Encoding.Default); String line = sr.ReadLine(); //while (line != null) //{ gmapPolygon = new GMapPolygon(null); string[] latlng = line.Split(new char[] { ';' }); for (int i = 0; i < latlng.Length; i++) { PointLatLng pointss = new PointLatLng(); string[] data = latlng[i].Split(','); double x = Convert.ToDouble(data[0]); double y = Convert.ToDouble(data[1]); pointss.Lat = y; pointss.Lng = x; gmapPolygon.AddPoint(pointss); } } catch (Exception ex) { MessageBox.Show("未找到該地區資料!"); return; } MainMap.Markers.Add(gmapPolygon); gmapPolygon.RegenerateShape(MainMap); _currentMapTool = MapTool.Default; startPoint = true; }