mysql多边形搜索失败

时间:2011-11-20 13:47:05

标签: mysql search gis polygon

在我的表格中,我有三个地理空间领域:

`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`)

然后我将触发器定义为'on update before',它将纬度/经度对中的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).

作为一个FYI,上面SET @bbox中显示的数据点来自美国的4个角(顺时针输入),应返回所有点的99%,但不返回任何值。这是坐标: 加利福尼亚州圣地亚哥:+ 32.70 -117.16 Seatle,WA:47.97 -122.19 缅因州班戈:44.80 -68.77 迈阿密,佛罗里达州:25.77 -80.19

我还尝试过针对来自NWS CAP 1.1 Feed的3500多个多边形,我什么都没得到!我想我一定做错了,但是对于我的生活,我无法弄清楚它是什么!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为你不应该使用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);