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

如何通过ISO 3166代码获取地理定位及质心?Python实现求助

解决方案

方法1:使用预定义的国家质心数据集(快速便捷)

直接用包含ISO 3166-1 alpha-3代码与对应质心坐标的数据集,规避地理编码的不确定性。

  1. 准备数据集:自己整理一个CSV文件,格式示例:

    alpha3,latitude,longitude
    USA,37.0902,-95.7129
    CHN,35.8617,104.1954
    JPN,36.2048,138.2529
    
  2. 加载并关联数据,绘制标记:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 你的业务数据(包含alpha3和数量字段)
    your_data = pd.DataFrame({
        'alpha3': ['USA', 'CHN', 'JPN'],
        'count': [100, 200, 150]
    })
    
    # 加载质心数据集
    centroids = pd.read_csv('country_centroids.csv')
    
    # 合并数据
    merged = pd.merge(your_data, centroids, on='alpha3')
    
    # 绘制与数量成正比的圆盘标记
    plt.figure(figsize=(12, 8))
    plt.scatter(merged['longitude'], merged['latitude'], s=merged['count']*2, alpha=0.6)
    
    # 添加国家代码标签
    for idx, row in merged.iterrows():
        plt.text(row['longitude'], row['latitude'], row['alpha3'], fontsize=10)
    
    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('Country Markers by Count')
    plt.show()
    

方法2:用地理空间库计算精确几何质心(更准确)

如果需要区域的几何质心(而非行政中心),用geopandas结合国家边界数据实现:

  1. 安装依赖:

    pip install geopandas matplotlib
    
  2. 代码实现:

    import geopandas as gpd
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 加载内置的国家边界数据(包含iso_a3字段,对应alpha-3代码)
    world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
    
    # 你的业务数据
    your_data = pd.DataFrame({
        'alpha3': ['USA', 'CHN', 'JPN'],
        'count': [100, 200, 150]
    })
    
    # 合并并过滤匹配的国家
    merged = world.merge(your_data, left_on='iso_a3', right_on='alpha3')
    
    # 计算几何质心
    merged['centroid_lon'] = merged.geometry.centroid.x
    merged['centroid_lat'] = merged.geometry.centroid.y
    
    # 绘制地图与标记
    fig, ax = plt.subplots(figsize=(15, 10))
    world.plot(ax=ax, color='lightgray')
    merged.plot(ax=ax, marker='o', color='red', markersize=merged['count']*2, alpha=0.7)
    
    # 添加标签
    for idx, row in merged.iterrows():
        ax.text(row['centroid_lon'], row['centroid_lat'], row['alpha3'], fontsize=12)
    
    plt.title('Country Centroid Markers by Count')
    plt.show()
    

geopy失败的补救思路

如果一定要用geopy,需先将alpha-3代码转成国家名称再编码,但得到的是行政中心坐标,精度和稳定性不如前两种方法:

from geopy.geocoders import Nominatim
import pycountry

geolocator = Nominatim(user_agent="your_custom_app_name")

def get_admin_center(alpha3):
    try:
        country = pycountry.countries.get(alpha_3=alpha3)
        location = geolocator.geocode(country.name)
        return (location.latitude, location.longitude)
    except:
        return None

# 示例调用
print(get_admin_center('USA'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 07:32:34