如何用Python从字典列表生成.geojson及浮点经纬度报错解决
字典列表转GeoJSON报错与geometry逻辑说明
报错原因
你复用的代码中存在经纬度空值校验逻辑,触发报错的代码行为if(d["lon"].replace(" ", "") is not "") and (d["lat"].replace(" ", "") is not ""):。这段逻辑默认lon、lat字段为字符串类型,需要调用字符串方法replace去除空格后判断非空,但你当前输入的经纬度均为浮点型,浮点型变量不存在replace方法,因此抛出属性错误。
geometry部分实现逻辑
当前代码的点类型GeoJSON构造逻辑完全符合官方规范:
- geometry的
type字段固定为Point,标识当前要素为点类型 coordinates数组按先经度、后纬度的顺序存储坐标值,即[d["lon"], d["lat"]],该顺序为GeoJSON标准强制要求,不可调换- 构造完成的geometry会被封装进Feature对象,输入字典中除经纬度外的所有自定义元数据都会存入Feature的
properties字段,最终所有Feature汇总为FeatureCollection,完成整体GeoJSON结构构造
修复方案
无需补充额外输入信息,仅需调整校验逻辑适配浮点型经纬度即可,可选两种修改方向:
- 若不需要校验经纬度非空,直接删除触发报错的校验行即可,你当前贴出的无校验的示例代码可直接正常运行
- 若需要保留非空校验,将原有校验逻辑替换为适配浮点型的版本:
import math # 校验逻辑排除空值、非法NaN值,若0值属于合法坐标可保留,否则可新增判断排除0值 if not (d["lon"] is None or d["lat"] is None or math.isnan(d["lon"]) or math.isnan(d["lat"])): # 原有构造geometry、Feature的逻辑
内容的提问来源于stack exchange,提问作者user16710824
相关产品推荐
相关产品推荐

