微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写入文件时添加功能ID

如何解决写入文件时添加功能ID

为了使用tippicanoe创建Tilesets,我从postgis检索空间数据并将其写入带有geopandas的.geojson文件

geodata = gpd.read_postgis("test",engine1,geom_col='geom')```
geodata.to_file("test.geojson",driver='GeoJSON')

我的问题是:是否有内置方法或方便的方法可以将 featureID 添加到要素集合中的所有要素?我需要一个如下所示的输出,在功能级别设置 id,而不是在属性中。

{
    "type": "FeatureCollection","features": [
        {
            "id": "1","type": "Feature","properties": {
                "atco_code": "300000492FZ",},"geometry": {
                "type": "Point","coordinates": (-1.1372773238238423,52.346655194010665),{
            "id": "2","properties": {
                "atco_code": "0600CR19133","coordinates": (-2.518177475249135,53.063122731640604),],}

我当前的工作流程是将文件写入 .geojson,再次读取,注入 id 并再次保存。这很不方便!

with open("test.geojson") as f:
    gj = geojson.load(f)
for i in range(0,len(gj["features"])):
    gj["features"][i]["id"] = gj["features"][i]["properties"]["id"]
with open("test.geojson",'w') as outfile:
    geojson.dump(gj,outfile)

提前致谢!

解决方法

您可以使用 geodata.__geo_interface__ 获取 Python 功能集合。 document

示例地理数据框:

        name  id                                               geom
0  polygon A   1  MULTIPOLYGON (((36.00000 11.00000,36.00000 12...
1  polygon B   2  MULTIPOLYGON (((36.50000 11.50000,37.50000 11...
2  polygon C   3  MULTIPOLYGON (((36.61799 10.80580,36.61570 11...

从地理数据框生成的结果:

{'type': 'FeatureCollection','features': [{'id': '0','type': 'Feature','properties': {'id': 1,'name': 'polygon A'},'geometry': {'type': 'MultiPolygon','coordinates': [(((36.0,11.0),(36.0,12.0),(37.0,11.0)),)]},'bbox': (36.0,11.0,37.0,12.0)},{'id': '1','properties': {'id': 2,'name': 'polygon B'},'coordinates': [(((36.5,11.5),(37.5,(36.5,11.5)),'bbox': (36.5,37.5,11.5)},{'id': '2','properties': {'id': 3,'name': 'polygon C'},'coordinates': [(((36.61799,10.8058),(36.6157,11.19321),(36.86327,11.29637),(37.34925,10.91813),(37.0054,10.71182),(36.61799,10.8058)),'bbox': (36.6157,10.71182,37.34925,11.29637)}],12.0)}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。