Python如何优化嵌套for循环实现CAP XML多边形坐标转GeoJSON格式
复杂度说明
你当前的实现时间复杂度本就为O(N),不属于O(N²)级别。两层循环中,外层遍历N个坐标点,单个坐标点的拆分、类型转换、经纬度交换都属于和N无关的常数操作,整体是线性时间复杂度,没有平方级开销。
更高性能的实现方案
如果想要进一步提升执行效率、简化代码,可以用Python列表推导改写坐标处理逻辑,列表推导由底层C实现,相比纯Python层的for循环+append操作性能提升明显:
# 原坐标处理逻辑可直接替换为以下代码,省掉中间变量和显式循环 coordinates = [ [float(lon), float(lat)] for lat, lon in (p.split(",") for p in entry['cap:polygon'].split(" ")) ]
额外优化提示
你当前代码中json.dumps(xpars['feed']['entry'])再json.loads的操作是冗余的,xmltodict.parse返回的结果本身就是Python字典结构,可直接遍历使用,去掉这两步序列化/反序列化操作能进一步降低耗时。
注意事项
写入Elasticsearch的GeoJSON多边形要求首尾坐标完全一致形成闭合环,若你拿到的CAP原始多边形首尾坐标不重合,需要额外补全首坐标到列表末尾,避免触发格式校验错误。
内容的提问来源于stack exchange,提问作者Isaac Keleher
相关产品推荐
相关产品推荐

