如何获取/提取定义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)
答案 0 :(得分:52)
所以,我发现诀窍是使用Polygon
类方法的组合来实现这一目标。
如果您需要测地坐标,则需要将这些坐标转换回WGS84(通过pyproj
,matplotlib
的{{1}}或其他内容。
basemap
答案 1 :(得分:14)
您可以使用匀称的public class Abc(){
Public void onCreate(){
Textview ustatus;
ustatus=(Textview)findviewbyid(R.id.status);
statusButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
statusOnline();
// The toggle is enabled
} else {
statusOffline();
// The toggle is disabled
}
}
});
}
public void statusOnline(){
ustatus.setText("Online");
}
public void statusOffline(){
ustatus.setText("Offline");
}
}
函数:
mapping
答案 2 :(得分:10)
花了一段时间我才知道多边形有一个外部边界,可能还有几个内部边界。我之所以在此发布,是因为某些答案并未反映出这种区别,尽管为了公平起见,原始帖子并未使用具有内部边界的多边形作为示例。
形成外部边界的点按CoordinateSequence排列,可以通过以下方式获得
polygon.exterior.coords
您可以使用len(polygon.exterior.coords)
查找该对象的长度
并可以像列表一样索引对象。例如,要获取第一个顶点,请使用polygon.exterior.coords[0]
。请注意,第一点和最后一点是相同的;如果要包含没有重复点的顶点的列表,请使用polygon.exterior.coords[:-1]
。
您可以这样将CoordinateSequence(包括重复的顶点)转换为点列表:
list(polygon.exterior.coords)
类似地,由形成第一个内部边界的顶点组成的CoordinateSequence获得为polygon.interiors[0].coords
,而这些顶点的列表(无重复点)获得为polygon.interiors[0].coords[:-1]
。
答案 3 :(得分:2)
如果你真的想要构成多边形的匀称的点对象,而不仅仅是坐标的元组,你可以这样做:
points = MultiPoint(polygon.boundary.coords)
答案 4 :(得分:1)
您可以使用NumPy.array将形状上的Polygon转换为NumPy数组。我发现使用NumPy数组比coords.xy返回的数组更有用,因为坐标是配对的,而不是两个一维数组。使用对您的应用程序更有用的任何一个。
import numpy as np
x = [1, 2, 3, 4]
y = [9, 8, 7, 6]
polygon = Polygon(x,y)
points = np.array(polygon)
# points is:
[[ 1 9]
[ 2 8]
[ 3 7]
[ 4 6]]
答案 5 :(得分:1)
您可以使用以下两种方法中的任何一种。
1)
p = Polygon([(1,0),(1,1),(0,1),(0,0)])
for x,y in p.exterior.coords:
print(x,y)
以上代码打印以下内容。请注意,(1,0)打印两次,因为exterior.coords返回一个完成多边形的有序序列。
1.0 0.0
1.0 1.0
0.0 1.0
0.0 0.0
1.0 0.0
2)
p.exterior.coords.xy
输出以下内容
(array('d', [1.0, 1.0, 0.0, 0.0, 1.0]), array('d', [0.0, 1.0, 1.0, 0.0, 0.0]))
答案 6 :(得分:0)
由于最后一个答案似乎不再适用于最新版本的形状,我建议这个更新。
shapely提供Numpy数组接口(如文档所说:http://toblerity.org/shapely/project.html)
因此,让poly
成为一个匀称的多边形几何体:
In [2]: type(poly)
Out[2]: shapely.geometry.polygon.Polygon
此命令将转换为numpy数组:
In [3]: coordinates_array = np.asarray(poly.exterior.coords)
<强>提示:强>
一个人必须要为多边形提供外部材料,因为给出直接几何图形似乎也不起作用:
In [4]: coordinates_array = np.asarray(poly)
Out[4]: array(<shapely.geometry.polygon.Polygon object at 0x7f627559c510>, dtype=object)