如何在WinFrom上显示百度地图,也许这个很多人会说这个很容易,但是如何实现WinFrom与百度地图的完美交互,如果在Winfrom的控制输入经纬度,准确定位出在百度地图上,并且还能显示出具体的地址出来。再比如输入多个经纬度定位出所有点的具体定位等等,这都是需要进行一番好好研究。

百度地图API地址:http://lbsyun.baidu.com/jsdemo.htm#indoor0_0

开发之前多看看相关的API就会节省大量的时间,磨刀不误砍柴工。

主要实现功能

  • 单点定位
  • 多点定位
  • 匹配路径

单点定位

winfrom传参到百度地图

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3. try
  4. {
  5. string lon = textBox1.Text.Trim();
  6. string lat = textBox2.Text.Trim();
  7.  
  8. string url = string.Format(Application.StartupPath + "/getVehiclePoint.html?lng={0}&lat={1}&type=1", lon, lat);
  9. webBrowser1.Navigate(url);
  10. }
  11. catch (Exception ex)
  12. {
  13. MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  14. }
  15. }

百度地图如何来接收这部分参数

  1. function getQueryString(name) {
  2. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  3. var r = window.location.search.substr(1).match(reg);
  4. if (r != null) return unescape(r[2]); return null;
  5. }
  6. var lng = decodeURI(getQueryString("lng"));
  7. var lat = decodeURI(getQueryString("lat"));
  8. var type = decodeURI(getQueryString("type"));
  9. var str=decodeURI(getQueryString("str")); 

创建地图

  1. var map = new BMapGL.Map('container'); // 创建Map实例
  2. map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 12); // 初始化地图,设置中心点坐标和地图级别
  3. map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放  

多点定位

多点定位传参

  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. try
  4. {
  5. string str1 = textBox3.Text.Trim() + "," + textBox4.Text.Trim();
  6. string str2 = textBox5.Text.Trim() + "," + textBox6.Text.Trim();
  7. string str3 = textBox7.Text.Trim() + "," + textBox8.Text.Trim();
  8. string str4 = textBox9.Text.Trim() + "," + textBox10.Text.Trim();
  9. string str5 = textBox11.Text.Trim() + "," + textBox12.Text.Trim();
  10. string str = str1 + ";" + str2 + ";" + str3 + ";" + str4 + ";" + str5;
  11.  
  12. string url = string.Format(Application.StartupPath + "/getVehiclePoint.html?lng={0}&lat={1}&type=2&str={2}", 0, 0, str);
  13. webBrowser1.Navigate(url);
  14.  
  15. //webBrowser1.ObjectForScripting = this;
  16. }
  17. catch (Exception ex)
  18. {
  19. MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  20. }
  21. }

根据经纬度定位出具体的地址并且创建弹框显示地址

  1. function setMarker(point) {
  2. var gc = new BMap.Geocoder();
  3. gc.getLocation(point, function (rs) {
  4. var addComp = rs.addressComponents;
  5. var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
  6.  
  7. //将标注添加到地图中
  8. var marker = new BMap.Marker(point); // 创建标注
  9. map.addOverlay(marker);
  10.  
  11. var opts = {
  12. width: 200, // 信息窗口宽度
  13. height: 100, // 信息窗口高度
  14. title: "地址信息" // 信息窗口标题
  15. }
  16. var infoWindow = new BMap.InfoWindow(address, opts); // 创建信息窗口对象
  17. marker.addEventListener("click", function () {
  18. map.openInfoWindow(infoWindow, point); //开启信息窗口
  19. });
  20. });
  21. } 

添加地图控件

  1. //地图控件添加函数:
  2. function addMapControl() {
  3. //向地图中添加缩放控件
  4. var ctrl_nav = new BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE });
  5. map.addControl(ctrl_nav);
  6. ////向地图中添加缩略图控件
  7. //var ctrl_ove = new BMap.OverviewMapControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1 });
  8. //map.addControl(ctrl_ove);
  9. //向地图中添加比例尺控件
  10. var ctrl_sca = new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT });
  11. map.addControl(ctrl_sca);
  12.  
  13. //实时显示地图坐标 strat
  14. map.addEventListener("mousemove", GetlngAndlat);
  15. }

匹配路径

鼠标移动实时显示具体的经纬度和具体地址

  1. function GetlngAndlat(e) {
  2. if (e.point.lng != null) {
  3. document.getElementById("mouselng").value = e.point.lng;
  4. document.getElementById("mouselat").value = e.point.lat;
  5.  
  6. var gc = new BMap.Geocoder();
  7. gc.getLocation(e.point, function (rs) {
  8. var addComp = rs.addressComponents;
  9.      var address = addComp.province + addComp.city + addComp.district + addComp.street + addComp.streetNumber;
  10. document.getElementById("address").value = address;
  11. });
  12. }
  13. }

  

  1. //实时显示地图坐标 strat
  2. map.addEventListener("mousemove", GetlngAndlat); 

计算两点的路线和行车时间和里程

  1. var map = new BMapGL.Map("container");
  2. map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);
  3.  
  4. var p1 = new BMapGL.Point(116.301934,39.977552);
  5. var p2 = new BMapGL.Point(116.508328,39.919141);
  6.  
  7. var driving = new BMapGL.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}});
  8. driving.search(p1, p2);
  1. var map = new BMapGL.Map("container");
  2. map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);
  3.  
  4. var p1 = new BMapGL.Point(116.301934,39.977552);
  5. var p2 = new BMapGL.Point(116.508328,39.919141);
  6.  
  7. var driving = new BMapGL.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}});
  8. driving.search(p1, p2);

