Python坐标点在地图上展示基于folium
上次已经批量获取了地图上的坐标点。如果你还没看,可以点击查看如何批量查询地点的坐标基于腾讯地图。
导入包
import pandas as pd
import folium
创建地图图层
#创建地图
m = folium.Map(location=[39.91, 116.40], #中心坐标
zoom_start=12, #地图等级
#地图瓦片,这里用的是腾讯地图的,没有找到腾讯地图其他的。如果谁有请给我一个。
tiles='http://rt1.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=6',
attr='default')
先不着急批量展示,先在地图上展示一个。没问题之后,一个for循环就能解决问题。
folium.Marker(location=[39.95,116.50],
popup='<s>测试按钮').add_to(m)
m
看来已经成功了,那么开始批量吧。由于点太多,我想把离得近的点自动聚合。并且点击时标签横向显示。
完整代码
import pandas as pd
import folium
from folium.plugins import MarkerCluster
data=pd.read_csv('小区地址.csv',encoding='gbk',index_col='索引') #读取文件
m = folium.Map(location=[39.91, 116.40], #地图中心点
zoom_start=12, #初始地图等级
#腾讯地图瓦片
tiles='http://rt1.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=6',
#默认参数
attr='default')
#创建聚合
marker_cluster =MarkerCluster().add_to(m)
#for循环添加标记点
for i in range(len(data)):
folium.Marker(location=[data.loc[i,'纬度'], data.loc[i,'经度']], #坐标用[纬度,经度]
popup=folium.Popup(data.loc[i,'小区名'],
parse_html=True,
max_width=100) #提示语横向完全显示
).add_to(marker_cluster)
m.save('小区全部坐标.html') #保存到当前目录下
当然我们还可以加上分组,让筛选更方便。
import pandas as pd
import folium
from folium.plugins import MarkerCluster
from folium import FeatureGroup,LayerControl
tile='http://rt1.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=0'
df =pd.read_csv('小区完整版.csv')
distriction=df['区'].drop_duplicates()
m = folium.Map(location=[39.91, 116.40], #地图中心点
tiles=None,
control_scale=True, #显示比例尺
zoom_start=12) #初始等级
folium.TileLayer(tiles=tile,attr='default',name='腾讯地图').add_to(m) #地图瓦片添加命名
# #创建组
for i in distriction:
exec(str(i)+' = '+'FeatureGroup(name="'+str(i)+'",show=False).add_to(m)')
#创建聚合
for j in distriction:
exec(str(j)+'mc = '+ 'MarkerCluster().add_to('+str(j)+')' )
#for循环添加标记点
for k in range(len(df)):
exec('''folium.Marker(location=[df.loc[k,'纬度'], df.loc[k,'经度']],
popup=folium.Popup(df.loc[k,'小区名'],
parse_html=True,