Pav*_*aou 6 mysql point-in-polygon
我在MySQL 5.5中创建了一个表(cities_border),它有一些边界.
CREATE TABLE `municipal_border` (
`boundary` polygon NOT NULL,
`municipalID` int(10) NOT NULL,
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)
田地市政当局不是唯一的.
我正在使用下面的代码来测试一个点是否属于多边形.
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');
Run Code Online (Sandbox Code Playgroud)
第一个语句集@r = ...只返回一行,我选择它专门用于测试.它工作得很好.
我想要做的是搜索整个表(擦除,换句话说,从SQL问题中删除WHERE部分)并找到该点所在的多边形.
Pav*_*aou 14
经过一夜的睡眠后,我找到了以下解决方案.
set @p = GeomFromText('POINT(23.923739342824817 38.224714465253733)');
select municipalID FROM ecovis.municipal_border
where ST_Contains(municipal_border.boundary, @p);
Run Code Online (Sandbox Code Playgroud)
它适用于MySQL 5.6.1,其中已实现ST_前缀功能.虽然我没有经典方法(X射线算法)的任何测量,但我相信这是非常快的.需要0.17秒来定位2700个多边形中的点,其中一些多边形具有超过1,500个点.