2009-06-15 64 views
2

我在PostGIS的工作了點多的,我有這樣的功能:MySQL的 - 地理空間對象

SELECT * FROM表名,其中st_contains(列,st_setsrid(st_makepoint(-92.095109,46.804100),4326 ));

列是multipoly(((點)))

我試圖找到一種方法做類似的工作與MySQL,並想知道是否有類似的功能,這樣做。 MySQL的開發站點對Multipolys的描述和文檔非常有限。

有沒有人做過這樣的事情?

回答

2

MySQL沒有實現很多空間查詢 - 我不確定有關包含,但有一些方法可以近似它和其他函數。例如,您可以通過將所有結果與給定矩形中的座標進行拉伸,然後按照描述的方式計算距離來執行點之間的距離。here.您也可以使用矩形近似地解決contains問題。首先,你選擇一個更一般的WKT語法:

select * from table_name where contains(the_polygon, GeomFromText('POINT(12.3 45.6)');

我認爲contains的開放規範不落實,但有一個MySQL的函數使用minimum bounding rectangle接近你點是否在多邊形:

select * from table_name where MBRContains(the_polygon, GeomFromText('POINT(12.3 45.6)');

我已經結束了使用很多普通的矩形上的MySQL,因爲這很容易計算的座標集的外部邊界。總的來說,PostGIS要好得多,但如果必須的話,你可以做一些跨數據庫的事情。

UPDATE:在詢問此問題後,nice summary被張貼到opengeo.org;它似乎即使不明顯或者說MySQL經常使用MBR。如果您想了解更多關於PostGIS的工作方式以及爲什麼它的2D功能實現者通常具有更短的行數,請查看本機postgres類型point, lseg, box, path, polygon,circle

+0

謝謝,完美的工作。感謝您的幫助和智慧! – Petrogad 2009-06-17 14:50:26