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数据预览:

- gdf数据预览:

问题根源
- 坐标顺序错误:Geopandas的
Point对象要求输入顺序为**(经度, 纬度)**,原代码中把纬度放在了前面,导致所有房源点的位置被错误映射,与城市边界完全错位。 - 坐标参考系(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
相关产品推荐
相关产品推荐

