You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asheville Airbnb数据经纬度与shp地图叠加绘图失败问题求助

Asheville Airbnb数据与城市边界shp叠加绘图不匹配问题解决

处理Asheville Airbnb数据集时,尝试基于房源的纬度(latitude)、经度(longitude)将街区信息与Asheville城市边界shp文件叠加绘图,但两者无法匹配显示。以下是问题分析、修正方案及参考教程核心内容:

参考教程核心内容(翻译自原英文教程)

  • 加载shp文件时,Geopandas会自动读取其内置的坐标参考系(CRS)信息;
  • 基于经纬度创建点图层时,必须为其设置正确的初始CRS(绝大多数公开经纬度数据采用WGS84标准,对应EPSG:4326);
  • 多图层叠加绘图前,必须确保所有图层的CRS完全一致,可通过to_crs()方法将图层转换为目标CRS。

原实现代码

shp_path = '../Airbnb_Asheville/Asheville_City_Limits/Asheville_City_Limits.shp'
gdf = gpd.read_file(shp_path)

geom2 = ashvile_list[['latitude', 'longitude','neighbourhood_cleansed','room_type']]
geom2 = geom2.rename(columns={'neighbourhood_cleansed': 'neighbourhood'})
geometry = [Point(xy) for xy in zip(geom2["latitude"], geom2["longitude"])]

crs = {'init': 'epsg:3857'}
geo_df = gpd.GeoDataFrame(geom2, crs=crs, geometry=geometry)

fig, gax = plt.subplots(figsize=(10,10))
gdf.boundary.plot(ax=gax)
geo_df.plot(ax=gax, color='red', alpha = 0.5)

gax.spines['top'].set_visible(False)
gax.spines['right'].set_visible(False)
gax.set_title('Asheville Airbnb')

plt.show()

原运行结果与数据预览

  • 绘图结果:
    绘图结果
  • geo_df数据预览:
    geo_df.head()
  • gdf数据预览:
    gdf.head()

问题根源

  1. 坐标顺序错误:Geopandas的Point对象要求输入顺序为**(经度, 纬度)**,原代码中把纬度放在了前面,导致所有房源点的位置被错误映射,与城市边界完全错位。
  2. 坐标参考系(CRS)不匹配:Airbnb提供的经纬度属于WGS84坐标系(EPSG:4326),原代码错误设置为Web墨卡托坐标系(EPSG:3857),且未统一两个图层的CRS,导致绘图时坐标系统不兼容。

修正后的代码

shp_path = '../Airbnb_Asheville/Asheville_City_Limits/Asheville_City_Limits.shp'
gdf = gpd.read_file(shp_path)

geom2 = ashvile_list[['latitude', 'longitude','neighbourhood_cleansed','room_type']]
geom2 = geom2.rename(columns={'neighbourhood_cleansed': 'neighbourhood'})
# 修正:Point的输入顺序为(经度, 纬度)
geometry = [Point(xy) for xy in zip(geom2["longitude"], geom2["latitude"])]

# 设置正确的初始CRS:Airbnb经纬度为WGS84,对应EPSG:4326
geo_df = gpd.GeoDataFrame(geom2, crs="EPSG:4326", geometry=geometry)

# 将房源数据的CRS转换为与城市边界shp一致的CRS
geo_df = geo_df.to_crs(gdf.crs)

fig, gax = plt.subplots(figsize=(10,10))
gdf.boundary.plot(ax=gax)
geo_df.plot(ax=gax, color='red', alpha = 0.5)

gax.spines['top'].set_visible(False)
gax.spines['right'].set_visible(False)
gax.set_title('Asheville Airbnb')

plt.show()

修正说明

  • 调整Point的坐标顺序,确保经度在前、纬度在后;
  • 为房源数据设置正确的初始CRS(EPSG:4326);
  • 使用to_crs()方法将房源数据的CRS转换为与城市边界shp文件一致的CRS,保证两个图层在同一坐标系统下叠加。

内容的提问来源于stack exchange,提问作者Sepid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:32:18