Mysql中判斷一個點是否落在多邊形內

關於地理空間數據,常常須要處理兩個空間數據的關聯關係。有不少種方法能夠處理,經過編寫程序算法,或者是調用數據庫中對應的function。在mysql數據庫中,https://dev.mysql.com/doc/refman/5.1/en/functions-for-testing-spatial-relations-between-geometric-objects.html作了詳細的介紹,可是它沒有以具體的工程實踐爲例,本文以判斷一個點是否落在多邊形內的主題,加以簡單的擴展。html

首先,創建一張簡單的地理數據表mysql

CREATE TABLE `ci_special_zone` ( `id` int(11) NOT NULL auto_increment, `ploygongeo` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

並插入幾條數據算法

INSERT INTO ci_special_zone (ploygongeo) VALUES('POLYGON((113.547 22.186,113.549 22.186,113.549 22.188, 113.547 22.188,113.547 22.186))');  

INSERT INTO ci_special_zone (ploygongeo) VALUES('POLYGON((112.547 21.186,112.549 212.186,112.549 21.188, 112.547 212.188,112.547 21.186))');

最後,執行以下的sql語句sql

SELECT substring(ploygongeo,10,length(ploygongeo)-11) from ci_special_zone where MBRContains(PolygonFromText(ploygongeo),PolygonFromText('Point(113.547 22.186)'))>0 limit 0,1

座標點113.547 22.186是經緯度,如有返回值,則表示座標點落在所在的區間。mongodb

mongodb版的可參見:https://blog.csdn.net/fdipzone/article/details/52374630數據庫

原文連接:https://www.2cto.com/database/201211/166782.htmlspa

相關文章
相關標籤/搜索