使用 MySQL 在表中搜索多边形中的点

2024-01-18

我在 MySQL 5.5 中创建了一个表(municipal_border),它包含一些边界。

CREATE TABLE `municipal_border` (
  `boundary` polygon NOT NULL,
  `municipalID` int(10) NOT NULL,
) ENGINE=InnoDB

字段市政 ID 不是唯一的。

我使用下面的代码来测试一个点是否属于多边形。

set @r = (SELECT municipal_border.boundary FROM municipal_border WHERE municipalID=9001);
set @p = GeomFromText('POINT(24.1621 41.0548)');
select if(contains(@r, @p), 'yes', 'no');

第一个语句 set @r = ... 仅返回一行,我专门选择它进行测试。 效果非常好。

我想要做的是搜索整个表(换句话说,删除 SQL 问题中的 WHERE 部分)并找到该点所在的多边形。


经过一夜睡眠后,我找到了以下解决方案。

set @p = GeomFromText('POINT(23.923739342824817 38.224714465253733)');
select municipalID FROM ecovis.municipal_border
where ST_Contains(municipal_border.boundary, @p);

它适用于 MySQL 5.6.1,其中ST_前缀 http://dev.mysql.com/doc/refman/5.6/en/functions-for-testing-spatial-relations-between-geometric-objects.html功能已经实现。 虽然我没有通过经典方法(X 射线算法)进行任何测量,但我相信这相当快。在 2700 个多边形中定位一个点需要 0.17 秒,其中一些多边形的点数量远远超过 1,500 个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 MySQL 在表中搜索多边形中的点 的相关文章

随机推荐