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來畫。

效果圖如下:

 

 

項目地址:https://github.com/luxiaoxun/MapDownloader

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM