用不同的轴分层地图
Posted
技术标签:
【中文标题】用不同的轴分层地图【英文标题】:Layering maps with different axes 【发布时间】:2022-01-15 07:22:12 【问题描述】:我是 python 新手,尝试使用具有两层的 geopandas 创建地图。一层是波特兰市社区的 shapefile,另一层是我要固定的波特兰经纬度数据集。
每个图都可以单独绘制(即我已经做到了那么远),但是分层不起作用,因为用于波特兰市地图的坐标不是经纬度形式。波特兰的开放数据网站上有关于如何使用 QGIS 将 shapefile 转换为 geoJSON 的说明,并在此过程中将 CRS 设置为 EPSG:4269,但我不知道如何在 Python 中使用 shapefile 执行此操作。
图像显示每个绘图都很好,直到我尝试将它们绘制在一起,注意轴...
fig,ax = plt.subplots(figsize = (15,15))
street_map.plot (ax = ax, alpha = .4, color ='grey')
fig,ax = plt.subplots(figsize = (15,15))
#street_map.plot (ax = ax, alpha = .4, color ='grey')
geo_df[geo_df['price']>250].plot(ax=ax, markersize = 20, color = 'blue', marker = "o")
fig,ax = plt.subplots(figsize = (15,15))
street_map.plot (ax = ax, alpha = .4, color ='grey')
geo_df[geo_df['price']>250].plot(ax=ax, markersize = 20, color = 'blue', marker = "o")
【问题讨论】:
欢迎来到python!如果您发布所有必要的代码以到达您卡住的地方,这将对我们有很大帮助 - 理想情况下包括指向 shapefile 的链接。正如一些答案指出的那样,您绝对可以对齐这些,但您需要知道 shapefile 的源 CRS。你是如何阅读 shapefile 的? Fiona 或 geopandas 还是别的什么? 【参考方案1】:您是否尝试过 geopandas.GeoDataFrame.to_crs() 方法来更改 python 中的 crs?
https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.to_crs.html
【讨论】:
我还没有尝试过,因为我需要更改的 crs 是用于 shapefile ...这是一个地理数据框,还是我需要先将其转换为一个? 你可以看看你的“街道地图”对象的类型来确定,但我很有信心这是因为你可以使用适用于地理数据框的 plot() 方法 我可以通过在街道地图上使用 to_crs() 方法解决这个问题。这是一个简单的修复!【参考方案2】:我已查找您引用的数据,但仅找到符合 CRS (EPSG:4326) 的 geojson。如果您在另一个 CRS 中有 GeoDataFrame,根据其他评论,请使用 to_crs("EPSG:4326")
使几何图形保持一致。
import requests
import geopandas as gpd
import plotly.express as px
# boundaries
gdf_b = gpd.GeoDataFrame.from_features(
requests.get(
"https://www.portlandmaps.com/arcgis/rest/services/Public/COP_OpenData_Boundary/MapServer/3/query?outFields=*&where=1%3D1&f=geojson"
).json()
)
# water fountains
gdf_wf = gpd.GeoDataFrame.from_features(
requests.get(
"https://opendata.arcgis.com/datasets/070f61b58ac646b0aaf2a223b2dd16fa_84.geojson"
).json()
)
px.scatter_mapbox(
gdf_wf, lon=gdf_wf.geometry.x, lat=gdf_wf.geometry.y, hover_data=["COMMENTARY"]
).update_layout(
mapbox=
"style": "carto-positron",
"layers": ["source": gdf_b.__geo_interface__, "type": "fill", "opacity": 0.3],
)
【讨论】:
以上是关于用不同的轴分层地图的主要内容,如果未能解决你的问题,请参考以下文章