从Python形状多边形中提取点/坐标

rya*_*lon 49 python polygon shapely

如何获取/提取定义shapely多边形的点?谢谢!

形状多边形的示例

from shapely.geometry import Polygon

# Create polygon from lists of points
x = [list of x vals]
y = [list of y vals]

polygon = Polygon(x,y)
Run Code Online (Sandbox Code Playgroud)

rya*_*lon 57

所以,我发现诀窍是使用Polygon类方法的组合来实现这一点.

如果你想测地坐标,那么你需要回到变换这些以WGS84(通过pyproj,matplotlibbasemap,或东西).

from shapely.geometry import Polygon

#Create polygon from lists of points
x = [list of x vals]
y = [list of y vals]

some_poly = Polygon(x,y)

# Extract the point values that define the perimeter of the polygon
x, y = some_poly.exterior.coords.xy
Run Code Online (Sandbox Code Playgroud)

  • 这将 x 和 y 坐标作为单独的列表给出。对于作为单独 (x,y) 元组的列表,请根据下面的 @pnklein 答案使用 `poly.exterior.coords` ,或使用 `sh.get_coordinates(poly)` 来获取数组 [x,y] 的 np 数组 (2认同)

pnk*_*ein 18

我花了一段时间才知道Polygon有一个外部边界,可能还有几个内部边界.我在这里发帖是因为有些答案没有反映出这种区别,尽管公平地说原始帖子没有用作具有内部边界的多边形的例子.

形成外部边界的点被布置在CoordinateSequence中,其可以被获得

polygon.exterior.coords
Run Code Online (Sandbox Code Playgroud)

您可以使用它来查找此对象的长度,len(polygon.exterior.coords) 并可以像列表一样索引对象.例如,要获取第一个顶点,请使用polygon.exterior.coords[0].注意,第一个和最后一个点是相同的; 如果你想要一个由没有重复点的顶点组成的列表,请使用polygon.exterior.coords[:-1].

您可以将CoordinateSequence(包括重复的顶点)转换为点列表,从而:

list(polygon.exterior.coords)
Run Code Online (Sandbox Code Playgroud)

类似地,获得由形成第一内部边界的顶点组成的CoordinateSequence polygon.interiors[0].coords,并且获得那些顶点的列表(没有重复点)polygon.interiors[0].coords[:-1].


Ika*_*ský 17

您可以使用匀称mapping功能:

>>> from shapely.geometry import Polygon, mapping
>>> sh_polygon = Polygon(((0,0), (1,1), (0,1)))
>>> mapping(sh_polygon)
{'type': 'Polygon', 'coordinates': (((0.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)),)}
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.这很好,因为它可以很容易地推广需要这个的例程. (2认同)

Ric*_*ica 8

如果您确实想要构成多边形的形状点对象,而不仅仅是坐标元组,您可以这样做:

points = MultiPoint(polygon.boundary.coords)
Run Code Online (Sandbox Code Playgroud)


Ant*_*vBR 5

我用这个:

list(zip(*p.exterior.coords.xy))
Run Code Online (Sandbox Code Playgroud)

用以下方式创建的多边形p = Polygon([(0,0),(1,1),(1,0),(0,0)])返回:

[(0.0, 0.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0)]
Run Code Online (Sandbox Code Playgroud)