在 Python 中将一部分 geojson 对象合并到另一个对象中

2023-12-14

EDIT:我正在尝试在 Python 中操作 JSON 文件。在我的数据中,一些多边形有多个相关信息:坐标(LineString) and 面积百分比 and area (Text and Area in Point),我想将它们组合成一个 JSON 对象。例如,来自文件的数据如下:

data = {
        "type": "FeatureCollection",
        "name": "entities",
        "features": [{
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbBlockReference",
                    "EntityHandle": "2F1"
                },
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [61.971069681118479, 36.504485105673659],
                        [46.471068755199667, 36.504485105673659],
                        [46.471068755199667, 35.954489281866685],
                        [44.371068755199758, 35.954489281866685],
                        [44.371068755199758, 36.10448936390457],
                        [43.371069617387093, 36.104489150107824],
                        [43.371069617387093, 23.904496401184584],
                        [48.172716774891342, 23.904496401184584],
                        [48.171892994728751, 17.404489374370311],
                        [61.17106949647404, 17.404489281863786],
                        [61.17106949647404, 19.404489281863786],
                        [61.971069689453991, 19.404489282256687],
                        [61.971069681118479, 36.504485105673659]
                    ]
                }
            },
            {
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbMText",
                    "EntityHandle": "2F1",
                    "Text": "6%"
                },
                "geometry": {
                    "type": "Point",
                    "coordinates": [49.745686139884583, 28.11445704760262, 0.0]
                }
            },
            {
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbMText",
                    "EntityHandle": "2F1",
                    "Area": "100"
                },
                "geometry": {
                    "type": "Point",
                    "coordinates": [50.216857362443989, 63.981197759829229, 0.0]
                }
            },
            {
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbBlockReference",
                    "EntityHandle": "2F7"
                },
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [62.37106968111857, 36.504489398648715],
                        [62.371069689452725, 19.404489281863786],
                        [63.171069496474047, 19.404489281863786],
                        [63.171069496474047, 17.404489281863786],
                        [77.921070051947027, 17.404489281863786],
                        [77.921070051947027, 19.504489281855054],
                        [78.671070051947027, 19.504489281855054],
                        [78.671070051897914, 36.504485105717322],
                        [62.37106968111857, 36.504489398648715]
                    ]
                }
            },
            {
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbMText",
                    "EntityHandle": "2F7",
                    "Text": "5.8%"
                },
                "geometry": {
                    "type": "Point",
                    "coordinates": [67.27548061311245, 28.11445704760262, 0.0]
                }
            }
        ]
    }

我想结合Point's Text and Area键和值LineString基于EntityHandle的值,并删除Point线。预期输出是:

    {
        "type": "FeatureCollection",
        "name": "entities",
        "features": [{
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbBlockReference",
                    "EntityHandle": "2F1",
                    "Text": "6%",
                    "Area": "100"
                },
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [61.971069681118479, 36.504485105673659],
                        [46.471068755199667, 36.504485105673659],
                        [46.471068755199667, 35.954489281866685],
                        [44.371068755199758, 35.954489281866685],
                        [44.371068755199758, 36.10448936390457],
                        [43.371069617387093, 36.104489150107824],
                        [43.371069617387093, 23.904496401184584],
                        [48.172716774891342, 23.904496401184584],
                        [48.171892994728751, 17.404489374370311],
                        [61.17106949647404, 17.404489281863786],
                        [61.17106949647404, 19.404489281863786],
                        [61.971069689453991, 19.404489282256687],
                        [61.971069681118479, 36.504485105673659]
                    ]
                }
            },
            {
                "type": "Feature",
                "properties": {
                    "Layer": "0",
                    "SubClasses": "AcDbEntity:AcDbBlockReference",
                    "EntityHandle": "2F7",
                    "Text": "5.8%"
                },
                "geometry": {
                    "type": "LineString",
                    "coordinates": [
                        [62.37106968111857, 36.504489398648715],
                        [62.371069689452725, 19.404489281863786],
                        [63.171069496474047, 19.404489281863786],
                        [63.171069496474047, 17.404489281863786],
                        [77.921070051947027, 17.404489281863786],
                        [77.921070051947027, 19.504489281855054],
                        [78.671070051947027, 19.504489281855054],
                        [78.671070051897914, 36.504485105717322],
                        [62.37106968111857, 36.504489398648715]
                    ]
                }
            }
        ]
    }

