【C#】开发小记——关于WebBrowser中百度地图的一些疑难杂症

本文介绍了百度地图API的应用案例,包括坐标转换的实现方法及其限制,以及如何通过设置全局变量解决自定义标记图标的问题。此外,还详细探讨了如何正确创建信息窗口并避免出现所有标记点击后显示同一信息窗口的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、坐标转换

百度地图API中坐标转换的方法如下:

var convertor = new BMap.Convertor();
        convertor.translate(point, 1, 5, translateCallback)

其中的1和5代表什么并不清楚,其实也不太需要理解,point就是个成员为Bmap.Point的数组,也就是点坐标合集,translateCallback就是自己写的回调函数,问题就在于,这个回调函数是不能自定义输入参数的,它的输入参数只有一个data,一个转换后的坐标数组,这就意味着,如果我在使用WinForm与其交互的时候,需要不仅仅是在地图上画出默认mark,而是自定义mark的图标、标签等,那这些参数是不能作为参数传入回调函数的,然而百度地图又只有这一种方法,目前的解决方式就是设置个全局变量来存我输入的自定义参数,然后在回调函数里用全局变量。如果我需要多个点呢?那当然就是只能设全局变量为数组来存储了。

2、信息窗口

百度地图中的mark除了添加图标和标签,还有很重要的一点,是可以绑定点击事件,弹出信息窗口:

var infoWindow = new BMap.InfoWindow("地址:北京市东城区王府井大街88号乐天银泰百货八层", opts);  // 创建信息窗口对象 
marker.addEventListener("click", function(){map.openInfoWindow(infoWindow,point); //开启信息窗口});

代码很简单,很好理解,我在项目中遇到问题是:我需要不断创建新的InfoWindow,但是最后发现,所有的mark点击之后都在同个地方弹出同一个信息窗口,那是最后一个mark应该绑定的信息窗口和位置,这很容易想到,是因为这个InfoWindow是全局变量会出现的问题,但我并没有这么做过,最后我的解决方法还是比较麻烦的:

首先是设置一个全局变量的mark的数组和InfoWindow的数组,每次new一个新的mark,push到数组中,new一个InfoWindow同样push到对应的数组中,在mark绑定的click事件中,不要写:

marker.addEventListener("click", function(){map.openInfoWindow(infoWindow,point); 

而是:

marker[i].addEventListener("click", function(){map.openInfoWindow(infoWindows[markers.indexOf(this)],point); 

注意,目前C#的WebBrowser不支持数组使用indexOf方法,得另外写一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值