首先注册成为开发者百度地图开放平台 | 百度地图API SDK | 地图开发
创建一个服务器端应用,这个应用是为了查询地点的经纬度
把地点存一个csv文件,为了查询准确把市和区补在地点前面,通过python读取地址,像地图API接口请求经纬度信息,通过正则表达式解析出经纬度(也可以用json解析)
# -*- coding: utf-8 -*-
# 第一行必须有,否则报中文字符非ascii码错误
import re
import time
from urllib.request import urlopen, quote
import pandas as pd
def getlnglat(address):
queryStr = 'https://api.map.baidu.com/geocoding/v3/?address=' + address + '&output=json&ak=这里填写你创建的应用的AK码'
# 对queryStr进行转码,safe内的保留字符不转换
encodedStr = quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
req = urlopen(encodedStr)
res = req.read().decode("utf-8")
pattern_lng = re.compile(r'"lng":\d+.\d+')
try:
lng = re.findall(pattern_lng, res)[0][6:]
except:
lng = re.findall(pattern_lng, res)
print(address, "err:", lng)
pattern_lat = re.compile(r'"lat":\d+.\d+')
try:
lat = re.findall(pattern_lat, res)[0][6:]
print(address, lat, lng)
except:
lat = re.findall(pattern_lat, res)
print(address, "err:", lat)
return lat, lng # 纬度 latitude , 经度 longitude ,
addrName = pd.read_csv('addr.csv')
lst = []
for i in range(addrName.shape[0]):
name = addrName.iloc[i, 0]
lat, lng = getlnglat(name)
lst.append([name, lng, lat])
time.sleep(0.1)
df = pd.DataFrame(lst)
df.to_csv('addr_lonlat.csv', encoding='utf_8_sig')
print("done")
# lat, lng = getlnglat("上海市浦东新区东昌新村")
把经纬度信息存成一个csv文件。
https://lbsyun.baidu.com/jsdemo.htm#c1_15
打开百度地图热力图示例,把你的经纬度复制到这里
?var point = new BMap.Point(116.418261, 39.921984); ??? map.centerAndZoom(point, 15);???????????? // 初始化地图,设置中心点坐标和地图级别
这里是地图初始显示的中心。下面的points是你自己的经纬度点,即可查看。
再创建一个浏览器应用,把这段代码复制下来存成html文件,ak写上你的浏览器应用ak码,方便查看。
总结:1、统计地址;2、查询经纬度;3、利用经纬度画地图
|