我有一个 JSON 文件,该文件是一个像 A 一样的嵌套列表。(抱歉 - 它是一本字典)
在坐标中,第一项 (1.1) 保存点的 x 坐标,第二项 (2.2) 保存 y 坐标,第三项 (3.3) 保存点的 z 坐标。第一个点之后的另外三个点是建筑物足迹列表的点。因此,列表中的 4 个点给出了创建线条时的建筑物占地面积曲线。
在第二个数据中,您可以看到 - ** 符号 - 之间,有 2 个子列表。这意味着建筑物足迹数据有 2 个多边形。
A =
{
"type": "FeatureCollection",
"name": "PROJECT CRS TM 30",
"features": [
{ "type": "Feature", "properties": { "OBJECTID": 0, "ROOF_NUMBER": null, "STOREY": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 1.1, 2.2, 3.3 ], [ 4.4, 5.5,6.6 ], [ 7.7, 8.8, 9.9 ], [ 10.10, 11.11, 12.12 ] ] ] ] } },
{ "type": "Feature", "properties": { "OBJECTID": 2215889.0, "ROOF_NUMBER": null, "STOREY": 4 }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.13, 14.14, 15.15], [ 16.16, 17.17, 18.18 ], [ 19.19, 20.20, 21.21 ], **[ [ [ 22.22, 23.23, 24.24 ], [ 25.25, 26.26, 27.27 ], [ 28.28, 29.29, 30.30 ], [ 31.31, 32.32, 33.33 ] ] ] ] } }**,
]
}
我想获得一个包含点的 x 值的列表,并且我想在不更改建筑物子列表的情况下获得它们。如B:
B = [[[[1.1], [4.4], [7.7], [10.10]]],[[[13.13], [16.16], [19.19]],[[22.22], [25.25], [28.28], [31.31]]]]
其中每个列表代表点的 x 值。每个功能都有自己的子列表。
当我在 BIM 可视化编程软件中编写这段代码时,我得到了一个像 C 一样的列表。
get_data_values["features"]["geometry"]["coordinates"][0];
C= [ [ [ [ 13.13, 14.14, 15.15], [ 16.16, 17.17, 18.18 ], [ 19.19, 20.20, 21.21 ], [ [ [ 22.22, 23.23, 24.24 ], [ 25.25, 26.26 , 27.27 ], [ 28.28, 29.29, 30.30], [ 31.31, 32.32, 33.33] ] ] ] } }
获得 C 后,我使用下面的代码来获得 B 列表。
def Extract(lst):
second_items = []
for sublst in lst:
for secsublst in sublst:
for thirdsublst in secsublst:
second_item = []
for item in thirdsublst:
second_items.append(second_item)
if item:
second_item.append(item[1])
return second_items
所以,当我尝试这个时,我得到了每个特征的 x 值,但我意识到数据中有 9835 个特征,但最终我只得到 84296 个特征
JSON文件有9835个特征,这意味着有9835个建筑物信息位于。在某些要素中,有 2 个不同的足迹多边形。 []
当我使用extract def时,我得到的数字是84296。这意味着我得到的建筑物数量更少。
如何获得像B这样的9835功能?我已经搜索了论坛,但无法解决我的问题,因为我是初学者。
感谢您的时间和指导。
您可以使用递归函数来遍历和复制嵌套列表结构,并仅使用第一个值填充新结构。
def flatten_coords(el):
if el == []:
return el
if isinstance(el[0], list):
return [flatten_coords(el[0])] + flatten_coords(el[1:])
return el[:1]
x_coords = []
for feature in A["features"]:
x_coords.append(flatten_coords(feature["geometry"]["coordinates"]))
print(x_coords)
输出:
[[[[[1.1], [4.4], [7.7], [10.1]]]], [[[[13.13], [16.16], [19.19], [[[22.22], [25.25], [28.28], [31.31]]]]]]]