需求:因为想到那些个旅行APP都会有点亮足迹的功能,百度地图也有足迹的功能;所以自己想对自己走过的地方做一个标记,因为需求简单,只想记录下省份、城市,并不要那些很细小的县、景点之类,所以决定自己写个页面挂博客上。
功能:将旅行走过的省份点亮,鼠标点击时显示省份及到过的城市。
效果预览:http://www.i007it.com/blog/tr_foots.php
早前玩微信的公众号开发的时候,也接触到百度地图API了,所以知道直接去百度地图的开放平台上找资料就行了。因为是Web开发,目前并不涉及手机端(ios, android)的,所以手机端的功能暂时不照顾。
下面三个网址,用来了解、查询资料的(其实只要知道第一个就行了):
百度开放平台:
http://lbsyun.baidu.com/index.php?title=jspopular
里面有完整、详细的开发指南,也提供了"Hello World"示例(一个demo)。
示例DEMO:
http://developer.baidu.com/map/jsdemo.htm#a1_2
里面有很多示例,基本上直接在demo上修改就行了。也可以在这里的源代码编辑器上直接修改、运行,进行调试。
JavaScript API 类参考v2.0:
http://developer.baidu.com/map/reference/index.php?title=Class:%E6%80%BB%E7%B1%BB/%E6%A0%B8%E5%BF%83%E7%B1%BB
方便查询每一个类,以及类的方法那些。
步骤:
一、地图常规设置
1、直接把"Hello World"示例拿过来用。
2、初始化地图,设置中心点坐标和地图级别
用Map类的centerAndZoom方法。可以在类参考中找到这个类的方法。map.centerAndZoom(new BMap.Point(106.403765, 33.914850), 5);
默认的中心点坐标是北京的坐标,可以自己调整。
地图级别3-19级,你自己改一下级别就懂了,就是显示的地图大小。
3、启用滚轮放大缩小
用Map类的enableScrollWheelZoom方法,默认是禁用的。map.enableScrollWheelZoom(true);
4、定制个性地图
在开发指南中直接有具体的介绍,然后用Map类的setMapStyle方法设置下就行了。
二、区分行政区域
因为默认地图上省份之间只有一些虚线,为了更明显的一目了然,就想着把省份弄成一块一块的。这里就用到了多边形覆盖物。百度在DEMO里也已经有提供例子,直接自己看就行:
http://developer.baidu.com/map/jsdemo.htm#c1_10
主要是这个循环:
for (var i = 0; i < count; i++) {
var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物
map.addOverlay(ply); //添加覆盖物
}
然后建立个数组,把全国的省份都添加进去,做个循环,一个个省份都画一下就行。
三、点亮省份
其实这个功能跟上面区分行政区域的功能差不多,只是在建立多边形覆盖物的时候多了一个参数。然后建立一个旅行过的省份的数组。
var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000", fillColor:"#ff0000"});
可以看看覆盖物类中Polygon这个类,因为在里面看到了setFillColor的方法,所以就自己直接把参数加上去试了下,果然没错。
四、点击所有省份显示省份名
这是一个鼠标点击的事件,可以先看DEMO:
http://developer.baidu.com/map/jsdemo.htm#h0_4
当然,这里是整个地图的监听事件,我们只需要把它移植过去,变为Polygon的点击事件就行。
点击事件中,可以获取到当前点击的经纬度坐标,那就需要用到一个类——Geocoder类,这个类可以通过坐标点反向获取省市区街道。
var myGeo=new BMap.Geocoder();
myGeo.getLocation(new BMap.Point(e.point.lng,e.point.lat),function(result)
{alert(result.addressComponents.province+","+result.addressComponents.city);});
五、点击点亮的省份显示省份以及旅行城市名
因为已经可以通过坐标获取到省份,那再建个字典就可以通过获取到的省份,得到旅行的城市名。当时,事前,我们要先建个字典,把点亮的省份为了key,其对应到过的城市作为value。例如:
var citys = new Array();
citys["福建省"] = "厦门市";
citys["江苏省"] = "南京市,苏州市";
因为直接声明的是全局变量,所以在函数里可以通过**window.citys["福建省"]**这样来使用。
PS.手机端访问没有点击效果,因为这个覆盖物,可以自己尝试解决。
完整源码下载:
https://github.com/hduzn/own_code/blob/master/travel_footsteps.php