python3使用folium模块做一个某些地点附近1.5公里商户的地图可视化界面
获取地点的经纬度
将地点地址写入到TXT文件里
代码创建一个CSV文件用来存储程序获得的地点名称与经纬度。
从中发现每一行之后会空出一行,这个bug无关紧要(这个问题已经解决啦,在open里加个newline=""就好啦!),因为之后用来写进代码里的数据都是放在TXT中的,因为读取表格可能会出现很多其他问题,用TXT就方便很多了。
下面是主函数代码:
if __name__ == '__main__':
file_csv = open('./经纬度.csv', 'w+', encoding='utf-8')
writer = csv.writer(file_csv)
writer.writerow(["area", "lat", "lng"]) # 列名
for line in open("./hbwd.txt", encoding='utf8'):
print(line)
#得到经纬度
url=get_url(line)
json_data=get_json(url)
lnglat=get_lnglat(json_data)
get_url:将地址转换成网络链接。
get_json:获取返回的json文件。
get_lnglat:解析json文件获得经纬度。
利用高德地图按上步经纬度做周边搜索
前部分与前面一样建立CSV文件与TXT(内容为连同地址名称一起把获取到的经纬度放到里面以空格隔开)
建立所要获取商户的类型如:保险、银行等
将类型代入周边检索网络链接中,其他步骤与上部一样。
利用folium建立地图
同样的建立TXT文件里面放入经纬度和其他要在地图上展示的内容。
if __name__ == '__main__':
f = codecs.open('./hbwd_jwd.txt', mode='r', encoding='utf-8')
line = f.readline()
list4 = []
while line:
x = line.split()
all = x[0:5]
list4.append((all))
line = f.readline()
f.close()
f1 = codecs.open('sf_hp.txt', mode='r', encoding='utf-8')
line1 = f1.readline()
list1 = []
while line1:
a1 = line1.split()
all1 = a1[0:4]
list1.append((all1))
line1 = f1.readline()
f1.close()
#商户
f2 = codecs.open('./hb_sh.txt', mode='r', encoding='utf-8')
line2 = f2.readline()
list2 = []
while line2:
a2 = line2.split()
all2 = a2[0:5]
list2.append((all2))
line2 = f2.readline()
f2.close()
draw_map(list4,list1,list2)
这是展示结果:
上图的蓝色标记是我自己做的图片,可以在代码中规定他的大小,绿色标记是程序内部的图案,鼠标点击图标都可以生成一个信息框用来展示,上面的红线是每个区与每个区之间做的划分,也是用代码生成的,地图的底图是可以更换的,我这里用的是高德地图的,因为python自带的地图信息不全,因为项目需要更换了地图。
注:因为使用不同的地图api接口会生成不同的经纬度,用在不同的地图底板上会出现明显偏移,我这里使用了墨卡托坐标转换,下面是不同方法对应的地图。
######GCJ-02:高德、搜搜、51地图MapABC地图,谷歌中国地图
######WGS-84:国外的Google地图、OSM
######BD-09:百度坐标、图吧坐标、搜狗坐标
如果大家有什么程序上的问题或想法,欢迎大家来call我,本人QQ:2781057557