定时任务时间接收定位和具体的地址信息

  1. private void timer1_Tick(object sender, EventArgs e)
  2. {
  3. try
  4. {
  5. if (webBrowser1.Document != null)
  6. {
  7. string tag_lng = webBrowser1.Document.GetElementById("mouselng").GetAttribute("value"); //获取经纬度
  8. string tag_lat = webBrowser1.Document.GetElementById("mouselat").GetAttribute("value");
  9. string address = webBrowser1.Document.GetElementById("address").GetAttribute("value");
  10. double dou_lng, dou_lat;
  11. if (double.TryParse(tag_lng, out dou_lng) && double.TryParse(tag_lat, out dou_lat)) //字符串转double数据
  12. {
  13. this.label9.Text = "当前坐标:[" + dou_lng.ToString("F5") + "," + dou_lat.ToString("F5") + "],当前地址:" + address;
  14. }
  15. }
  16. }
  17. catch (Exception ee)
  18. {
  19. //MessageBox.Show(ee.Message+"1");
  20. }
  21. }  

WinFrom与百度地图完美交互的更多相关文章

  1. 完整版百度地图点击列表定位到对应位置并有交互动画效果demo

    1.前言 将地图嵌入到项目中的需求很多,好吧,我一般都是用的百度地图.那么今天就主要写一个完整的demo.展示一个列表,点击列表的任一内容,在地图上定位到该位置,并有动画效果.来来来,直接上demo  ...

  2. Qt的QWebChannel和JS、HTML通信/交互驱动百度地图

    Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就迷上了上位机,接了几个项目都是关于Qt,这个项目还是比较经典的,自己没事儿的时候也进行研究 ...

  3. 完美解决百度地图MarkerClusterer 移动地图时,Marker 的Label 丢失的问题

    这篇文章来自http://www.cnblogs.com/jicheng1014   不好意思,那些rss 站太生猛了. 先吐槽一下百度地图的开发者,其实这个问题我绝对不是第一个遇到的人 很多人把这个 ...

  4. Mono For Android中完美使用百度地图SDK(v2.1.2&v2.1.3)(转)

    在Xamarin Mono For Android的开发中,如果要使用第三方的jar,就必须进行绑定.通过创建Java Bindings Library项目来自动生成C#到java的代码映射代码,最终 ...

  5. 百度地图与HT for Web结合的GIS网络拓扑应用

    在<HT for Web整合OpenLayers实现GIS地图应用>篇中介绍了HT for Web与OpenLayers的整合,不少朋友反应国内用得比较多的还是百度地图,虽然HT整合百度地 ...

  6. 最全面的百度地图JavaScript离线版开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5822231.html 项目要求web版百度地图要离线开发.这里总结下自己的开发过程和经验. 大概需求是:每辆 ...

  7. C#调用百度地图 api

    转  http://blog.csdn.net/kkkkkxiaofei/article/details/8663377 这一篇,记录一下我调用的地图API实现的功能.下面介绍的都是一些片段的节选,不 ...

  8. Android百度地图 关于visibility="gone"的奇葩问题

    最近在项目中遇到一个奇葩问题,花了很长时间,在这里记录下. 问题描述:我的主界面是ViewPager+Fragment,并且设置缓存了我的4个ViewPager页面.左侧是一个侧滑菜单,点击相应按钮打 ...

  9. 百度地图、ECharts整合HT for Web网络拓扑图应用

    前一篇谈及到了ECharts整合HT for Web的网络拓扑图应用,后来在ECharts的Demo中看到了有关空气质量的相关报表应用,就想将百度地图.ECharts和HT for Web三者结合起来 ...

随机推荐

  1. Python 3的f-Strings:增强的字符串格式语法(指南)

    最近也在一个视频网站的爬虫,项目已经完成,中间有不少需要总结的经验. 从Python 3.6开始,f-Strings是格式化字符串的一种很棒的新方法.与其他格式化方式相比,它们不仅更具可读性,更简洁且 ...

  2. C# TextBlock

    TextBlock 适合长文本多行显示,Label可以看成是一个简短的单行的TextBlock,只是Label可以显示图片,TextBlock只能显示纯文本 默认的文本不会分行显示,超出窗体宽度的字符 ...

  3. 编写一个c函数,该函数给出一个字节中被置为1的位的个数

    请编写一个c函数,该函数给出一个字节中被置为1的位的个数 #include <stdio.h> void fun(char ch) { int i; int temp; int count ...

  4. HDU 4335 What is N?(指数循环节)题解

    题意: 询问有多少数\(n\)满足\(n^{n!}\equiv b\mod p \land\ n\in[1,M]\),数据范围:\(M\leq2^{64}-1,p\leq1e5\) 思路: 这题显然要 ...

  5. MAC地址分类

    网卡MAC地址作为互联网设备在以太网中身份的唯一标识在以太网通讯中的作用比IP地址还要重要,MAC地址分成两部分,前24位是组织唯一标识符(OUI, Organizationally unique i ...

  6. 使用Benchmark.NET测试代码性能

    今天,我们将研究如何使用Benchmark.Net来测试代码性能.借助基准测试,我们可以创建基准来验证所做的更改是否按预期工作并且不会导致性能下降. 并非每个项目都需要进行基准测试,但是如果您正在开发 ...

  7. Raspberry Pi & Node.js & WebSockets & IM

    Raspberry Pi & Node.js & WebSockets & IM Raspberry Pi 4 nvm & node.js $ curl -o- htt ...

  8. vue & table with operation slot

    vue & table with operation slot seed demo <!-- @format --> <template> <seed ref=& ...

  9. js 动态构建style

    使用创建style的方式 btn.addEventListener("click", async () => { const ns = document.createElem ...

  10. 03_MySQL重置root密码

    重设root密码