C#调用百度地图API经验分享(四)

这一篇,记录一下我调用的地图API实现的功能。下面介绍的都是一些片段的节选,不能直接复制就运行。在实现之前肯定要加载地图,先放一个webbroser控件,然后如下:

private void Form1_Load(object sender, EventArgs e){string str_url = Application.StartupPath + "\\最终合并版本(昨晚修改).html";Uri url = new Uri(str_url);webBrowser1.Url = url;webBrowser1.ObjectForScripting = this;}

而为了能与JS交互,首先引入using System.Security.Permissions;,然后在namespace下必须加入两行:

namespace WebBroser_Test_V1._0{[PermissionSet(SecurityAction.Demand, Name = "FullTrust")][System.Runtime.InteropServices.ComVisibleAttribute(true)]public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){string str_url = Application.StartupPath + "\\最终合并版本(昨晚修改).html";Uri url = new Uri(str_url);webBrowser1.Url = url;webBrowser1.ObjectForScripting = this;// timer1.Enabled = true;}}

有了上面的基础,就可以实现以下功能了。

1.鼠标放在屏幕上移动时,实时的显示坐标。

放入一个timer和一个StatusScrip:

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)){toolstatus_CurrentLocation.Text ="当前坐标:"+ dou_lng.ToString("F5") + "," + dou_lat.ToString("F5");}}catch (Exception ee){ MessageBox.Show(ee.Message); }}

放入一个button命名及代码如下:

private void btnGetLocation_Click(object sender, EventArgs e){if (btnGetLocation.Text == "开启实时坐标"){timer1.Enabled = true;btnGetLocation.Text = "关闭实时坐标";}else{btnGetLocation.Text = "开启实时坐标";timer1.Enabled = false;}}

JS脚本如下:

var map =new BMap.Map("allmap");var first_locate=new BMap.Point(108.953098,34.2778);map.centerAndZoom(first_locate,15);map.enableScrollWheelZoom(true);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; }}

2.开启测距工具(百度自己开发的)

拖一个按钮:

//开启测距工具按钮private void btnOpenDistance_Click(object sender, EventArgs e){webBrowser1.Document.InvokeScript("openGetDistance");}

为了加载这个工具,是需要引入百度的另一个工具库:

JS如下:

<script type="text/javascript" src="./JScript/DistanceTool_min.js"></script>function openGetDistance(){ var myDis=new BMapLib.DistanceTool(map);//map为上面已经初始化好的地图实例 myDis.open();}

//上面这个DistanceTool_min.js在百度的DEMO里有,我只是把它考到我的DEBUG下了,具体路径自己解决。

3.右击鼠标给地图上放marker,每一个marker的icon换成小汽车,并且显示坐标编号和坐标值,然后每放置一次,将数据存入数据库。

//放标注

private void btnPutMarker_Click(object sender, EventArgs e){if (radioButton1.Checked || radioButton2.Checked || radioButton3.Checked || radioButton4.Checked)webBrowser1.Document.InvokeScript("PUTANDSEND");else{MessageBox.Show("至少选择一项!");}}//得到Radiobutton的值public string setWhichCar(){if (radioButton1.Checked)return "1";if (radioButton2.Checked)return "2";if (radioButton3.Checked)return "3";if (radioButton4.Checked)return "4";return "Erro";}//将从JS里得到的汽车数据显示到文本框内,并且存入数据库public void PutIntotextBox(object markerIndex,object carNumber,object JSlng,object JSlat){text_index.Text =markerIndex.ToString();text_num.Text = (string)carNumber;text_lng.Text = JSlng.ToString();text_lat.Text = JSlat.ToString();string sql = "insert into 汽车轨迹数据 values (‘"+text_num.Text+"’,’"+text_index.Text+"’,’"+text_lng.Text+"’,’"+text_lat.Text+"’,’"+DateTime.Now.ToString()+"’)";DBfunction.getcom(sql);}

JS脚本如下:

//—————放标注,并且将JS的数据传送给WINFORM————function PUTANDSEND(){ map.addEventListener("rightclick",putAndsend);}function putAndsend(e){ //放标注 var p1=new BMap.Point(e.point.lng,e.point.lat); var marker = new BMap.Marker(p1,{icon:myIcon});//将标注的图标改为小汽车 map.addOverlay(marker); marker_num++;//标注索引,这个是个全局变量 var whichCar=window.external.setWhichCar(); var label=new BMap.Label(whichCar+"号车-坐标"+marker_num+":"+"("+e.point.lng+","+e.point.lat+")",{offset:new BMap.Size(20,-10)}); marker.setLabel(label); //给WINFORM传值 window.external.PutIntotextBox(marker_num,whichCar,e.point.lng,e.point.lat);}不畏不惧,不言不弃,冲破风雨的阻隔,黎明就在前方!

C#调用百度地图API经验分享(四)

相关文章:

你感兴趣的文章:

标签云: