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

如何使用Python通过经纬度坐标查询地点所属大洲(无需API密钥)

无需API密钥查询经纬度所属大洲的实现方案

原有代码问题说明

你使用的Nominatim接口本身支持返回大洲信息,之前未获取到是因为没有正确提取location.raw中嵌套的address字段下的continent属性。你尝试调用的py4e教学接口仅返回简化地址数据,本身不包含大洲维度的信息,因此无法查询到对应结果。

方案1:基于Nominatim的在线查询(无需API密钥)

Nominatim是OpenStreetMap提供的公开地理编码服务,不需要申请API密钥,仅需设置自定义的user_agent标识即可使用,实现代码如下:

from geopy.geocoders import Nominatim

# user_agent请替换为自定义标识,如你的应用名称/邮箱
geolocator = Nominatim(user_agent='my_continent_query_app')
location = geolocator.reverse('51.0456448, 3.7273618', exactly_one=True)

if location:
    address_info = location.raw.get('address', {})
    continent = address_info.get('continent', '未知')
    print(f"所属大洲:{continent}")
    print(f"详细地址:{location.address}")

注意:Nominatim有请求频率限制,请勿高频批量调用,避免被服务限流。

方案2:完全离线查询方案(无需联网、无需API)

适合批量查询、无网络环境的场景,通过离线地理编码库匹配国家编码,再映射到大洲即可,使用步骤如下:

  1. 安装依赖库:pip install reverse_geocoder
  2. 实现代码:
import reverse_geocoder as rg

