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,matplotlib的basemap,或东西).
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)
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)
如果您确实想要构成多边形的形状点对象,而不仅仅是坐标元组,您可以这样做:
points = MultiPoint(polygon.boundary.coords)
Run Code Online (Sandbox Code Playgroud)
我用这个:
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)