用Python可以得到上面的结果吗?谢谢。

更新的解决方案,感谢@dodopy:

import json
features = data["features"]
point_handle_text = {
    i["properties"]["EntityHandle"]: i["properties"]["Text"]
    for i in features
    if i["geometry"]["type"] == "Point"
}
point_handle_area = {
    i["properties"]["EntityHandle"]: i["properties"]["Area"]
    for i in features
    if i["geometry"]["type"] == "Point"
}
combine_features = []
for i in features:
    if i["geometry"]["type"] == "LineString":
        i["properties"]["Text"] = point_handle_text.get(i["properties"]["EntityHandle"])
        combine_features.append(i)
data["features"] = combine_features

combine_features = []
for i in features:
    if i["geometry"]["type"] == "LineString":
        i["properties"]["Area"] = point_handle_area.get(i["properties"]["EntityHandle"])
        combine_features.append(i)
data["features"] = combine_features

with open('test.geojson', 'w+') as f:
    json.dump(data, f, indent=2)

但我收到一个错误:

Traceback (most recent call last):
  File "<ipython-input-131-d132c8854a9c>", line 6, in <module>
    for i in features
  File "<ipython-input-131-d132c8854a9c>", line 7, in <dictcomp>
    if i["geometry"]["type"] == "Point"
KeyError: 'Text'

像这样的例子:

import json
data = json.loads(json_data)
features = data["features"]
point_handle_text = {
    i["properties"]["EntityHandle"]: i["properties"]["Text"]
    for i in features
    if i["geometry"]["type"] == "Point"
}
combine_features = []
for i in features:
    if i["geometry"]["type"] == "LineString":
        i["properties"]["Text"] = point_handle_text.get(i["properties"]["EntityHandle"])
        combine_features.append(i)
data["features"] = combine_features
json_data = json.dumps(data)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中将一部分 geojson 对象合并到另一个对象中 的相关文章

  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 更改 R 中 ggplot geom_polygon 的颜色方案

    我正在使用地图库和 ggplot 的 geom polygon 创建地图 我只是想将默认的蓝色 红色 紫色配色方案更改为其他颜色 我对 ggplot 非常陌生 所以如果我没有使用正确的数据类型 请原谅 我使用的数据如下所示 gt head
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 将 JSON 对象传递给带有请求的 url

    所以 我想利用 Kenneth 的优秀请求模块 https github com kennethreitz requests 在尝试使用时偶然发现了这个问题自由库API http wiki freebase com wiki API 基本上
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d

