在我的表格中,我有三个地理空间领域:
`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多个多边形,我什么都没得到!我想我一定做错了,但是对于我的生活,我无法弄清楚它是什么!
有什么建议吗?
答案 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);