CitySpace数据集入门指南:从数据加载到可视化实战

1次阅读
没有评论

共计 1867 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景介绍

CitySpace 数据集是城市空间分析领域的经典开源数据集,包含建筑轮廓、道路网络、POI 点等多模态地理空间数据。它的核心价值在于:

CitySpace 数据集入门指南:从数据加载到可视化实战

  • 覆盖全球 20+ 主要城市的标准化数据
  • 包含几何特征(如多边形、线串)和属性数据(如类别、高度)
  • 支持跨城市的对比研究和机器学习建模

数据解析

解压后的数据集通常包含以下目录结构:

CitySpace/
├── metadata.json       # 数据版本和坐标系说明
├── cities/
│   ├── new_york/       
│   │   ├── buildings.geojson
│   │   ├── roads.geojson
│   │   └── pois.csv
│   └── london/         
│       └── ...
└── statistics/         # 预计算的指标文件

关键文件说明:

  • GeoJSON 文件:存储空间几何对象(需用 geopandas 处理)
  • CSV 文件:存储属性数据(可用 pandas 直接读取)
  • metadata.json:记录数据采用的 CRS 坐标系(常用 EPSG:4326)

实战演示

数据加载

安装依赖库:

pip install geopandas pandas matplotlib folium

加载建筑数据示例:

import geopandas as gpd

# 读取 GeoJSON 文件(自动转换为 GeoDataFrame)buildings = gpd.read_file('CitySpace/cities/new_york/buildings.geojson')
print(f"共加载 {len(buildings)} 条建筑记录")
print(buildings.crs)  # 查看坐标系

数据清洗

处理异常值的典型操作:

# 过滤无效几何体(如面积为 0 的建筑)valid_buildings = buildings[buildings.area > 0]

# 处理高度缺失值(用类别平均高度填充)mean_heights = valid_buildings.groupby('type')['height'].mean()
valid_buildings['height'] = valid_buildings.apply(lambda x: mean_heights[x['type']] if pd.isna(x['height']) else x['height'], 
    axis=1
)

可视化实践

静态可视化

绘制建筑高度分布直方图:

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
valid_buildings['height'].hist(bins=50)
plt.title('纽约市建筑高度分布')
plt.xlabel('高度(米)')
plt.ylabel('频数')
plt.grid(True)
plt.show()

交互式地图

生成热力图(需提前安装 folium):

import folium
from folium.plugins import HeatMap

# 创建底图(定位到纽约市中心)nyc_map = folium.Map(location=[40.7128, -74.0060], zoom_start=12)

# 准备热力图数据(经度、纬度、权重)heat_data = [[point.y, point.x, height] 
             for point, height in zip(
                 valid_buildings.geometry.centroid, 
                 valid_buildings['height']
             )]

# 添加热力图层
HeatMap(heat_data, radius=15).add_to(nyc_map)
nyc_map.save('nyc_building_heatmap.html')

避坑指南

  1. 坐标系不匹配
  2. 问题:不同图层 CRS 不一致导致叠加错位
  3. 解决:用 to_crs() 统一坐标系(如 EPSG:4326)

  4. 内存不足

  5. 问题:处理大城市数据时内存溢出
  6. 解决:使用 chunksize 参数分块读取,或选用 Dask 库

  7. 几何无效错误

  8. 问题:is_valid检查失败导致空间运算报错
  9. 解决:运行 buffer(0) 修复几何体(如df.geometry = df.geometry.buffer(0)

进阶建议

  1. 城市对比分析
  2. 计算多个城市的建筑密度 / 高度分布差异
  3. 使用空间自相关指标(如 Moran’s I)

  4. 路网可达性建模

  5. 结合 OSMNX 库分析道路网络特征
  6. 计算步行可达的公共服务设施覆盖率

  7. 3D 可视化

  8. 用 PyVista 或 Cesium 生成城市三维模型
  9. 添加高度和纹理信息

完整代码示例可在 GitHub 模板库 获取,包含可直接运行的 Colab Notebook。

正文完
 0
评论(没有评论)