1. 程式人生 > >GMap.Net開發之在地圖上新增多邊形

GMap.Net開發之在地圖上新增多邊形

上一篇介紹了在GMap上新增自定義標籤(GMapMarker),這篇介紹在GMap上新增多邊形(GMapPolyogn),並且介紹如何在地圖上畫任意的多邊形。

如果已經知道了多邊形的各個點的位置,就可以通過如下方式在地圖上新增多邊形:

GMapOverlay polyOverlay = new GMapOverlay("polygons");
List points = new List();
points.Add(new PointLatLng(-25.969562,32.585789));
points.Add(new PointLatLng(-25.966205,32.588171
)); points.Add(new PointLatLng(-25.968134,32.591647)); points.Add(new PointLatLng(-25.971684,32.589759)); GMapPolygon polygon = new GMapPolygon(points, "mypolygon"); polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); polygon.Stroke = new Pen(Color.Red, 1); polyOverlay.Polygons.Add(polygon); gmap.Overlays.Add(polyOverlay);

如果需要手動在地圖上畫多邊形,可以通過在地圖上記錄每個點選的位置,每次點選更新正在畫的多邊形就可以了,實現方式如下:

先定義一些變數:

        private GMapOverlay polygons = new GMapOverlay("polygon"); //放置polygon的圖層
        private GMapPolygon drawingPolygon = null; //正在畫的polygon
        private List<PointLatLng> drawingPoints = new List<PointLatLng>(); //
多邊形的點集 private GMapPolygon currentPolygon;

mapControl.Overlays.add(polygons);

在點選mousedown事件中更新多邊形的點集(即更新多邊形的形狀):

        void mapControl_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                isLeftButtonDown = true;

                if (checkBoxDrawPolygon.Checked)
                {
                    drawingPoints.Add(mapControl.FromLocalToLatLng(e.X, e.Y));
                    if (drawingPolygon == null)
                    {
                        drawingPolygon = new GMapPolygon(drawingPoints, "my polygon");
                        drawingPolygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red));
                        drawingPolygon.Stroke = new Pen(Color.Blue, 2);
                        drawingPolygon.IsHitTestVisible = true;
                        polygons.Polygons.Add(drawingPolygon);
                    }
                    else
                    {
                        drawingPolygon.Points.Clear();
                        drawingPolygon.Points.AddRange(drawingPoints);
                        if (polygons.Polygons.Count == 0)
                        {
                            polygons.Polygons.Add(drawingPolygon);
                        }
                        else
                        {
                            mapControl.UpdatePolygonLocalPosition(drawingPolygon);
                        }
                    }
                    //mapControl.Refresh();
                }
            }
        }

在雙擊事件中將當前正在畫的多邊形加到儲存多邊形的GMapOverlay中:

        void mapControl_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (checkBoxDrawPolygon.Checked && drawingPolygon != null)
            {
                polygons.Polygons.Add(drawingPolygon);
                drawingPolygon = null;
                drawingPoints.Clear();
            }
        }

在OnPolygonEnter和OnPolygonLeave中改變多邊形的輪廓顏色:

        void mapControl_OnPolygonLeave(GMapPolygon item)
        {
            currentPolygon = null;
            item.Stroke.Color = Color.MidnightBlue;
        }

        void mapControl_OnPolygonEnter(GMapPolygon item)
        {
            currentPolygon = item;
            item.Stroke.Color = Color.Red;
        }

採用同樣的方法,可以在地圖上畫矩形、圓形等圖形,畫矩形和圓形的時候要隨滑鼠移動改變圖形的大小,需要在MouseMove事件中改變正在畫的圖形的大小。

由於圓形沒法用點集組成(無窮個點組成),可以採用GMapMarker來畫。

效果圖如下:

 

相關推薦

GMap.Net開發地圖新增多邊形

上一篇介紹了在GMap上新增自定義標籤(GMapMarker),這篇介紹在GMap上新增多邊形(GMapPolyogn),並且介紹如何在地圖上畫任意的多邊形。 如果已經知道了多邊形的各個點的位置,就可以通過如下方式在地圖上新增多邊形: GMapOverlay polyOverlay = new GMa

GMap.Net開發在WinForm和WPF中使用GMap.Net地圖外掛

GMap.NET是什麼? 來看看它的官方說明:GMap.NET is great and Powerful, Free, cross platform, open source .NET control. Enable use routing, geocoding, directions and maps

GMap.Net開發自定義Marker

上一篇文章介紹瞭如何在WinForm和WPF中使用GMap控制元件,這篇介紹下GMap中Marker的使用。 自定義Marker,可以理解為在地圖上自定義圖示(Custom Marker),先看看GMap的地圖和圖示的顯示方式: Map控制元件上可以新增Overlay(圖層),可以新增多個圖層,先新增

GMap.Net開發地址解析與路徑查詢

上一篇介紹瞭如何在GMap地圖上新增多邊形,這篇介紹下如何使用線上的地圖服務進行“地址解析”和“路徑查詢”。 先看地址解析,GMap中的地址解析主要用到GeocodingProvider中的如下方法: //根據關鍵字得到一組座標 GeoCoderStatusCode GetPoints(string

iOS開發地圖與定位

control 移動 idt line tor mkmapview 什麽 .cn 構建   不管是QQ還是微信的移動client都少不了定位功能,之前在微信demo中沒有加入定位功能,今天就寫個定位的小demo來了解一下定位和地圖的東西。地圖和定位看上去是挺高大

