在多段线集合上匹配地理坐标分解与ArcGIS分解

2024-09-30 00:24:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用geopandas在一组流线上复制ArcGIS溶解的输出。基本上,df/stream_0层是使用^{}从DEM中提取的流网络。那个输出有一些随机重叠的区域,我正试图移除它们。通过ArcGIS Pro运行溶解可以很好地解决这一问题,但我不希望必须处理ArcGIS/ArcPy来解决这一问题

Stream Network

ArcGIS Dissolve Setting

#streams_0.geojson = df.shp = streams_0.shp from Dissolve Setting image
#~~~~~~~~~~~~~~~~~~~~
import geopandas as gpd
df = gpd.read_file('streams_0.geojson')
df.head()
Out[3]: 
                                            geometry
0  LINESTRING (400017.781 3000019.250, 400017.781...
1  LINESTRING (400027.781 3000039.250, 400027.781...
2  LINESTRING (400027.781 3000039.250, 400037.781...
3  LINESTRING (400027.781 3000029.250, 400037.781...
4  LINESTRING (400047.781 3000079.250, 400047.781... 

我尝试过使用填充列使用gpd.dissole(),但没有成功

df['dissolvefield'] = 1;
df2 = df.dissolve(by='dissolvefield')
df3 = gpd.geoseries.GeoSeries([geom for geom in df2.geometry.iloc[0].geoms])

同样地,在没有运气的情况下,尝试在中匀称地使用一元联合

import fiona
shape1 = fiona.open("df.shp")
first = shape1.next()

from shapely.geometry import shape
shp_geom = shape(first['geometry'])


from shapely.ops import unary_union
shape2 = unary_union(shp_geom)

这似乎是一个简单的解决方案,我想知道为什么我会遇到这么多问题。我的GeoDataFrame仅由线条几何体组成,所以不一定有另一个可以聚合的属性。我基本上只是尝试保持线条的几何图形不变,但删除可能存在的任何重叠特征。我不想拆分这些行,也不想将它们聚合为多部分功能


Tags: fromimportdfgeojsonsettingstreamsgeopandasgeometry
1条回答
网友
1楼 · 发布于 2024-09-30 00:24:03

我使用一元联合体,但无需将其视为形状特征

读取文件并将其放入GPD后(可以直接从*.shp文件执行此操作):

df = gpd.read_file('streams_0.geojson')

尝试绘制它,以查看输出是否正确

df.plot()

然后像这样使用一元联合,并再次绘图:

shape2 = df.unary_union 
shape2

最后一步(如有必要)是再次设置为geopandas:

# transform Geometry Collection to shapely multilinestirng
segments = [feature for feature in shape2]

# set back as geopandas
gdf = gpd.GeoDataFrame(list(range(len(segments))),  geometry=segments, 
crs=crs)
gdf .columns = ['index', 'geometry']

相关问题 更多 >

    热门问题