模組測試(一)----c#控制html中的資料(GMap)
阿新 • • 發佈:2019-02-04
一. 配置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的博文, 很有幫助