最近在作和地图相关的项目,须要在 C# 编写的桌面应用中嵌入在线地图。我首先尝试了百度地图提供的 JavaScript API,大体了解它的实现过程,这是一个小的示例。javascript
首先要去百度开发者平台申请一个 Key,实际上根据个人我的体验,不用密钥也能够使用,只不过是 1.4 版。目前最新是 2.0。开始的建立地图都很简单,还能够添加标注点以及鼠标点击事件。css
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;} #l-map{height:100%;width:78%;float:left;border-right:2px solid #bcbcbc;} #r-result{height:100%;width:20%;float:left;} </style> <!-- 百度地图v1.4可不用密钥 src="http://api.map.baidu.com/api?v=1.4"--> <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你本身的密钥"></script> <title>百度地图的Hello, World</title> </head> <body> <div id="allmap"></div> </body> </html> <script type="text/javascript"> var map = new BMap.Map("allmap"); // 建立Map实例 var point = new BMap.Point(108.771672, 34.039175); // 建立点坐标 map.centerAndZoom(point,18); // 初始化地图,设置中心点坐标和地图级别。 map.enableScrollWheelZoom(); //启用滚轮放大缩小 var marker1 = new BMap.Marker(new BMap.Point(108.771672, 34.039175)); // 建立标注 map.addOverlay(marker1); // 将标注添加到地图中 marker1.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画 var infoWindow1 = new BMap.InfoWindow("协同感知中心地点"); //给标注添加信息框 //给mark添加鼠标单击事件 marker1.addEventListener("click", function () { this.openInfoWindow(infoWindow1); }); //编写自定义函数添加工做者标注 function addMarker(point, i) { //百度默认的标注是个红色气球,能够给它换图标: var myIcon = new BMap.Icon("./red_dot.png", new BMap.Size(20, 20), { anchor: new BMap.Size(10, 10) });//本身要添加的路径 var marker2 = new BMap.Marker(point, { icon: myIcon }); // 建立标注 map.addOverlay(marker2); // 将标注添加到地图中 //最后为信息框加入点击鼠标事件: var infoWindow2 = new BMap.InfoWindow("<p style='font-size:12px;'>工做者"+ i +"</p>"); marker2.addEventListener("click", function () { this.openInfoWindow(infoWindow2); }); } // 随机向地图添加25个标注 var bounds = map.getBounds(); var sw = bounds.getSouthWest(); var ne = bounds.getNorthEast(); var lngSpan = Math.abs(sw.lng - ne.lng); var latSpan = Math.abs(ne.lat - sw.lat); for (var i = 0; i < 15; i++) { var point = new BMap.Point(sw.lng + lngSpan * (Math.random() ), ne.lat - latSpan * (Math.random() )); addMarker(point, i); } </script>
我遇到的一个小问题是,更换了标注点的图标以后,放大缩小地图会致使标记点漂移。查了官方类的说明,可是很简略。我屡次测试以后才明白问题出如今这两个参数上:html
var myIcon = new BMap.Icon("./red_dot.png", new BMap.Size(20, 20), { anchor: new BMap.Size(10, 10) });
这里{ anchor: new BMap.Size(10, 10) }
能够调整设置到图标的中心,这样再去放大缩小地图就不会出现图标移位的情况。java