1. 程式人生 > >模組測試(一)----c#控制html中的資料(GMap)

模組測試(一)----c#控制html中的資料(GMap)

一. 配置GMap

 然後我們我們編譯GMap.NET.WindowsForms工程, 生成GMap.NET.Core.dll和GMap.NET.WindowsForms.dll

然後新增到我們的工程中.(PS: 這裡需要注意我們的工程框架要在3.5以上, 還有特別重要的一點, 我們應用的這兩個dll檔案都是在GMap.NET.WindowsForms工程下的)

然後在我們的c#工程裡新建一個使用者控制元件類, 命名為MapControl

 檔案繼承於GMapControl類

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using GMap.NET.WindowsForms;

namespace cs_var_toHtml
{
    public partial class MapControl : GMapControl
    {
        public MapControl()
        {
            InitializeComponent();
        }

        private void MapControl_Load(object sender, EventArgs e)
        {

        }
    }
}

這樣我們編譯一下這個工程, 然後我們就可以在我們的工具箱 裡找到MapControl控制元件進行使用了.

二.使用GMap.NET進行操作

(1) 初始化(中心位置, 解析度, 去十字圖示)

try
            {
                System.Net.IPHostEntry e = System.Net.Dns.GetHostEntry("ditu.google.cn");
            }
            catch
            {
                mapControl1.Manager.Mode = AccessMode.CacheOnly;
                MessageBox.Show("No internet connection avaible, going to CacheOnly mode.", "GMap.NET Demo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

            mapControl1.CacheLocation = Environment.CurrentDirectory + "\\GMapCache\\"; //快取位置
            mapControl1.MapProvider = GMapProviders.GoogleChinaMap; //google china 地圖
            mapControl1.MinZoom = 2;  //最小比例
            mapControl1.MaxZoom = 24; //最大比例
            mapControl1.Zoom = 15;     //當前比例
            mapControl1.ShowCenter = false; //不顯示中心十字點
            mapControl1.DragButton = System.Windows.Forms.MouseButtons.Left; //左鍵拖拽地圖
            mapControl1.Position = new PointLatLng(31.7508319669, 119.9192261696); //地圖中心位置:江理工圖書館

            mapControl1.Overlays.Add(markersOverlay);

            mapControl1.MouseClick += new MouseEventHandler(mapControl_MouseClick);

(2) 滑鼠操作

右擊標綠點

void mapControl_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Right)
            {
                PointLatLng point = mapControl1.FromLocalToLatLng(e.X, e.Y);
                GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
                markersOverlay.Markers.Add(marker);
            }
        }

(3) 打點方法

//將字串組LatLngInfo的點打標記,經緯度中用','隔開, 把點的顏色也寫成形參
        public void SetLableOnMap(string[] LatLngInfo)
        {
            //建立圖層  
            GMapOverlay gMapOverlay = new GMapOverlay();
            //給每個座標打點
            for (int i = 0; i < LatLngInfo.Length; i++)
            {
                string[] LatLng = LatLngInfo[i].Split(',');
                //在座標點上繪製一綠色點並向圖層中新增標籤 
                gMapOverlay.Markers.Add(new GMarkerGoogle(new PointLatLng(double.Parse(LatLng[1]), double.Parse(LatLng[0])), GMarkerGoogleType.red));
                //方便之後尋找到是第幾個GMapMarker   
                gMapOverlay.Markers[i].Tag = i;
                gMapOverlay.Id = "markroad";
            }
            //向控制元件中新增圖層  
            mapControl1.Overlays.Add(gMapOverlay);
        }

 呼叫:

//------------呼叫打點函式---------------//
            string[] LatLngInfo=new string[2];
            LatLngInfo[0] ="12,12";   //第一個經緯度
            LatLngInfo[1] = "12,13";  //第二個經緯度
            SetLableOnMap(LatLngInfo);

(4) 區域

新增多邊形(不準確, 在找原因)

//在地圖上畫矩陣,知道矩陣上下左右(Lat_top、Lat_bottom、Lng_left、Lng_right)的4個點
GMapOverlay polyOverlay = new GMapOverlay("polygons");
            List<PointLatLng> points = new List<PointLatLng>();
            //注意新增點的順序
            points.Add(new PointLatLng(Lat_top, Lng_left));          
            points.Add(new PointLatLng(Lat_bottom, Lng_left));
            points.Add(new PointLatLng(Lat_bottom, Lng_right));
            points.Add(new PointLatLng(Lat_top, Lng_right));
            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);

(5) 路線

(6) 提示

(7)文字標籤(看打點方法裡也有)

//--------------加一個閃爍點&  文字標籤---------------//
        public void PointShark(double Lat, double Lng, string label)
        {
            GMapOverlay gMapOverlay = new GMapOverlay();
            PointLatLng point = new PointLatLng(Lat,Lng);
            gMapOverlay.Markers.Add(new GMarkerGoogle(point, GMarkerGoogleType.red));
            GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.green);
            marker.ToolTipText = label;       //這是標籤
            marker.Tag = 1;
            marker.ToolTipMode = MarkerTooltipMode.Always;
            gMapOverlay.Markers.Add(marker);   //這一句話也很關鍵!!!!, 不然不顯示標籤
            mapControl1.Overlays.Add(gMapOverlay);//新增圖層, 只有新增才會顯示我們需要的點
        }

三. 結果及參考文章

PS上面為寫的方法在下面這個博文裡又有, 博主有一些列的GMap的博文, 很有幫助