随机推荐

  • 获取日期时间之间的时间差

    如何求2次之间的差值 例子 var now 04 09 2013 15 00 00 var then 04 09 2013 14 20 30 expected result 00 39 30 I tried var now moment 0
  • JavaScript 监听器不断增加

    我实现了一个网络应用程序并使用谷歌开发人员工具监控了性能 我注意到听众不断增加 听众数量也在不断增加 听众增加的部分看起来像这样 let ival interval function http get someurl this call i
  • 使用 ffmpeg 进行转换,无需执行

    我的 Windows XP Apache PHP 5 3 和 ffmpeg 工作正常 我需要将 flv 转换为 avi 或反之亦然 而不使用exec 命令 这可能吗 谢谢 编辑 我希望有人可以编辑 ffmpeg 源代码并在 php 扩展中实
  • csh 上的自连接字符串

    我需要将 argv 中的部分内容连接到我的变量之一 我将向您展示我的代码 bin csh set stringList foreach param argv if param TEST then set stringList stringL
  • 为什么不使用 IoC 容器来解决实体/业务对象的依赖关系?

    我了解 DI 背后的概念 但我只是在学习不同的 IoC 容器可以做什么 似乎大多数人都主张使用 IoC 容器来连接无状态服务 但是将它们用于实体等有状态对象呢 无论是对还是错 我通常都会用行为填充我的实体 即使该行为需要外部类 例子 pub
  • CSS3:检测 iPhone 的设备方向

    所以这个声明适用于 iOS 4 和 4 1 但不适用于旧版本 有什么建议吗 media screen and device width 320px and orientation portrait iPhone Portrait Style
  • 当值改变时MySQL增加用户变量

    我有一个由组组成的表 例如 每组五行 每组中的每一行都拥有一个date该群体独有的价值 我想要在查询中执行的操作是遍历表 并在执行此操作时增加用户变量 count date值变化 也就是说 count 应该等于组数 而不是行数 我当前的查询
  • 将集合 S 公平划分为 k 个分区

    存在一个集合 S 其中包含 N 个整数 每个整数的值为 1fair还需要定义 例如 目标可能是最小化分区值与集合 S 平均值的标准偏差 即 sum S k 例如S 10 15 12 13 30 5 k 3 一个好的分区是 30 10 15
  • 如何通过Selenium和Webdriver提高执行速度

    测试脚本执行过程中速度非常慢 不知道原因 这是我的脚本 driver Navigate GoToUrl url driver Manage Timeouts ImplicitWait TimeSpan FromSeconds 20 driv
  • QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka 转换器

    我需要处理YUVAndroid 上 H W 解码输出的数据 实际上 我使用的是Nexus4 解码输出格式是QOMX COLOR FormatYUV420PackedSemiPlanar64x32Tile2m8ka type 但是我需要YUV
  • 防止 MS-SQL 表中的循环引用

    我有一个包含 ID 和 ParentAccountID 的帐户表 以下是重现这些步骤的脚本 如果 ParentAccountID 为 NULL 则该帐户被视为顶级帐户 每个帐户最终应以顶级帐户结束 即 ParentAccountID 为 N
  • Google Apps脚本中的持久变量[重复]

    这个问题在这里已经有答案了 以下始终显示 0 var gNumber 0 function myTest Browser msgBox gNumber gNumber 当然 我可以使用 ScriptProperties 或 UserProp
  • 《小阴谋家》中的 Y 组合器讨论

    所以 我花了很多时间阅读并重新阅读第9章的结尾小阴谋家 其中应用 Y 组合器是为length功能 我认为我的困惑可以归结为一个对比两个版本长度的语句 在组合器被分解之前 A lambda mk length mk length mk len
  • 反序列化具有多种数据类型的 JSON 文件作为一个键

    我想分析 Telegram Chats 因此我以 JSON 格式导出了一个聊天记录 并希望将其反序列化到我的分析软件中 id 397910 type message date 2018 02 21T10 27 59 edited 1970
  • Google Maps API v3 多个标记信息窗口

    我使用下面的代码来显示带有多个标记和信息窗口的地图 现在我遇到了所有标记上显示最后一个信息窗口的非常常见的问题 我尝试过各种解决方案 包括 http you arenot me 2010 06 29 google maps api v3 0
  • 在 Eclipse 中运行时加载资源时出现问题

    我正在开发一个 swing 项目 使用 maven2 从命令行 和 eclipse 没有 Maven 集成 所以 我通过生成 eclipse 项目Maven Eclipse 插件 mvn eclipse eclipse 将其导入到 ecli
  • 如何使用 HMAccessoryPayLoad 添加 HomeKit 配件?

    您好 目前我正在研究 HomeKit 我想使用 HomeKit 实现一项功能 我的要求是不使用二维码我想添加配件 因为每个配件都有自己的 URL 例如X HM XXXXXXXXX与 QR 码相关联 即HMAccessoryPayLoad 我
  • 调整 hexbin 图例中断

    在这个六边形图的示例中 右侧的图例有 10 个级别 类 中断 有谁知道如何更改级别数 假设我想将其更改为 5 或其他值 library hexbin x rnorm 1000 mean 50 sd 1 y rnorm 1000 mean 3
  • django 1.8 的多个数据库(mongodb[mongoengine] 和 sql )

    我正在将 mongoengine 与 Django 结合使用 我的项目需要连接到一个 MongoDB 实例 而另一个则使用 sql setting py 的数据库部分应该是什么样子 DATABASES default ENGINE djan
  • 在 Python 中将一部分 geojson 对象合并到另一个对象中

    EDIT 我正在尝试在 Python 中操作 JSON 文件 在我的数据中 一些多边形有多个相关信息 坐标 LineString and 面积百分比 and area Text and Area in Point 我想将它们组合成一个 JS