好吧,所以我有一個非常大的屬性信息數據庫,並且有地理座標。我需要做的是運行一個查詢,詢問「給我所有矩形或多邊形內的屬性」。用戶界面將允許用戶定義矩形或多邊形的點(使用地圖系統)。這些座標將進入查詢,並且sql應返回該區域中的屬性列表。如果多邊形是不可能的,至少一個矩形會有幫助。我已經知道如何做半徑搜索。多邊形/矩形中的點的SQL查詢
欣賞您可以提供的任何幫助。
好吧,所以我有一個非常大的屬性信息數據庫,並且有地理座標。我需要做的是運行一個查詢,詢問「給我所有矩形或多邊形內的屬性」。用戶界面將允許用戶定義矩形或多邊形的點(使用地圖系統)。這些座標將進入查詢,並且sql應返回該區域中的屬性列表。如果多邊形是不可能的,至少一個矩形會有幫助。我已經知道如何做半徑搜索。多邊形/矩形中的點的SQL查詢
欣賞您可以提供的任何幫助。
MySQL支持幾何函數和查詢。參考文檔會對您有所幫助:https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions.html
使用Within(geom1, geom2)
函數檢查geom1是否在空間上位於geom2內。 您的查詢將看起來像,
select some_thing from your_table where Within(some_point,
GeomFromText('POLYGON(some_polygon)'));
您的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/
感謝您的幫助。我可以使用這與典型的地圖座標。 – 2012-02-13 17:15:09