请求将OpenStreetMap地理编码Python脚本改写为Stata代码
将Python地理编码脚本转换为Stata代码
以下是对应你提供的Python脚本的Stata实现,基于OpenStreetMap Nominatim API完成地理编码:
* 假设你的数据已加载,包含变量Locality * 初始化纬度和经度变量,默认值为-1 gen lat = -1 gen lon = -1 * 循环处理每个观测 forvalues i = 1/`=_N' { * 获取当前地点名称并进行URL编码 local locality = urlencode(Locality[`i']) * 构造Nominatim API请求URL local url "https://nominatim.openstreetmap.org/search/?q=`locality'&format=json&limit=1" * 发送GET请求并保存响应到临时文件 tempfile response copy "`url'" "`response'", text replace * 读取并解析JSON响应 jsonread using "`response'", table if `r(n_obs)' > 0 { * 提取第一个结果的纬度和经度 replace lat = real(jsonval[1, "lat"]) in `i' replace lon = real(jsonval[1, "lon"]) in `i' } * 遵守Nominatim API使用规则,添加1秒延迟避免请求过于频繁 sleep 1000 }
说明
- 脚本会为每个
Locality生成对应的lat(纬度)和lon(经度)变量,无匹配结果时保持默认值-1 - 使用
urlencode函数对地点名称进行URL编码,避免特殊字符导致请求失败 - 添加了1秒延迟(
sleep 1000),符合Nominatim API的使用限制(避免短时间内大量请求被封禁) - 若你的Stata版本不支持
jsonread,需先安装jsonio包(执行ssc install jsonio)
内容的提问来源于stack exchange,提问作者Tomikuz
相关产品推荐
相关产品推荐

