查找POINT是否在MySQL 5.7中的POLYGON内

时间:2017-08-05 16:23:41

标签: mysql spatial-query

我需要找到用户搜索位置中包含的所有属性;一个位置可以是一个城市,县等。每个属性都有一个lat和long,可以用来在MySQL中创建一个POINT。位置是GEOMETRY类型,大多数是POLYGON和MULTIPOLYGONS。经过一周的搜索和故障排除后,我似乎无法让DB给我一个匹配。这就是场景。

SET @area = (SELECT area.polygon from area where area.city = 'Charlotte' and area.type =  'city');
SET @property = (SELECT property.point from property where id = 397315);
SELECT st_contains(@area, @property);

@area获得夏洛特的POLYGON。

@property获取一个属性的POINT,我100%确定该属性位于Charlotte内部或POLYGON内部。一世 甚至用外部工具进行测试,以进行健全性检查。

每次ST_CONTAINS返回0!无论我做什么,总是0 我尝试使用ST_WITHIN失败了。然后我确保SRID是相同的。首先两个都没有设置在4328,然后我将它们设置为0,再没有。我为多边形和点添加了空间索引,但仍然没有。

这是我与POINT (35.086449 -80.741455)匹配的要点。

为了完整性检查我运行了这个查询:

select st_contains(
ST_GeomFromText('POLYGON (( 322 322, 322 513, 528 513, 528 322, 322 322 ))'),
ST_GeomFromText('POINT (418 411)'));

这导致1匹配!

我到底错过了什么?谢谢。

1 个答案:

答案 0 :(得分:3)

试试这个

    SELECT MBRContains(POLYGON (( 322 322, 322 513, 528 513, 528 322, 322 322 )),   
 GeomFromText('Point(418 411)')) AS whatEver

为我工作