使用新的linegeoJSON属性创建linegeoJSON对象

2024-05-15 08:49:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用linestring将几个Json对象组合到GeoJSON特性集合中

例如,我有以下格式错误的json对象:

 {"lat":16.0269337,"lon":40.073042,"score":1,"ID":"13800006252028","TYPES":"Regional","N2C":"2","NAME":"Strada Statale della Val Sinni"}
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006260148","TYPES":"Scenic","N2C":"2"}
{"lat":16.0316523,"lon":41.6808932,"score":1,"ID":"13800006260148","TYPES":"Scenic","N2C":"2","NAME":"Giro del Gargano"}
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006203620","TYPES":"Scenic","N2C":"2"}
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006203620","TYPES":"Regional","N2C":"2","NAME":"Giro del Gargano"}
{"lat":16.032322,"lon":40.6097567,"score":1,"ID":"13800005963252","TYPES":"Scenic","N2C":"2"}
{"lat":16.032322,"lon":40.6097567,"score":1,"ID":"13800005963252","TYPES":"Regional","N2C":"2","NAME":"Via Appia"}

我的目标是做两件事

  1. 如果ID&same type相同,则使用ID创建GeoJson linestrings

  2. 根据score属性向上添加匹配json文件的分数。


Tags: 对象nameidjsontypesscorelonlat
1条回答
网友
1楼 · 发布于 2024-05-15 08:49:26

我不是专家,但这是第一次。This post有助于获得基本知识。对于“Geo”、“JSON”和pandas操作块,可能有比我更优雅的方法。在

目前还不清楚数据的确切格式,但是如果数据是使用pd.DataFrame的字典列表,或者直接从JSON文件中使用pd.from_json直接导入数据。我只是和前者一起工作,但很容易改变。在

json_objs = [{"lat":16.0269337,"lon":40.073042,"score":1,"ID":"13800006252028","TYPES":"Regional","N2C":"2","NAME":"Strada Statale della Val Sinni"},
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006260148","TYPES":"Scenic","N2C":"2"},
{"lat":16.0316523,"lon":41.6808932,"score":1,"ID":"13800006260148","TYPES":"Scenic","N2C":"2","NAME":"Giro del Gargano"},
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006203620","TYPES":"Scenic","N2C":"2"},
{"lat":16.0316522,"lon":41.6808931,"score":1,"ID":"13800006203620","TYPES":"Regional","N2C":"2","NAME":"Giro del Gargano"},
{"lat":16.032322,"lon":40.6097567,"score":1,"ID":"13800005963252","TYPES":"Scenic","N2C":"2"},
{"lat":16.032322,"lon":40.6097567,"score":1,"ID":"13800005963252","TYPES":"Regional","N2C":"2","NAME":"Via Appia"}

然后使用pandas操作数据并使用geojson包创建LineString对象

^{pr2}$

输出:

{"coordinates": [[16.032322, 40.6097567]], "properties": {"ID": "13800005963252", "record_type": "Scenic", "score": 1}, "type": "LineString"}
{"coordinates": [[16.0269337, 40.073042]], "properties": {"ID": "13800006252028", "record_type": "Regional", "score": 1}, "type": "LineString"}
{"coordinates": [[16.032322, 40.6097567]], "properties": {"ID": "13800005963252", "record_type": "Regional", "score": 1}, "type": "LineString"}
{"coordinates": [[16.0316522, 41.6808931], [16.0316523, 41.6808932]], "properties": {"ID": "13800006260148", "record_type": "Scenic", "score": 2}, "type": "LineString"}
{"coordinates": [[16.0316522, 41.6808931]], "properties": {"ID": "13800006203620", "record_type": "Scenic", "score": 1}, "type": "LineString"}
{"coordinates": [[16.0316522, 41.6808931]], "properties": {"ID": "13800006203620", "record_type": "Regional", "score": 1}, "type": "LineString"}

然后将这些LineStrings转换为FeatureCollection

feature = geojson.FeatureCollection(features)

显然,您也可以手动构造这种格式,但我希望geojson为您提供额外的灵活性。显然还有一个geopandas包,我无法安装。在

相关问题 更多 >