mysql 多点在 多边形_删除多个多边形内的点

当你说“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:]放在一起,然后将每个单词转换为一个float。在

创建一个成对列表,将第1、3、5等作为x坐标,将第2、4、6等作为y坐标。在

忽略空白行。在

以下是检查点是否位于任何多边形中的例程:

^{pr2}$

如果条件是“在所有多边形中”,则使用:def inAllPolygons(x,y,polygons):

for p in polygons:

if not point_in_poly(x,y,p):

return False

return True

更新:如果您有一个点列表points,您可以创建另一个列表,其中包含那些不在任何多边形中的点: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

要查询一个是否在一个多边形区域中,可以使用MySQL的GIS函数库中的ST_Contains函数。该函数需要两个参数:一个是多边形区域的几何对象,另一个是的几何对象。 以下是一个使用ST_Contains函数查询是否在多边形区域中的示例: 假设有一个名为“polygon”的表,其中包含多边形区域的几何对象,和一个名为“point”的表,其中包含的几何对象。 1. 首先,需要在MySQL中启用空间数据支持。这可以通过运行以下命令来完成: ``` SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; CREATE DATABASE IF NOT EXISTS spatial_db; USE spatial_db; CREATE TABLE `polygon` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `geom` polygon NOT NULL, PRIMARY KEY (`id`), SPATIAL INDEX `geom` (`geom`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; CREATE TABLE `point` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `geom` point NOT NULL, PRIMARY KEY (`id`), SPATIAL INDEX `geom` (`geom`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; ``` 2. 然后,需要将多边形区域和的几何对象插入到相应的表中。这可以使用MySQL的ST_GeomFromText函数来完成,该函数将文本表示的几何对象转换为MySQL中的几何对象。例如: ``` INSERT INTO `polygon` (`name`, `geom`) VALUES ('Polygon 1', ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')); INSERT INTO `point` (`name`, `geom`) VALUES ('Point 1', ST_GeomFromText('POINT(5 5)')); ``` 3. 最后,可以使用ST_Contains函数来查询是否在多边形区域中。例如: ``` SELECT `point`.`name`, `polygon`.`name`, ST_Contains(`polygon`.`geom`, `point`.`geom`) as `contains` FROM `point`, `polygon` WHERE `point`.`name` = 'Point 1' AND `polygon`.`name` = 'Polygon 1'; ``` 查询结果中的“contains”列将包含一个布尔值,指示是否在多边形区域中。如果多边形区域中,则该值为1;否则为0。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值