python:地理地图folium标记物icon,圆圈,圆形,热力图,经纬度点之间的线绘制
import webbrowser as wb
import folium
from folium.plugins import HeatMap, MiniMap, MarkerCluster
import numpy as np
# 绘制热力图
def draw_heatmap(map):
data = (
np.random.normal(size=(100, 3)) *
np.array([[1, 1, 1]]) +
np.array([[30, 104, 1]])
).tolist()
HeatMap(data).add_to(map)
# 增加小地图
def draw_minimap(map):
minimap = MiniMap(toggle_display=True,
tile_layer='Stamen Watercolor',
position='topleft',
width=100,
height=100)
map.add_child(minimap)
# 在地图上绘制无边框圆形,填充颜色
def draw_CircleMarker(loc, radius, map):
folium.CircleMarker(
location=loc,
radius=radius,
color="cornflowerblue",
stroke=False,
fill=True,
fill_opacity=0.6,
opacity=1,
popup="{} 像素".format(radius),
tooltip=str(loc),
).add_to(map)
# 在地图上绘制一个小Info标记物
def draw_icon(map, loc):
mk = folium.features.Marker(loc)
pp = folium.Popup(str(loc))
ic = folium.features.Icon(color="blue")
mk.add_child(ic)
mk.add_child(pp)
map.add_child(mk)
# 在地图上绘制一个圆圈
def draw_Circle(map, loc, radius):
folium.CircleMarker(
location=loc,
radius=radius,
color="red",
weight=3,
fill=False,
fill_opacity=0.6,
opacity=1,
).add_to(map)
# 绘制可缩放的标记物数字指示
def draw_MarkerCluster(map, loc):
marker_cluster = MarkerCluster().add_to(map)
folium.Marker(
location=loc,
popup="弹窗消息1",
icon=folium.Icon(color="green", icon="ok-sign"),
).add_to(marker_cluster)
folium.Marker(
location=loc,
popup="弹窗消息2",
icon=folium.Icon(color="red", icon="remove-sign"),
).add_to(marker_cluster)
folium.Marker(
location=loc,
popup="弹窗消息3",
icon=None,
).add_to(marker_cluster)
# 画线
def draw_line(map, loc1, loc2):
kw = {"opacity": 1.0, "weight": 6}
folium.PolyLine(
smooth_factor=10,
locations=[loc1, loc2],
color="red",
tooltip="连线两个经纬度点",
**kw,
).add_to(map)
def draw_lines(map, coordinates):
folium.PolyLine(
smooth_factor=50,
locations=coordinates,
color="#FF0000",
weight=2,
tooltip="连接多个城市之间的线",
).add_to(map)
folium.PolyLine(
smooth_factor=50,
locations=coordinates,
color="grey",
tooltip="灰色的线条",
weight=5,
).add_to(map)
if __name__ == '__main__':
latlngs = [[39.929986, 116.395645], # 北京中心点经纬度
[31.249162, 121.487899], # 上海中心点经纬度
[23.120049, 113.30765], # 广州中心点经纬度
[22.546054, 114.025974], # 深圳中心点经纬度
[30.679943, 104.067923]] # 成都中心点经纬度
map = folium.Map([30., 104.], # 地图中心
tiles='stamentoner', # stamentoner,Stamen Watercolor,OpenStreetMap'
zoom_start=6)
draw_heatmap(map)
draw_minimap(map)
draw_CircleMarker(loc=latlngs[0], radius=20, map=map)
draw_MarkerCluster(map, latlngs[1])
draw_Circle(map, latlngs[2], radius=15)
draw_icon(map, latlngs[3])
draw_line(map, latlngs[0], latlngs[4])
draw_lines(map, latlngs)
map.save('m.html')
wb.open('m.html')
代码运行后如同所示:
更多folium示例请查阅 https://nbviewer.jupyter.org/github/python-visualization/folium/tree/master/examples/