使用C#呼叫百度地圖並實現座標點的設定以及讀取示例
阿新 • • 發佈:2020-07-10
申請百度地圖金鑰以及檢視百度API
網址:http://lbsyun.baidu.com/apiconsole/key#/home
網址:http://lbsyun.baidu.com/jsdemo.htm#c1_3
程式實現功能:
1、輸入網址那可以呼叫本地的html檔案,也可以訪問其他網站
2、輸入座標、新增座標按鈕,可以將座標值傳入html檔案中,顯示在經緯度的文字框中
3、定位按鈕可以將地圖重新定位,定位中心是文字框內的經緯度
4、新增標註點是將文字框內的經緯度新增座標到地圖
5、刪除標註按鈕可以刪除全部標註點
6、滑鼠點選地圖,可以在文字框內顯示點選的座標經緯度
7、點選開始實時顯示按鈕,滑鼠在地圖上移動,可以獲得實時經緯度
最終圖
利用webBrowser控制元件展示地圖
VS建立工程,新增控制元件webBrowser,新建.html檔案,.html檔案參考百度API,將其寫入檔案
為了能與JS互動,首先引入using System.Security.Permissions;,然後在namespace下必須加入兩行:
[PermissionSet(SecurityAction.Demand,Name = "FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)]
給窗體一個Load事件、、、這個是功能的主要點
然後窗體執行的程式碼:
private void Form1_Load(object sender,EventArgs e) { try { //string str_url = Application.StartupPath + "../HTMLPage1.html";// 新增自己新增的html檔名,注意使用相對路徑的方法 HTMLPage1.html要複製到debug目錄下 string str_url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html";// 新增自己新增的html檔名,注意使用相對路徑的方法 HTMLPage1.html要複製到debug目錄下 Uri url = new Uri(str_url); webBrowser1.Url = url; // WebBrowser控制元件顯示的網頁路徑 webBrowser1.ObjectForScripting = this; // 將當前類設定為可由指令碼訪問 textBox1.Text = str_url; } catch (Exception ex) { MessageBox.Show(ex.Message,"異常",MessageBoxButtons.OK,MessageBoxIcon.Error); } }
.html檔案
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0,user-scalable=no" /> <style type="text/css"> body,html{ width: 100%; height: 100%; overflow: hidden; margin: 0; font-family: "微軟雅黑"; } #allmap { height: 97%; width: 100%; } #r-result { width: 100%; font-size: 14px; } </style> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的金鑰"></script> <title>地圖展示</title> </head> <body> <div id="r-result"> <!--文字和文字框---> 經度: <input id="longitude" type="text" style="width:100px; margin-right:10px;" /> 緯度: <input id="latitude" type="text" style="width:100px; margin-right:10px;" /> <!--按鈕---> <input type="button" value="定位" onclick="theLocation()" /> <input type="button" value="新增標註" onclick="addPoint()" /> <input type="button" value="刪除標註" onclick="deletePoint()" /> </div> <div id="allmap"></div> <b id="mouselng">0 <b id="mouselat">0 </body> </html> <script type="text/javascript"> // 百度地圖API功能 var map = new BMap.Map("allmap"); // 建立Map例項 var point = new BMap.Point(120.371,30.327); // 建立點座標 map.centerAndZoom(point,17); // 初始化地圖,設定中心點座標和地圖級別 //向地圖新增標註 var marker = new BMap.Marker(point); // 建立標註 map.addOverlay(marker); // 將標註新增到地圖中 // 新增帶有定位的導航控制元件 var navigationControl = new BMap.NavigationControl({ // 靠左上角位置 anchor: BMAP_ANCHOR_TOP_LEFT,// LARGE型別 type: BMAP_NAVIGATION_CONTROL_LARGE,// 啟用顯示定位 enableGeolocation: true }); map.addControl(navigationControl); //新增地圖單擊顯示GPS事件 function showInfo(e) { //alert(e.point.lng + "," + e.point.lat);//視窗顯示點選位置的GPS document.getElementById("longitude").innerText = e.point.lng; document.getElementById("latitude").innerText = e.point.lat; document.getElementById("mouselng").innerHTML = e.point.lng; document.getElementById("mouselat").innerHTML = e.point.lat; } map.addEventListener("click",showInfo); //監聽事件 //新增地圖型別控制元件 map.addControl(new BMap.MapTypeControl({ mapTypes:[ BMAP_NORMAL_MAP,BMAP_HYBRID_MAP ] })); var opts = { offset: new BMap.Size(100,20) } map.addControl(new BMap.ScaleControl(opts));//比例尺控制元件 //map.addControl(new BMap.ScaleControl()); //比例尺控制元件 map.setCurrentCity("杭州"); // 僅當設定城市資訊時,MapTypeControl的切換功能才能可用 map.enableScrollWheelZoom(true); //開啟滑鼠滾輪縮放 // 用經緯度設定地圖中心點 function theLocation() { if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") { map.clearOverlays(); var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value); var marker = new BMap.Marker(new_point); // 建立標註 map.addOverlay(marker); // 將標註新增到地圖中 map.panTo(new_point); //用經緯度設定地圖中心點 } } // 新增標註 function addPoint() { if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") { var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value); var marker = new BMap.Marker(new_point); // 建立標註 map.addOverlay(marker); // 將標註新增到地圖中 } } // 刪除所有標註 function deletePoint() { //獲取地圖上所有的覆蓋物,並刪除 //map.clearOverlays(); //獲取地圖上所有的覆蓋物,並刪除 var allOverlay = map.getOverlays(); for (var i = 0; i < allOverlay.length; i++) { if (allOverlay[i].toString() == "[object Marker]") { map.removeOverlay(allOverlay[i]); } } ////刪除指定經緯度的標註 //if (document.getElementById("longitude").value != "" && document.getElementById("latitude").value != "") { // var new_point = new BMap.Point(document.getElementById("longitude").value,document.getElementById("latitude").value); // var marker = new BMap.Marker(new_point); // 建立標註 // map.removeOverlay(marker); //} } map.addEventListener("mousemove",GetlngAndlat); function GetlngAndlat(e) { if (e.point.lng != null) { document.getElementById("mouselng").innerHTML = e.point.lng; document.getElementById("mouselat").innerHTML = e.point.lat; } } </script>
http://lbsyun.baidu.com/jsdemo.htm#c1_3
百度官方文件給了很多Demo,可根據需求來寫
Form1.cs完整程式碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Security.Permissions; using System.IO; namespace map { // 而為了能與JS互動,首先引入using System.Security.Permissions;,然後在namespace下必須加入兩行: [PermissionSet(SecurityAction.Demand,Name = "FullTrust")]//呼叫JS程式碼必要 [System.Runtime.InteropServices.ComVisibleAttribute(true)] public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender,EventArgs e) { try { //string str_url = Application.StartupPath + "../HTMLPage1.html";// 新增自己新增的html檔名,注意使用相對路徑的方法 HTMLPage1.html要複製到debug目錄下 string str_url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html";// 新增自己新增的html檔名,注意使用相對路徑的方法 HTMLPage1.html要複製到debug目錄下 Uri url = new Uri(str_url); webBrowser1.Url = url; // WebBrowser控制元件顯示的網頁路徑 webBrowser1.ObjectForScripting = this; // 將當前類設定為可由指令碼訪問 textBox1.Text = str_url; } catch (Exception ex) { MessageBox.Show(ex.Message,MessageBoxIcon.Error); } } private void button1_Click(object sender,EventArgs e) { //本地檔案 MapWinForms\bin\Debug //string url = Application.StartupPath + "\\HTMLPage1.html"; //string url = "C:/Users/12606/Desktop/C#/map/map/HTMLPage1.html"; //textBox1.Text = url; string url = textBox1.Text.ToString(); //遮蔽js相關錯誤 webBrowser1.ScriptErrorsSuppressed = true; //導航顯示本地HTML檔案 webBrowser1.Navigate(url); } private void timer1_Tick(object sender,EventArgs e) { try { string tag_lng = webBrowser1.Document.GetElementById("mouselng").InnerText; string tag_lat = webBrowser1.Document.GetElementById("mouselat").InnerText; double dou_lng,dou_lat; if (double.TryParse(tag_lng,out dou_lng) && double.TryParse(tag_lat,out dou_lat)) { label2.Text = "當前座標:" + dou_lng.ToString("F6") + "," + dou_lat.ToString("F6");//保留小數點後6位 } } catch (Exception ee) { MessageBox.Show(ee.Message); } } private void btnGetLocation_Click(object sender,EventArgs e) { if (btnGetLocation.Text == "開啟實時座標") { timer1.Enabled = true; btnGetLocation.Text = "關閉實時座標"; } else { btnGetLocation.Text = "開啟實時座標"; timer1.Enabled = false; } } private void btnGPS_Click(object sender,EventArgs e) { webBrowser1.Document.GetElementById("longitude").InnerText = textBox_longitude.Text; webBrowser1.Document.GetElementById("latitude").InnerText = textBox_latitude.Text; } } }
原始碼
到此這篇關於使用C#呼叫百度地圖並實現座標點的設定以及讀取示例的文章就介紹到這了,更多相關C#百度地圖座標點讀取內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!