我有以下
dxf
格式的 CAD 文件,其显示为 autocad
,如下所示:
我使用 GDAL org2org 将其转换为名为
geojson
的 test.geojson
格式文件,但全部在 type: LineString
中
{
"type": "FeatureCollection",
"name": "entities",
"features": [
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 30.0, 0.0 ], [ 30.0, 9.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 16.0, 47.0 ], [ 16.0, 34.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 16.0, 13.0 ], [ 16.0, 0.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.0, 31.0 ], [ 9.0, 31.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 30.0, 31.0 ], [ 39.0, 31.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.0, 23.0 ], [ 9.0, 23.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 30.0, 23.0 ], [ 39.0, 23.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.0, 16.0 ], [ 9.0, 16.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 30.0, 16.0 ], [ 39.0, 16.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 0.0, 0.0 ], [ 39.0, 0.0 ], [ 39.0, 47.0 ], [ 0.0, 47.0 ], [ 0.0, 0.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 9.0, 38.0 ], [ 11.0, 38.0 ], [ 11.0, 34.0 ], [ 28.0, 34.0 ], [ 28.0, 38.0 ], [ 30.0, 38.0 ], [ 30.0, 9.0 ], [ 28.0, 9.0 ], [ 28.0, 13.0 ], [ 11.0, 13.0 ], [ 11.0, 9.0 ], [ 9.0, 9.0 ], [ 9.0, 38.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 11.0, 32.0 ], [ 17.0, 32.0 ], [ 17.0, 15.0 ], [ 11.0, 15.0 ], [ 11.0, 32.0 ] ] } },
{ "type": "Feature", "properties": { "Layer": "0" }, "geometry": { "type": "LineString", "coordinates": [ [ 20.0, 32.0 ], [ 28.0, 32.0 ], [ 28.0, 15.0 ], [ 20.0, 15.0 ], [ 20.0, 32.0 ] ] } }
]
}
我想将其转换为
type: polygon
,显示如下图所示:
如何在 Geopandas 中做到这一点?谢谢。
顺便说一句,我读了
test.geojson
文件,它看起来像:
import geopandas as gpd
df = gpd.read_file("test.geojson")
df.head(5)
输出:
Layer SubClasses EntityHandle geometry
0 0 AcDbEntity:AcDbPolyline 106 LINESTRING (30.35270412013777 0.79246615687498...
1 0 AcDbEntity:AcDbPolyline 107 LINESTRING (16.16520412013776 47.1049661568749...
2 0 AcDbEntity:AcDbPolyline 108 LINESTRING (16.16520412013776 13.4799661568749...
3 0 AcDbEntity:AcDbPolyline 109 LINESTRING (0.665204120137787 31.2924661568749...
4 0 AcDbEntity:AcDbPolyline 10A LINESTRING (30.35270412013777 31.2924661568749...
将线溶解为多线,然后多边形化:
import geopandas as gpd
from shapely.ops import polygonize
df = gpd.read_file(r"C:\Users\bera\Desktop\gistest\data.geojson")
multiline = df.dissolve() #Dissolve all lines into one multiline
polygons = list(polygonize(multiline.iloc[0].geometry)) #Polygonize it
df2 = gpd.GeoDataFrame(geometry=polygons) #Create a geodataframe from the list of polygons
df2["id"] = range(df2.shape[0]) #Give each polygon a unique id
#Plot
ax = df2.plot(zorder=1, column="id", cmap="tab20")
df.plot(ax=ax, zorder=2, color="black")