2012-01-12 53 views
0

好吧,所以我有一個非常大的屬性信息數據庫,並且有地理座標。我需要做的是運行一個查詢,詢問「給我所有矩形或多邊形內的屬性」。用戶界面將允許用戶定義矩形或多邊形的點(使用地圖系統)。這些座標將進入查詢,並且sql應返回該區域中的屬性列表。如果多邊形是不可能的,至少一個矩形會有幫助。我已經知道如何做半徑搜索。多邊形/矩形中的點的SQL查詢

欣賞您可以提供的任何幫助。

回答

0

使用Within(geom1, geom2)函數檢查geom1是否在空間上位於geom2內。 您的查詢將看起來像,

select some_thing from your_table where Within(some_point, 
     GeomFromText('POLYGON(some_polygon)')); 
3

您的SQL代碼必須是這樣的
SQL查詢

SELECT 
    * 
FROM areas area 
WHERE 
    ST_CONTAINS(`area`.`polygon`, GEOMFROMTEXT('POINT(34.262714 56.262714)')) = 1 


CREATE TABLE IF NOT EXISTS `areas` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `polygon` polygon NOT NULL, 
    `area_name` varchar(70) NOT NULL, 
    PRIMARY KEY (`id`), 
    SPATIAL KEY `polygon` (`polygon`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

另外要小心,用於大型桌子你必須使用MyISAM, ,因爲InnoDB不支持SPATIAL索引。
注意 MySQL支持5.6+版本的ST_CONTAINS。

欲瞭解更多看看這個,有用的文章 http://www.mysqlperformanceblog.com/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/