如何在WinForm上顯示百度地圖,也許這個很多人會說這個很容易,但是如何實現WinForm 與百度地圖的完美交互,如果在WinForm 的控制輸入經緯度,准確定位出在百度地圖上,並且還能顯示出具體的地址出來。再比如輸入多個經緯度定位出所有點的具體定位等等,這都是需要進行一番好好研究。
百度地圖API地址:http://lbsyun.baidu.com/jsdemo.htm#indoor0_0
開發之前多看看相關的API就會節省大量的時間,磨刀不誤砍柴工。
主要實現功能
- 單點定位
- 多點定位
- 匹配路徑
單點定位

winfrom傳參到百度地圖
private void button1_Click(object sender, EventArgs e)
{
try
{
string lon = textBox1.Text.Trim();
string lat = textBox2.Text.Trim();
string url = string.Format(Application.StartupPath + "/getVehiclePoint.html?lng={0}&lat={1}&type=1", lon, lat);
webBrowser1.Navigate(url);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "異常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
百度地圖如何來接收這部分參數
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
var lng = decodeURI(getQueryString("lng"));
var lat = decodeURI(getQueryString("lat"));
var type = decodeURI(getQueryString("type"));
var str=decodeURI(getQueryString("str"));
創建地圖
var map = new BMapGL.Map('container'); // 創建Map實例
map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 12); // 初始化地圖,設置中心點坐標和地圖級別
map.enableScrollWheelZoom(true); // 開啟鼠標滾輪縮放
多點定位

多點定位傳參
private void button2_Click(object sender, EventArgs e)
{
try
{
string str1 = textBox3.Text.Trim() + "," + textBox4.Text.Trim();
string str2 = textBox5.Text.Trim() + "," + textBox6.Text.Trim();
string str3 = textBox7.Text.Trim() + "," + textBox8.Text.Trim();
string str4 = textBox9.Text.Trim() + "," + textBox10.Text.Trim();
string str5 = textBox11.Text.Trim() + "," + textBox12.Text.Trim();
string str = str1 + ";" + str2 + ";" + str3 + ";" + str4 + ";" + str5;
string url = string.Format(Application.StartupPath + "/getVehiclePoint.html?lng={0}&lat={1}&type=2&str={2}", 0, 0, str);
webBrowser1.Navigate(url);
//webBrowser1.ObjectForScripting = this;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "異常", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
根據經緯度定位出具體的地址並且創建彈框顯示地址
function setMarker(point) {
var gc = new BMap.Geocoder();
gc.getLocation(point, function (rs) {
var addComp = rs.addressComponents;
var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
//將標注添加到地圖中
var marker = new BMap.Marker(point); // 創建標注
map.addOverlay(marker);
var opts = {
width: 200, // 信息窗口寬度
height: 100, // 信息窗口高度
title: "地址信息" // 信息窗口標題
}
var infoWindow = new BMap.InfoWindow(address, opts); // 創建信息窗口對象
marker.addEventListener("click", function () {
map.openInfoWindow(infoWindow, point); //開啟信息窗口
});
});
}
添加地圖控件
//地圖控件添加函數:
function addMapControl() {
//向地圖中添加縮放控件
var ctrl_nav = new BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE });
map.addControl(ctrl_nav);
////向地圖中添加縮略圖控件
//var ctrl_ove = new BMap.OverviewMapControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1 });
//map.addControl(ctrl_ove);
//向地圖中添加比例尺控件
var ctrl_sca = new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT });
map.addControl(ctrl_sca);
//實時顯示地圖坐標 strat
map.addEventListener("mousemove", GetlngAndlat);
}
匹配路徑

鼠標移動實時顯示具體的經緯度和具體地址
function GetlngAndlat(e) {
if (e.point.lng != null) {
document.getElementById("mouselng").value = e.point.lng;
document.getElementById("mouselat").value = e.point.lat;
var gc = new BMap.Geocoder();
gc.getLocation(e.point, function (rs) {
var addComp = rs.addressComponents;
var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
document.getElementById("address").value = address;
});
}
}
//實時顯示地圖坐標 strat
map.addEventListener("mousemove", GetlngAndlat);
計算兩點的路線和行車時間和里程
var map = new BMapGL.Map("container");
map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);
var p1 = new BMapGL.Point(116.301934,39.977552);
var p2 = new BMapGL.Point(116.508328,39.919141);
var driving = new BMapGL.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}});
driving.search(p1, p2);
var map = new BMapGL.Map("container");
map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);
var p1 = new BMapGL.Point(116.301934,39.977552);
var p2 = new BMapGL.Point(116.508328,39.919141);
var driving = new BMapGL.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}});
driving.search(p1, p2);
定時任務時間接收定位和具體的地址信息
private void timer1_Tick(object sender, EventArgs e)
{
try
{
if (webBrowser1.Document != null)
{
string tag_lng = webBrowser1.Document.GetElementById("mouselng").GetAttribute("value"); //獲取經緯度
string tag_lat = webBrowser1.Document.GetElementById("mouselat").GetAttribute("value");
string address = webBrowser1.Document.GetElementById("address").GetAttribute("value");
double dou_lng, dou_lat;
if (double.TryParse(tag_lng, out dou_lng) && double.TryParse(tag_lat, out dou_lat)) //字符串轉double數據
{
this.label9.Text = "當前坐標:[" + dou_lng.ToString("F5") + "," + dou_lat.ToString("F5") + "],當前地址:" + address;
}
}
}
catch (Exception ee)
{
//MessageBox.Show(ee.Message+"1");
}
}
