基于百度地图的 JS API 示例学习
最近在做和地图相关的项目,需要在 C# 编写的桌面应用中嵌入在线地图。我首先尝试了百度地图提供的 JavaScript API,大致了解它的实现过程,这是一个小的示例。
首先要去百度开发者平台申请一个 Key,实际上根据我的个人体验,不用密钥也可以使用,只不过是 1.4 版。目前最新是 2.0。开始的创建地图都很简单,还可以添加标注点以及鼠标点击事件。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
body, html,#allmap { 100%;height: 100%;overflow: hidden;margin:0;}
#l-map{height:100%;78%;float:left;border-right:2px solid #bcbcbc;}
#r-result{height:100%;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>
我遇到的一个小问题是,更换了标注点的图标之后,放大缩小地图会导致标记点漂移。查了官方类的说明,但是很简略。我多次测试之后才明白问题出现在这两个参数上:
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) }
可以调整设置到图标的中心,这样再去放大缩小地图就不会出现图标移位的状况。