使用百度地图API生成麻点图

需求:给定一批地址,生成一张地图,上面有红点标注。
解决办法,总体思路是通过百度地图的API,免费高效:
1.注册一个百度帐号。登陆

http://lbsyun.baidu.com/apiconsole/key

创建一个应用,生成一个appkey
2.打开

http://developer.baidu.com/map/index.php?title=jspopular

找到云麻点图

http://developer.baidu.com/map/jsdemo.htm#g0_4

实际上找到的是JavaScript 开源库中的标注管理器

http://developer.baidu.com/map/index.php?title=open/library

选择里面的标注管理器的例子,基于它作修改。

3.用python脚本处理地址,调用http接口,生成json格式的代码。
接口说明如下:

http://developer.baidu.com/map/index.php?title=webapi/guide/webservice-placeapi

主要代码如下:
position_list = []
for place in list:
encode_place = urllib.quote(place)
url = ‘http://api.map.baidu.com/place/v2/search?&q=’ + encode_place + “®ion=” + encode_city + “&output=json&ak=” + ak
#print “place ” + place + ” encode ” + encode_place
#print “place ” + place + “url ” + url
url_ret = urllib.urlopen(url).read()
#print “place ” + place + ” ret ” + str(url_ret)
url_ret_json = json.loads(url_ret);
if url_ret_json['status'] == 0:
for position_info in url_ret_json['results']:
name = position_info['name']
if not position_info.has_key(‘location’):
continue
lat = position_info['location']['lat']
lng = position_info['location']['lng']
address = position_info['address']
coord_type = 1
#print (name.encode(‘utf8′) + “\t” + address.encode(‘utf8′) + “\t” + str(lng) + “\t” + str(lat) + “\t” + str(coord_type))
position = {
‘title’ : name,
‘address’ : address,
‘longitude’ : lng,
‘latitude’ : lat,
‘coord_type’ : coord_type
}
position_list.append(position)
print ‘{‘
print ‘\”title\”:\”‘ + name.encode(‘utf8′) + “\”,”
print ‘\”address\”:\”‘ + address.encode(‘utf8′) + “\”,”
print ‘\”longitude\”:’ + str(lng) + “,”
print ‘\”latitude\”:’ + str(lat) + “,”
print ‘\”coord_type\”:’ + str(lat)
print “},”
4.把生成的代码拷贝到position_list.js中
function get_position_list() {
var position_list = [
{
"title":"翡丽城",
"address":"城西西二环土门商圈核心团结中路(小树林旁)",
"longitude":108.889299,
"latitude":34.270751,
"coord_type":34.270751
},
...
]

5.在html中调用get_position_list,生成红点





Hello, World

// http://api.map.baidu.com/api?v=1.5&key=您的密钥&callback=initialize”; //此为v1.4版本及以前版本的引用方式
–>








需要注意的是,要引入MarkerManager_min.js,这个用来生成标注的js脚本
下载地址http://api.map.baidu.com/library/MarkerManager/1.2/src/MarkerManager_min.js
地图中心点随机从要画的地址中选择一个地址设置就可以。

把index.html和get_position.js拷贝到resin这个web server的webapps的baidu_map/目录下,直接访问http://localhost/baidu_map/index.html
就OK了。
这个过程的缺点有两个,一个是随着要绘制的点越来越多,这个例子中有1167个点要绘制,打开的速度会很慢,大约要一分钟。另一个缺点是鼠标点上去没有显示具体的地名,这个需要改进。
6.介绍另一种办法,方法在

http://jingyan.baidu.com/article/e4d08ffdd58e670fd2f60dd7.html?qq-pf-to=pcqq.c2c

中,应该更加高效。
但是我尝试了一下,生成了csv上传后,报服务器内部错误,生成失败,所以我选择自己生成原始数据,调用api绘制地图。

你可能感兴趣的:(技术)