使用 Folium 在绘制的 Geopandas Dataframe 上添加位置标记
Add location marker on plotted Geopandas Dataframe using Folium
上下文
我有一个合并的地理数据框 1)。邮政编码区和 2)。在名为 results
的格罗宁根市该邮政编码区域内的交付总量。地理数据框包括包含多边形和多边形的几何图形,可视化城市内的不同邮政编码区域。
我是 GeoPandas 的新手,因此我尝试了不同的教程,包括来自 geopandas 官方网站的 this one,我在其中介绍了我非常喜欢的交互式 Folium 地图。我能够使用 result.explore()
绘制我的地理数据框,从而生成以下地图
问题
到目前为止一切顺利,但现在我只想使用 folium libarty 放置一个标记,目的是计算标记和邮政编码区域之间的距离。在互联网上看了一些之后,我在 quickstart guild 中发现您需要创建一个 folium.Map
,然后您需要 folium.Choropleth
用于我的地理数据框和 folium.Marker
并将它们添加到folium.Map
.
m = folium.Map(location=[53.21917, 6.56667], zoom_start=15)
folium.Marker(
[53.210903, 6.598276],
popup="My marker"
).add_to(m)
folium.Choropleth(results, data=results, columns="Postcode", fill_color='OrRd', name="Postalcode areas").add_to(m)
folium.LayerControl().add_to(m)
m
但是当尝试 运行 上面的代码时,我得到以下错误:
(可能的)最佳方法是什么?
除了我的失败代码(如果有人能帮助我,那就太好了)。我很好奇这是否是这样做的方法(Folium 地图 + 标记 + choropleth)。是否无法调用 geodataframe.explore()
结果进入第二张图片中的地图,然后仅在同一张地图上添加标记?我觉得我做得太难了,一定有更好的解决方案使用Geopandas。
- 您还没有提供几何图形。已找到荷兰邮区并使用
explore()
支持将绘制一个点作为带有适当参数的标记
- 因此有两层,
- 一个是使用投递数量着色的邮政区域
- 第二个是点,计算了到每个区域的距离
import geopandas as gpd
import shapely.geometry
import pandas as pd
import numpy as np
geo_url = "https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&service=WFS&version=2.0.0&typeName=cbs_provincie_2017_gegeneraliseerd&outputFormat=json"
gdf = gpd.read_file(geo_url).assign(
deliveries=lambda d: np.random.randint(10**4, 10**6, len(d))
)
p = gpd.GeoSeries(shapely.geometry.Point(6.598276, 53.210903), crs="epsg:4386")
# calc distances to point
gdf["distance"] = gdf.distance(p.to_crs(gdf.crs).values[0])
# dataframe of flattened distances
dfp = pd.DataFrame(
[
"<br>".join(
[f"{a} - {b:.2f}" for a, b in gdf.loc[:, ["statcode", "distance"]].values]
)
],
columns=["info"],
)
# generate colored choropleth
m = gdf.explore(
column="deliveries", categorical=True, legend=False, height=400, width=400
)
# add marker with distances
gpd.GeoDataFrame(
geometry=p,
data=dfp,
).explore(m=m, marker_type="marker")
上下文
我有一个合并的地理数据框 1)。邮政编码区和 2)。在名为 results
的格罗宁根市该邮政编码区域内的交付总量。地理数据框包括包含多边形和多边形的几何图形,可视化城市内的不同邮政编码区域。
我是 GeoPandas 的新手,因此我尝试了不同的教程,包括来自 geopandas 官方网站的 this one,我在其中介绍了我非常喜欢的交互式 Folium 地图。我能够使用 result.explore()
绘制我的地理数据框,从而生成以下地图
问题
到目前为止一切顺利,但现在我只想使用 folium libarty 放置一个标记,目的是计算标记和邮政编码区域之间的距离。在互联网上看了一些之后,我在 quickstart guild 中发现您需要创建一个 folium.Map
,然后您需要 folium.Choropleth
用于我的地理数据框和 folium.Marker
并将它们添加到folium.Map
.
m = folium.Map(location=[53.21917, 6.56667], zoom_start=15)
folium.Marker(
[53.210903, 6.598276],
popup="My marker"
).add_to(m)
folium.Choropleth(results, data=results, columns="Postcode", fill_color='OrRd', name="Postalcode areas").add_to(m)
folium.LayerControl().add_to(m)
m
但是当尝试 运行 上面的代码时,我得到以下错误:
(可能的)最佳方法是什么?
除了我的失败代码(如果有人能帮助我,那就太好了)。我很好奇这是否是这样做的方法(Folium 地图 + 标记 + choropleth)。是否无法调用 geodataframe.explore()
结果进入第二张图片中的地图,然后仅在同一张地图上添加标记?我觉得我做得太难了,一定有更好的解决方案使用Geopandas。
- 您还没有提供几何图形。已找到荷兰邮区并使用
explore()
支持将绘制一个点作为带有适当参数的标记- 因此有两层,
- 一个是使用投递数量着色的邮政区域
- 第二个是点,计算了到每个区域的距离
import geopandas as gpd
import shapely.geometry
import pandas as pd
import numpy as np
geo_url = "https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&service=WFS&version=2.0.0&typeName=cbs_provincie_2017_gegeneraliseerd&outputFormat=json"
gdf = gpd.read_file(geo_url).assign(
deliveries=lambda d: np.random.randint(10**4, 10**6, len(d))
)
p = gpd.GeoSeries(shapely.geometry.Point(6.598276, 53.210903), crs="epsg:4386")
# calc distances to point
gdf["distance"] = gdf.distance(p.to_crs(gdf.crs).values[0])
# dataframe of flattened distances
dfp = pd.DataFrame(
[
"<br>".join(
[f"{a} - {b:.2f}" for a, b in gdf.loc[:, ["statcode", "distance"]].values]
)
],
columns=["info"],
)
# generate colored choropleth
m = gdf.explore(
column="deliveries", categorical=True, legend=False, height=400, width=400
)
# add marker with distances
gpd.GeoDataFrame(
geometry=p,
data=dfp,
).explore(m=m, marker_type="marker")