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

ArcGIS逆地理编码经纬度转邮编,大数据量触发JSONDecodeError

报错根因

Expecting value: line 1 column 1 (char 0) 的触发逻辑是程序收到的接口响应为空值/非JSON格式,无法完成JSON解析。结合运行特征(小数据集正常、千条以上数据即报错),核心诱因是触发了ArcGIS Online逆地理编码接口的访问限流。
ArcGIS Online公开接口对单用户的请求频率有严格限制,现有代码逐行发起独立逆地理编码请求,万级数据会产生高频密集请求,频率超过服务端阈值时,不会返回正常JSON结果,仅返回空响应或限流提示页,解析时必然触发上述错误。
该逻辑匹配已完成的排查结果:数据无空值、小数据量下请求频率低未触发拦截,因此运行正常。

修复方案

  • 控制逐行请求的频率
    逐行处理时,给每次调用增加随机间隔,将每秒请求数控制在接口允许范围内(单用户建议不超过5次/秒)。修改后的核心函数:
    import time
    import random
    
    def get_zip(df, lon_field, lat_field):
        # 随机等待0.2-0.5秒,降低请求频率
        time.sleep(random.uniform(0.2, 0.5))
        try:
            location = reverse_geocode(
                Geometry({
                    "x": float(df[lon_field]), 
                    "y": float(df[lat_field]), 
                    "spatialReference": {"wkid": 4326}
                })
            )
            return location['address']['Postal']
        # 捕获解析异常,避免单条请求失败中断全流程
        except Exception:
            return None
    
  • 用批量接口替代逐行请求
    逆地理编码原生支持批量点位查询,无需逐行调用。直接将所有经纬度转为Geometry列表,使用batch_reverse_geocode一次性提交请求,万级数据仅需1次调用,从根源上避免触发限流,同时大幅提升运行效率。
  • 修正代码语法疏漏
    原GIS初始化代码缺失右括号,需补全:
    gis = GIS("http://www.arcgis.com", "username", "password")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 06:36:02