首页 > 解决方案 > POLYGON((x1 x2), (x3 x4), (x5 x6), (x7 x8)) 和 POLYGON([(x1,x2), (x3,x4), (x5,x6), (x7,x8) 的区别)])

问题描述

我对使用geopandas和更普遍的 GIS 方法相当陌生,我对如何定义和表示对象有点困惑,主要是因为我找到的一些解决问题的解决方案我要求输入数据采用其他形式我设法生成的那个。

让我举例说明:

假设我希望将 LineString 分成 6 个相等的段,那么这种方法可以完美地工作:

from shapely.geometry import LineString, MultiPoint
from shapely.ops import split

line = LineString([(0, 0), (10, 10)])
splitter = MultiPoint([line.interpolate((i/4), normalized=True) for i in range(1, 4)])
split(line, splitter).wkt

返回:

'GEOMETRYCOLLECTION (LINESTRING (0 0, 2.5 2.5), LINESTRING (2.5 2.5, 5 5), LINESTRING (5 5, 7.5 7.5), LINESTRING (7.5 7.5, 10 10))'

用我的方法(在我的数据上)

zone_short_edges['line'] = zone_short_edges.apply(lambda row: LineString([row['fr_point'], row['to_point']]), axis=1) #Create a linestring column
zone_short_edges['midpoint'] = zone_short_edges.apply(lambda row: row['line'].centroid, axis=1) #Find centroid
zone_short_edges = zone_short_edges.set_geometry("line")
zone_short_edges = zone_short_edges.set_geometry("midpoint")

我生成这种类型的 POINT 和 LINESTRING:

         id  vertex_id                    fr_point  \
1  Allé 119          2  POINT (119.79008 28.35047)   
3  Allé 119          4  POINT (122.85067 44.85106)   

                     to_point  seg_length  \
1  POINT (122.85067 28.08433)    3.072140   
3  POINT (119.92314 44.71798)    2.930553   

                                                line  \
1  LINESTRING (119.79008 28.35047, 122.85067 28.0...   
3  LINESTRING (122.85067 44.85106, 119.92314 44.7...   

                     midpoint  
1  POINT (121.32038 28.21740)  
3  POINT (121.38690 44.78452) 

也就是说,LINESTRING (119.79008 28.35047, 122.85067 28.0454, 122.3434 23.323). 因此我不能使用线串拆分方法。此外,该方法的结果是我必须开始的形式的线串。

所以,我的问题是:

  1. LineString([(0, 0), (10, 10)]) 和 和有什么不一样LINESTRING((0 0), (10 10))
  2. 我可以把一个变成另一个吗?
  3. 也许是一个相关的问题:假设我的 geopandas 数据框 df 在表单中有一个几何类型的列LINESTRING((0 0), (10 10))不允许该方法df.exterior.coords。为什么?

感谢您的洞察力!

标签: python-3.xgeopandas

解决方案


推荐阅读