# 预定义国家二字码到中文大洲的映射表,可根据需求调整语言、补充字段
COUNTRY_TO_CONTINENT = {
    'AD': '欧洲', 'AE': '亚洲', 'AF': '亚洲', 'AG': '北美洲', 'AI': '北美洲', 'AL': '欧洲', 'AM': '亚洲',
    'AO': '非洲', 'AQ': '南极洲', 'AR': '南美洲', 'AS': '大洋洲', 'AT': '欧洲', 'AU': '大洋洲', 'AW': '北美洲',
    'AX': '欧洲', 'AZ': '亚洲', 'BA': '欧洲', 'BB': '北美洲', 'BD': '亚洲', 'BE': '欧洲', 'BF': '非洲',
    'BG': '欧洲', 'BH': '亚洲', 'BI': '非洲', 'BJ': '非洲', 'BL': '北美洲', 'BM': '北美洲', 'BN': '亚洲',
    'BO': '南美洲', 'BQ': '北美洲', 'BR': '南美洲', 'BS': '北美洲', 'BT': '亚洲', 'BV': '南极洲', 'BW': '非洲',
    'BY': '欧洲', 'BZ': '北美洲', 'CA': '北美洲', 'CC': '亚洲', 'CD': '非洲', 'CF': '非洲', 'CG': '非洲',
    'CH': '欧洲', 'CI': '非洲', 'CK': '大洋洲', 'CL': '南美洲', 'CM': '非洲', 'CN': '亚洲', 'CO': '南美洲',
    'CR': '北美洲', 'CU': '北美洲', 'CV': '非洲', 'CW': '北美洲', 'CX': '亚洲', 'CY': '亚洲', 'CZ': '欧洲',
    'DE': '欧洲', 'DJ': '非洲', 'DK': '欧洲', 'DM': '北美洲', 'DO': '北美洲', 'DZ': '非洲', 'EC': '南美洲',
    'EE': '欧洲', 'EG': '非洲', 'EH': '非洲', 'ER': '非洲', 'ES': '欧洲', 'ET': '非洲', 'FI': '欧洲',
    'FJ': '大洋洲', 'FK': '南美洲', 'FM': '大洋洲', 'FO': '欧洲', 'FR': '欧洲', 'GA': '非洲', 'GB': '欧洲',
    'GD': '北美洲', 'GE': '亚洲', 'GF': '南美洲', 'GG': '欧洲', 'GH': '非洲', 'GI': '欧洲', 'GL': '北美洲',
    'GM': '非洲', 'GN': '非洲', 'GP': '北美洲', 'GQ': '非洲', 'GR': '欧洲', 'GS': '南极洲', 'GT': '北美洲',
    'GU': '大洋洲', 'GW': '非洲', 'GY': '南美洲', 'HK': '亚洲', 'HM': '南极洲', 'HN': '北美洲', 'HR': '欧洲',
    'HT': '北美洲', 'HU': '欧洲', 'ID': '亚洲', 'IE': '欧洲', 'IL': '亚洲', 'IM': '欧洲', 'IN': '亚洲',
    'IO': '亚洲', 'IQ': '亚洲', 'IR': '亚洲', 'IS': '欧洲', 'IT': '欧洲', 'JE': '欧洲', 'JM': '北美洲',
    'JO': '亚洲', 'JP': '亚洲', 'KE': '非洲', 'KG': '亚洲', 'KH': '亚洲', 'KI': '大洋洲', 'KM': '非洲',
    'KN': '北美洲', 'KP': '亚洲', 'KR': '亚洲', 'KW': '亚洲', 'KY': '北美洲', 'KZ': '亚洲', 'LA': '亚洲',
    'LB': '亚洲', 'LC': '北美洲', 'LI': '欧洲', 'LK': '亚洲', 'LR': '非洲', 'LS': '非洲', 'LT': '欧洲',
    'LU': '欧洲', 'LV': '欧洲', 'LY': '非洲', 'MA': '非洲', 'MC': '欧洲', 'MD': '欧洲', 'ME': '欧洲',
    'MF': '北美洲', 'MG': '非洲', 'MH': '大洋洲', 'MK': '欧洲', 'ML': '非洲', 'MM': '亚洲', 'MN': '亚洲',
    'MO': '亚洲', 'MP': '大洋洲', 'MQ': '北美洲', 'MR': '非洲', 'MS': '北美洲', 'MT': '欧洲', 'MU': '非洲',
    'MV': '亚洲', 'MW': '非洲', 'MX': '北美洲', 'MY': '亚洲', 'MZ': '非洲', 'NA': '非洲', 'NC': '大洋洲',
    'NE': '非洲', 'NF': '大洋洲', 'NG': '非洲', 'NI': '北美洲', 'NL': '欧洲', 'NO': '欧洲', 'NP': '亚洲',
    'NR': '大洋洲', 'NU': '大洋洲', 'NZ': '大洋洲', 'OM': '亚洲', 'PA': '北美洲', 'PE': '南美洲', 'PF': '大洋洲',
    'PG': '大洋洲', 'PH': '亚洲', 'PK': '亚洲', 'PL': '欧洲', 'PM': '北美洲', 'PR': '北美洲', 'PS': '亚洲',
    'PT': '欧洲', 'PW': '大洋洲', 'PY': '南美洲', 'QA': '亚洲', 'RE': '非洲', 'RO': '欧洲', 'RS': '欧洲',
    'RU': '欧洲', 'RW': '非洲', 'SA': '亚洲', 'SB': '大洋洲', 'SC': '非洲', 'SD': '非洲', 'SE': '欧洲',
    'SG': '亚洲', 'SH': '非洲', 'SI': '欧洲', 'SJ': '欧洲', 'SK': '欧洲', 'SL': '非洲', 'SM': '欧洲',
    'SN': '非洲', 'SO': '非洲', 'SR': '南美洲', 'SS': '非洲', 'ST': '非洲', 'SV': '北美洲', 'SX': '北美洲',
    'SY': '亚洲', 'SZ': '非洲', 'TC': '北美洲', 'TD': '非洲', 'TF': '南极洲', 'TG': '非洲', 'TH': '亚洲',
    'TJ': '亚洲', 'TK': '大洋洲', 'TM': '亚洲', 'TN': '非洲', 'TO': '大洋洲', 'TR': '亚洲', 'TT': '北美洲',
    'TV': '大洋洲', 'TW': '亚洲', 'TZ': '非洲', 'UA': '欧洲', 'UG': '非洲', 'UM': '大洋洲', 'US': '北美洲',
    'UY': '南美洲', 'UZ': '亚洲', 'VA': '欧洲', 'VC': '北美洲', 'VE': '南美洲', 'VG': '北美洲', 'VI': '北美洲',
    'VN': '亚洲', 'VU': '大洋洲', 'WF': '大洋洲', 'WS': '大洋洲', 'YE': '亚洲', 'YT': '非洲', 'ZA': '非洲',
    'ZM': '非洲', 'ZW': '非洲'
}

coordinates = (51.0456448, 3.7273618)
result = rg.search(coordinates, verbose=False)

if result:
    country_code = result[0]['cc']
    continent = COUNTRY_TO_CONTINENT.get(country_code, '未知')
    print(f"所属大洲:{continent}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:54:03