【.NET開發美】使用ComponentOne提高.NET DataMap中的載入速度

概述 FlexGrid for WinForm 採用了最新的資料繫結技術,並與Microsoft .NET Framework無縫整合。 因此,您可以獲得易於使用的靈活網格控制元件,用於建立使用者友好介面,以顯示、編輯、格式化、組織、彙總和打印表格資料。 FlexGrid的DataMap屬性允

.NET開發效能優化

資料庫效能之表設計   樹表設計:       樹狀表都是使用ID和IDParent兩個欄位來表示樹關係。對樹進行查詢只能使用自關聯方式,不光寫法麻煩而且記錄多的時候查詢效能會非常差。建議在設計樹表的時候可以考慮加入treePa

根據經緯度在地圖新增標記,實現登陸使用者分佈地理位置,顯示使用者資訊

實現登陸使用者分佈地理位置標註,可以顯示使用者資訊 直接上乾貨(整個html網頁) <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title&g

SpringBoot | 第十七章:web 應用開發檔案

前言 上一章節,我們講解了利用模版引擎實現前端頁面渲染,從而實現動態網頁的功能,同時也提出了相容jsp專案的解決方案。既然開始講解web開發了,我們就接著繼續往web這個方向繼續吧。通常,我們在做web開發時,碰見諸如附件上傳、圖片頭像上傳等檔案的上傳需求也是再正常不過的。

04 在地圖新增主頁、定位、鷹眼圖和比例尺控制元件

在上一篇文章中我們學習瞭如何建立一個簡單的地圖,那接下來,我們學習如何給建立好的地圖上新增一些基本的空間,最終效果如下圖所示: 由上圖可以看出,我們在地圖上添加了主頁、定位、鷹眼圖以及比例尺控制元件,下面將詳細介紹如何新增: 1 主頁按鈕的新增 新增主頁按鈕的前提是

GMap.net開發升級日誌20150822-20170511

2015.8.22 1.更新了谷歌地球衛星地圖的路徑,可以訪問高清衛星地圖了。更新後,必須重新生成下GMap.NET.Core才能有效果 2.關於如何獲取谷歌地圖和其它地圖的地圖路徑: 點選Chrome瀏覽器的選單(位址列右側,圖示是三個橫線的)按鈕,選擇:工具

android開發OkHttp傳byte陣列

最近準備對老專案改造安卓9.0相容,之前app請求是封裝的org.apache.http.legacy.jar這個包,而這個包再9.0的模擬器上會無法訪問,因此需要進行改造,而我的方案是直接改封裝底層為okhttp,簡單快捷; okhttp的 get  post  post

OpenLayers學習筆記(三)— QML與HTML通信 地圖點擊添加自由文本

web osi target eps open 文本輸入框 ref append tee 實現在地圖隨意點擊,彈出文本輸入框,輸入任意文字,完成自由文本添加的功能 作者: 狐貍家的魚 Github: 八至 本文鏈接:地圖上點擊添加自由文本 關於如何QML與

利用WPF建立自己的3d gis軟體(非axhost方式)(四)在地圖新增FrameworkElement

先下載SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew 密碼:1te1 地圖資料包(sqlserver2008R2版本,也可以不下載):  https://pan.baidu.com/s/1PjcNamad7OVpCrsVJ7dwF

Android遊戲開發地圖編輯器的使用以及繪製地圖

x Mappy中文地圖編輯器的使用說明 下載地址:  Mappy地圖編輯器.rar (938.58 KB, 下載次數: 2967) 壓縮包中包含 遊戲地圖編輯器使用指南 與地圖資源圖片 宮院1.png 一張 mapwin.exe 可執行檔案 map.FMP 與map.TXT

微信小程式開發圖片傳+Java服務端接收 好不好使有待確認

閒言少敘直入正題存放路徑:/root/apache-tomcat-8.5.30/webapps/images/xxx.jpg前端程式碼在網上一搜一大堆,且搜出來的結果基本上是正確的,沒啥好說的,我連程式碼都不想貼(如果有時間的話明天整理下貼在文章結尾,沒時間的話就不貼了)。但是,但是,但是,靠譜的,不用改動就

.NET開發環境VS中新增簡單自定義程式碼段

程式碼段極大增加了我們的開發效率,使我們可以快速調出固定的程式碼格式。 比如說,我們在程式中輸入cw,並按下兩次tab鍵,開發環境就會自動為我們生成程式碼。 按兩下tab鍵後 再比如我們輸入 prop 自動生成 我們只需要改一下相應的屬性型別和屬性名即可。 我們

Android開發 EditText 的清空按鈕

Android開發時很多時候EditText 輸入框都需要一些 X 一類的清空按鈕,這樣就必須重寫EditText public class UserPwdEditText extends EditText { private final St

vue元件開發圖片傳本地預覽元件

最近專案一直在使用vue,以前只是用vue做過一些簡單的demo對資料進行增刪改,並沒有用於實際開發專案,。今天就想了一下如何用vue實現常見的圖片上傳前本地預覽效果。 效果預覽: <template> <div class

(0016)iOS 開發MacNavicat Premium 建立遠端連線和本地連線

1.下載安裝 (百度雲盤裡面有安裝檔案和註冊機)   連結: https://pan.baidu.com/s/1kVG1k71 密碼: mr5g 2.破解之後還可以漢化: 把解壓的漢化中文包中的兩