Python 删除多个多边形内的点
数据:我有两个变量的坐标Python 删除多个多边形内的点,python,text-files,polygon,Python,Text Files,Polygon,数据:我有两个变量的坐标a和b,每个变量的长度为100000,我有一个包含多个多边形坐标的文本文件 我现在想删除不同多边形内的所有a和b点。 为了做到这一点,我试着用它来表示一个点和一个多边形 我为解决几个点和几个多边形的问题而制定的方法是: 取第一个多边形的坐标 对a和b和的所有100000个点(如果它们在内部)运行该函数,然后将它们附加到列表中,稍后我可以使用该列表与原始的a和b进行比较 使用第二个多边形的坐标执行上述两个步骤,依此类推…… 现在我面临着两个问题,我不知道如何处理 包含多
a
和b
,每个变量的长度为100000,我有一个包含多个多边形坐标的文本文件
我现在想删除不同多边形内的所有a和b点。 为了做到这一点,我试着用它来表示一个点和一个多边形 我为解决几个点和几个多边形的问题而制定的方法是:
- 取第一个多边形的坐标
- 对
和的所有100000个点(如果它们在内部)运行该函数,然后将它们附加到列表中,稍后我可以使用该列表与原始的a和b进行比较a和b
- 使用第二个多边形的坐标执行上述两个步骤,依此类推……
a和b的100000个点如下所示
如果有任何方便的方法,除了我上面给出的解决方案之外,它也会很有用
我想要的是a和b中位于多边形外部的点。当你说“a和b中位于多边形外部的点”时,你是指所有多边形外部还是任何多边形外部
这是:
读取多边形点并创建适当数据结构的例程,用于point_in_poly
函数
用于检查点是否位于任何多边形中的例程
以下是从文件中读取多边形点的例程:
def readPolygons(path):
polygons = []
with open(path) as f:
for line in f: # (1)
words = [ float(y) for y in (line.split())[2:] ] # (2)
poly = zip (words[::2], words[1::2]) # (3)
if len(poly): # (4)
polygons.append(poly)
return polygons
每个多边形都表示为一个浮点对列表,例程返回一个多边形列表
注:
迭代文件中的所有行
将行拆分为单词,用[2:][/code>删除前两个单词,并将每个单词转换为浮点
创建一个配对列表,将第1、3、5等作为x坐标,将第2、4、6等作为y坐标
忽略空白行
以下是检查点是否位于任何多边形中的例行程序:
def inAnyPolygon(x,y,polygons):
for p in polygons:
if point_in_poly(x,y,p):
return True
return False
如果您的条件是“在所有多边形中”,则使用:
def inAllPolygons(x,y,polygons):
for p in polygons:
if not point_in_poly(x,y,p):
return False
return True
更新:如果您有一个点列表点
,则可以创建另一个列表,其中包含不在任何多边形中的点,具有:
outliers = []
for p in points:
(x,y) = p
if not inAnyPolygons(x,y,polygons):
outliers.append(p)
return outliers
如果a
和b
是分别代表100000个点的x和y坐标的数字列表,则以下是查找异常值的代码:
outliers = []
for (x,y) in zip(a,b):
if not inAnyPolygons(x,y,polygons):
outliers.append((x,y))
return outliers
“a和b中位于多边形外部的点”:我希望所有这些点位于所有多边形外部。我将立即执行您的代码并检查!!!我有a和b
,这两个变量各有100000分。你的readPolygons
现在给我一个多边形坐标的元组!!!现在我需要得到a_-outside
和b_-outside
,即多边形外的点。顺便说一句,点
,你是指我的a和b
?给我一个a
和b
的例子。它们在问题的图中a
是一个包含100000个点的列表,范围在30.0-38.0之间,b
是一个包含100000个点的列表,范围在-11.0到-3.7之间。多个多边形的坐标也在此范围内。readPolygons
返回一个“多边形”列表,其中每个“多边形”都是一组数字,这是因为在point\u in\u polygon
函数中,多边形由一组数字表示。请查看扫描线算法。