【问题标题】:Find if a POINT is inside a POLYGON in MySQL 5.7在 MySQL 5.7 中查找 POINT 是否在 POLYGON 内
【发布时间】:2017-08-05 16:23:41
【问题描述】:

我需要查找用户搜索位置中包含的所有属性;位置可以是城市、县等。每个属性都有纬度和经度,可用于在 MySQL 中创建 POINT。这些位置是几何类型的,其中大部分是多边形和多重多边形。经过一周的搜索和故障排除后,我似乎无法让数据库给我匹配。这就是场景。

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 得到 Charlotte 的 POLYGON。

@property 获取我 100% 确定位于 Charlotte 内部或 POLYGON 内部的属性的 POINT。我 甚至使用外部工具对其进行了完整性检查。

每次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 是匹配的!

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

【问题讨论】:

    标签: mysql spatial-query


    【解决方案1】:

    试试这个

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

    为我工作

    【讨论】:

    • 通过将“st_contains”替换为“MBRContains”,您正在改变多边形的形状。因此,此请求将返回一些不应包含的点。我建议您阅读“最小边界矩形”以了解它
    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2020-10-25
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多