在Go语言中解析GeoJSON要素集,如何获取要素列表?
解决方法
你解析的应该是FeatureCollection类型的GeoJSON,geojson.Parse返回的通用Object只是顶层接口,需要先判断具体类型并做类型断言,才能拿到要素列表。
直接上代码:
// 断言解析结果为FeatureCollection fc, ok := obj.(*geojson.FeatureCollection) if !ok { return nil, fmt.Errorf("输入的GeoJSON不是FeatureCollection类型") } // fc.Features就是你要的要素列表,类型是[]*geojson.Feature features := fc.Features // 遍历要素做后续处理的示例 for _, feat := range features { // 获取要素属性 props := feat.Properties // 获取要素几何信息 geom := feat.Geometry // 这里写你的业务逻辑... }
另外提个小优化:从Go 1.16开始ioutil.ReadAll已经被废弃,用os.ReadFile可以直接一步读取文件,简化你的读取代码:
data, err := os.ReadFile("filename.json") if err != nil { return nil, err } obj, err := geojson.Parse(string(data), geojson.DefaultParseOptions) if err != nil { return nil, err } // 接着做上面的类型断言和要素处理
注意:如果你的GeoJSON不是标准的FeatureCollection,而是单个Feature,那直接断言为*geojson.Feature就行;要是不符合GeoJSON规范的格式,那得先调整输入文件或者解析逻辑,但绝大多数区域要素集都是用FeatureCollection组织的。
内容的提问来源于stack exchange,提问作者Zohaib Asif
相关产品推荐
相关产品推荐

