2011-11-20 64 views
0

在我的表,我有三個地理空間領域:MySQL的多邊形搜索失敗

`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顯示的數據點是從美國的四個角落(順時針輸入),應該返回所有點的99%,但不返回任何內容。這裏有座標: 聖地亞哥,CA:32.70 -117.16 Seatle,WA:47.97 -122.19 班戈,緬因:44.80 -68.77 邁阿密,佛羅里達州:25.77 -80.19

我也試過這個,防止過來自NWS CAP 1.1飼料的3500個多邊形,我什麼也得不到!我想我一定是做錯了什麼,但是,對於我的生活,我無法弄清楚它是什麼!

有什麼建議嗎?

回答

0

我不認爲你應該使用相交,嘗試用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);