SuperAPI AI 工具集

geospatial-viz-guide

数据与分析

查看项目

更新于 10-16 08:18

技能介绍

用途

Geospatial Visualization Guide 是一个为研究出版服务的地理空间可视化技能,主要帮助研究者创建地图、等值线图(choropleth)和空间数据可视化图表,适用于学术论文与研究报告中的制图需求。

主要能力

该技能覆盖以下内容:

  • 地理空间数据基础:常见空间数据格式与关键概念。
  • 等值线图(choropleth)的构建与数据连接。
  • 点地图与比例符号(proportional symbols)地图。
  • 交互式网页地图。
  • 制图最佳实践(投影、配色、地图要素、伦理)。
  • 免费数据源清单。

常见空间数据格式

矢量数据(离散要素):

  • Shapefile(.shp):旧标准,多文件
  • GeoJSON(.geojson):适合网页,单文件
  • GeoPackage(.gpkg):基于 SQLite 的现代格式,推荐使用
  • KML(.kml):Google Earth 格式

栅格数据(连续表面):

  • GeoTIFF(.tif):带地理参考的图像
  • NetCDF(.nc):气候与大气数据
  • HDF5(.h5):卫星与遥感数据

关键概念:

  • CRS(坐标参考系统):3D 地球如何映射到 2D
  • EPSG:4326(WGS84):纬度/经度(大多数 GPS 数据)
  • EPSG:3857:Web Mercator(Google Maps、网页瓦片)
  • 始终检查并记录你的 CRS

使用方式

资料提供了基于 Python 地理空间库的代码示例,可按需调用或改写。

用 GeoPandas 构建等值线图

import geopandas as gpd
import matplotlib.pyplot as plt

def create_choropleth(shapefile_path: str, data_column: str,
                      title: str, cmap: str = "YlOrRd") -> None:
    """
    Create a choropleth map from a shapefile.

    Args:
        shapefile_path: Path to shapefile or GeoPackage
        data_column: Column name to visualize
        title: Map title
        cmap: Matplotlib colormap name
    """
    gdf = gpd.read_file(shapefile_path)

    fig, ax = plt.subplots(1, 1, figsize=(12, 8))

    gdf.plot(
        column=data_column,
        cmap=cmap,
        linewidth=0.5,
        edgecolor="0.5",
        legend=True,
        legend_kwds={
            "label": data_column,
            "orientation": "horizontal",
            "shrink": 0.6,
            "pad": 0.05
        },
        ax=ax
    )

    ax.set_title(title, fontsize=14, fontweight="bold")
    ax.axis("off")
    plt.tight_layout()
    plt.savefig("choropleth.pdf", bbox_inches="tight", dpi=300)

将数据连接到几何要素

import pandas as pd

def join_data_to_map(gdf: gpd.GeoDataFrame,
                     data: pd.DataFrame,
                     geo_key: str,
                     data_key: str) -> gpd.GeoDataFrame:
    """
    Join tabular data to geographic features.

    Args:
        gdf: GeoDataFrame with polygons (e.g., country boundaries)
        data: DataFrame with your research data
        geo_key: Column in gdf to join on (e.g., 'ISO_A3')
        data_key: Column in data to join on (e.g., 'country_code')
    """
    merged = gdf.merge(data, left_on=geo_key, right_on=data_key, how="left")

    missing = merged[merged[data.columns[1]].isna()]
    if len(missing) > 0:
        print(f"Warning: {len(missing)} regions have no data (will appear blank)")

    return merged

点地图与比例符号

映射研究站点或事件

def create_point_map(gdf_base: gpd.GeoDataFrame,
                     points: gpd.GeoDataFrame,
                     size_column: str = None,
                     color_column: str = None) -> None:
    """
    Create a point map with proportional symbols.

    Args:
        gdf_base: Base map (country or region polygons)
        points: GeoDataFrame with point geometries
        size_column: Column to scale point sizes
        color_column: Column to color points
    """
    fig, ax = plt.subplots(figsize=(12, 8))

    # Base map
    gdf_base.plot(ax=ax, color="lightgray", edgecolor="white", linewidth=0.5)

    # Points
    sizes = points[size_column] * 2 if size_column else 30
    colors = points[color_column] if color_column else "red"

    points.plot(
        ax=ax,
        markersize=sizes,
        color=colors,
        alpha=0.6,
        edgecolor="black",
        linewidth=0.3
    )

    ax.axis("off")
    plt.tight_layout()
    plt.savefig("point_map.pdf", bbox_inches="tight", dpi=300)

使用 Folium 的交互式地图

import folium

def create_interactive_map(center: tuple = (20, 0),
                            zoom: int = 2) -> folium.Map:
    """
    Create an interactive web map (useful for supplementary materials).

    Args:
        center: (latitude, longitude) center point
        zoom: Initial zoom level
    """
    m = folium.Map(location=center, zoom_start=zoom,
                   tiles="CartoDB positron")

    # Add markers, choropleth layers, or heatmaps as needed
    # folium.Marker([lat, lon], popup="Label").add_to(m)

    return m

制图最佳实践

出版标准

  1. 投影选择:

    • 全球地图:Robinson 或 Equal Earth(专题地图不要用 Mercator)
    • 国家/区域:合适的局部投影
    • Mercator 会扭曲面积——用于等值线图会产生误导
  2. 配色方案:

    • 顺序型(Sequential):从低到高的数值(YlOrRd、Blues、Viridis)
    • 发散型(Diverging):围绕中点的数值(RdBu、BrBG)
    • 定性型(Qualitative):分类数据(Set2、Paired)
    • 使用 colorbrewer2.org 获取感知均匀的调色板
    • 测试色盲可访问性
  3. 必备地图要素:

    • 标题
    • 带单位的图例
    • 比例尺
    • 指北针(当方位非标准时)
    • 数据来源署名
    • CRS/投影信息
  4. 伦理考量:

    • 争议边界:使用虚线或在图注中说明
    • 数据缺口:明确显示“无数据”区域(不要留白)
    • 隐私:对点数据做聚合,以保护个体位置

适用场景

  • 学术论文、研究报告中的地图与等值线图制作。
  • 将表格研究数据按地理键连接到行政区或国界几何要素。
  • 展示研究站点、事件分布或带比例符号的点地图。
  • 为补充材料创建交互式网页地图。

免费数据源

来源 数据 格式
Natural Earth 国家/区域边界、自然地物 Shapefile、GeoJSON
GADM 行政区边界(所有国家、所有层级) GeoPackage、Shapefile
OpenStreetMap 道路、建筑、土地利用 PBF、Shapefile
WorldPop 人口密度网格 GeoTIFF
NASA SEDAC 社会经济与环境数据 GeoTIFF、Shapefile
USGS Earth Explorer 卫星影像、高程 GeoTIFF

限制

资料未说明该技能的运行环境、安装方式、依赖版本、是否需要额外配置、定价或授权方式;这些信息暂未提供。代码示例基于 GeoPandas、Matplotlib、Folium,实际使用需自行准备相应环境与依赖。