-->

搜索点表在使用MySQL多边形(Search a table for Point in Polygo

2019-08-18 01:53发布

我已创建一个表(municipal_border),在MySQL 5.5,拥有一些界限。

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

现场municipalID不是唯一的。

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

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');

设置@r = ...第一个语句返回只有一行,我选择了它专为测试。 它的工作原理好了。

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

Answer 1:

一夜睡眠后,我发现以下解决方案。

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_前缀功能已经实现。 虽然我从经典方法(X射线算法)没有任何观测值我相信这是相当快的。 它需要0.17秒在2700个多边形定位点具有很好的一些多边形超过1500点。



Answer 2:

帕夫洛斯Papanikolaou的解决方案是完美的事情。 在我的情况下表:TestPoly和列:POL插入查询

SET @g = 'POLYGON((22.367582117085913 70.71181669186944, 22.225161442616514 70.65582486840117, 22.20736264867434 70.83229276390898, 22.18701840565626 70.9867880031668, 22.22452581029355 71.0918447658621, 22.382709129816103 70.98884793969023, 22.40112042636022 70.94078275414336, 22.411912121843205 70.7849142238699, 22.367582117085913 70.71181669186944))';
INSERT INTO TestPoly (pol) VALUES (ST_GeomFromText(@g))

选择查询

set @p = GeomFromText('POINT(22.4053386588057 70.86240663480157)');
select * FROM TestPoly where ST_Contains(pol, @p);


文章来源: Search a table for Point in Polygon using MySQL