通过folium创建交互式地图,以便更直观的展示地理数据的分布和模式。

而交通数据的地理形状基本为点(如gps点)、线(如车辆轨迹)、面(如行政区划)三种​​,接下来展示这三种地理形状的添加以及热力图绘制、geojson文件读取可视化等。

欢迎关注本人公众号--交通数据探索师

1、添加点数据

import folium # pointslist定义了两个点 pointsList = [[22.760371, 114.653769], [22.760371, 114.653269]] # 地图底图采用高德 tiles_gd = r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" # 先通过Map函数创建一个地图 # location:指定了地图显示的中心点 test_map = folium.Map(location=pointsList[0], tiles=tiles_gd, attr="default", zoom_start=13, tooltip="click me!") # 添加点数据 for i, it in enumerate(pointsList): # 通过Marker函数添加点 folium.Marker(it, popup='<i>Mt. Hood Meadows</i>',).add_to(test_map) # 点击位置显示经纬度 test_map.add_child(folium.LatLngPopup()) # 点击生成标记 即当你点击某个位置的时候,地图上会显示标记 test_map.add_child(folium.ClickForMarker(popup="Waypoint")) # 保存为html test_map.save(r"test.html")

输出结果如下,

2、添加线数据

import folium pointsList = [[22.760371, 114.653769], [22.760371, 114.653269]] tiles_gd = r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" test_map = folium.Map(location=pointsList[0], tiles=tiles_gd, attr="default", zoom_start=13, tooltip="click me!") # 通过给出组成线段的几个点来绘制这个线段 tmp_line = [[22.760371, 114.651769], [22.791271, 114.634176], [22.8004471, 114.651176]] # 通过PolyLine函数绘制线段,即将组成该线段的几个点按照顺序通过直线连接起来 folium.PolyLine(locations=tmp_line, color="red").add_to(test_map) # 保存为html test_map.save(r"C:\Users\zhaox\Desktop\test.html")

输出结果如下,

3、添加面数据

import folium pointsList = [[22.760371, 114.653769], [22.760371, 114.653269]] tiles_gd = r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" test_map = folium.Map(location=pointsList[0], tiles=tiles_gd, attr="default", zoom_start=13, tooltip="click me!") # tmp_polygon为嵌套列表,定义了多变形的几个定点坐标 # 该多边形可以显示闭合也可以隐式闭合 tmp_polygon = [[22.734037, 114.651769], [22.761117, 114.634176], [22.762244, 114.651176],[22.734037, 114.651769]] folium.Polygon(locations=tmp_polygon, fill_color='red').add_to(test_map) test_map.save(r"C:\Users\zhaox\Desktop\test.html")

输出结果如下,

4、热力图

import folium from folium.plugins import HeatMap # 使用上篇文章爬取的地铁站点数据 data = pd.read_excel(r'上海市地铁.xlsx') # 构建点坐标 注意这里的点坐标的纬度在前,经度在后 points = [[lat, lon] for lon, lat in zip(data['lon'], data['lat'])] # 高德地图作为底图 tiles_gd = r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" # 创建一个地图 base_map = folium.Map(location=points[0], tiles=tiles_gd, attr="default", zoom_start=13, tooltip="click me!") # 使用HeatMap函数绘制热力图 # 是相对于地图缩放级别的像素值,会随着地图缩放而动态调整 HeatMap(points, radius=15).add_to(base_map) base_map.save(r'C:\Users\zhaox\Desktop\test.html')

输出结果如下,

5、folium直接读取geojson文件

folium可以直接接收geojson格式的文件进行可视化。

import folium import geopandas as gpd data = gpd.read_file(r'县级.geojson') tiles_gd = r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}" base_map = folium.Map(location=[38.40192, 113.86078], tiles=tiles_gd, attr="default", zoom_start=13, tooltip="click me!") # 使用GeoJson函数接收geojson文件进行可视化 folium.GeoJson(data).add_to(base_map) base_map.save(r'test.html')

输出结果如下,

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