【问题标题】:mysql polygon search failsmysql多边形搜索失败
【发布时间】:2012-01-02 08:50:20
【问题描述】:

在我的表格中,我有三个地理空间字段:

`lat` decimal(12,7) NOT NULL,
`lon` decimal(12,7) NOT NULL,
`location` point NOT NULL,

还有三个地理空间索引:

KEY `lat` (`lat`),
KEY `lon` (`lon`),
SPATIAL KEY `location` (`location`)

然后我有一个定义为“更新前开启”的触发器,它从纬度/经度对设置location,如下所示:

FOR EACH ROW SET NEW.location = PointFromText(CONCAT('POINT(',NEW.lat,' ',NEW.lon,')'))

我很确定数据是正确的,因为我可以进行各种循环查询。现在,我还需要做一些多边形查询,但不能让它返回任何结果!这是我的多边形查询:

SET @bbox = 'POLYGON((32.70 -117.16, 47.97 -122.19, 44.80 -68.77, 25.77 -80.19, 32.70 -117.16))';
SELECT * , AsText( location ) 
FROM geo_table
WHERE Intersects( location, GeomFromText( @bbox ) );

通过 phpMyAdmin 运行此查询,我收到两条 SQL 语句的以下消息:

# MySQL returned an empty result set (i.e. zero rows).

作为仅供参考,上面 SET @bbox 中显示的数据点来自美国的 4 个角(顺时针输入),应该返回所有点的 99%,但什么也不返回。以下是坐标: 加利福尼亚州圣地亚哥:+32.70 -117.16 华盛顿州西雅图:47.97 -122.19 缅因州班戈:44.80 -68.77 佛罗里达州迈阿密:25.77 -80.19

我还针对 NWS CAP 1.1 提要中的 3500 多个多边形进行了尝试,但我一无所获!我想我一定是做错了什么,但是,对于我的生活,我无法弄清楚它是什么!

有什么建议吗?

【问题讨论】:

    标签: mysql search gis polygon


    【解决方案1】:

    我认为您不应该使用 Intersects,而是尝试使用 Contains

    SET @bbox = 'POLYGON((32.70 -117.16, 47.97 -122.19, 44.80 -68.77, 25.77 -80.19, 32.70 -117.16))';
    SET @USA = GeomFromText(@bbox);
    SET @Lincoln = PointFromText('POINT(40.82 -96.71)');
    SELECT Contains(@USA, @Lincoln);
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      相关资源
      最近更新 更多