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

如何从 LineString 未排序列表创建多边形

如何解决如何从 LineString 未排序列表创建多边形

我有 geojson 文件。此文件包含 Linestring 列表。我想从这个列表中创建多边形。但是每个 Linestring 都是一个特征,我不知道哪个 Linestring 创建了具体的 polygon。注意 - 文件包含不会创建多边形的 Linestring。 如何在 Python 中从此列表创建多边形?

谢谢

这是源 geojson 文件的示例:

{ "type": "Feature","properties": { "Layer": "foamglas_krovak_komplet","SubClasses": "AcDbEntity:AcDbLine","EntityHandle": "4608" },"geometry": { "type": "Linestring","coordinates": [ [ 13.221220950217189,50.402385261904207,0.0 ],[ 13.22153156591205,50.402482799654649,0.0 ] ] } },{ "type": "Feature","EntityHandle": "4609" },[ 13.22133755383933,50.402232016707117,"EntityHandle": "460A" },"coordinates": [ [ 13.221734958434849,50.40254665166141,[ 13.221220950217189,"EntityHandle": "460B" },"coordinates": [ [ 13.22185150756343,50.402393475850303,[ 13.221734958434849,"EntityHandle": "460C" },"coordinates": [ [ 13.22133755383933,[ 13.22185150756343,"EntityHandle": "460D" },"coordinates": [ [ 13.22291033809379,50.40282492699145,[ 13.222895393557071,50.402844559529669,"EntityHandle": "460E" },"coordinates": [ [ 13.223033588941,50.402863642240689,[ 13.22291033809379,"EntityHandle": "460F" },"coordinates": [ [ 13.223018644443661,50.402883274794704,[ 13.223033588941,"EntityHandle": "4610" },"coordinates": [ [ 13.222895393557071,[ 13.223018644443661,"EntityHandle": "4611" },[ 13.22288044900805,50.402864192065778,"EntityHandle": "4612" },"EntityHandle": "4613" },"coordinates": [ [ 13.22300369993404,50.402902907346707,"EntityHandle": "4614" },"coordinates": [ [ 13.22288044900805,[ 13.22300369993404,"EntityHandle": "4615" },"coordinates": [ [ 13.223204825873809,50.402856679802063,[ 13.22318988144989,50.402876312378339,"EntityHandle": "4616" },"coordinates": [ [ 13.2232738035546,50.402878346693967,[ 13.223204825873809,"EntityHandle": "4617" },"coordinates": [ [ 13.22325885915274,50.40289797927916,[ 13.2232738035546,"EntityHandle": "4618" },"coordinates": [ [ 13.22318988144989,[ 13.22325885915274,"EntityHandle": "4619" },"coordinates": [ [ 13.222787087444059,50.402786211612217,[ 13.222757198279551,50.40282547665489,"EntityHandle": "461A" },[ 13.222787087444059,"EntityHandle": "461B" },"EntityHandle": "461C" },"coordinates": [ [ 13.222757198279551,"EntityHandle": "461D" },"coordinates": [ [ 13.223159038334259,50.40292017970603,[ 13.22314409387173,50.402939812276081,"EntityHandle": "461E" },"coordinates": [ [ 13.22322801608748,50.402941846625133,[ 13.223159038334259,"EntityHandle": "461F" },"coordinates": [ [ 13.223213071646979,50.402961479204023,[ 13.22322801608748,"EntityHandle": "4620" },"coordinates": [ [ 13.22314409387173,[ 13.223213071646979,"EntityHandle": "4621" },"coordinates": [ [ 13.22301907990558,50.40270786193026,[ 13.22300413545018,50.402727494483138,"EntityHandle": "4622" },"coordinates": [ [ 13.223088057288001,50.40272952893168,[ 13.22301907990558,"EntityHandle": "4623" },"coordinates": [ [ 13.22307311285466,50.402749161493418,[ 13.223088057288001,"EntityHandle": "4624" },"coordinates": [ [ 13.22300413545018,[ 13.22307311285466,"EntityHandle": "4625" },"coordinates": [ [ 13.222937768713861,50.402682320586521,[ 13.22292282423251,50.402701953128961,"EntityHandle": "4626" },"coordinates": [ [ 13.223006746023399,50.402703987635981,[ 13.222937768713861,"EntityHandle": "4627" },"coordinates": [ [ 13.222991801564049,50.402723620187217,[ 13.223006746023399,"EntityHandle": "4628" },"coordinates": [ [ 13.22292282423251,[ 13.222991801564049,"EntityHandle": "4629" },"coordinates": [ [ 13.22294218071627,50.402808884313963,[ 13.22292723619773,50.40282851685631,"EntityHandle": "462A" },"coordinates": [ [ 13.22301115821211,50.402830551360971,[ 13.22294218071627,"EntityHandle": "462B" },"coordinates": [ [ 13.222996213715611,50.402850183912207,[ 13.22301115821211,"EntityHandle": "462C" },"coordinates": [ [ 13.22292723619773,[ 13.222996213715611,"EntityHandle": "462D" },"coordinates": [ [ 13.22288192851566,50.402661619534953,

解决方法

您可以尝试使用 polygonize。这将创建由线串包围的多边形。

import geopandas
from shapely.ops import polygonize

gdf = geopandas.GeoDataFrame.from_features(f)

polygons = geopandas.GeoSeries(polygonize(gdf.geometry))

polygons.plot()

enter image description here

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