2016-07-18 63 views
0

中獲取記錄我在數據庫中的表與緯度和經度屬性如下MySQL的:多邊形

CREATE TABLE `companies` (
    `ID` int(11) NOT NULL, 
    `title` varchar(255) NOT NULL, 
    `latitude` decimal(12,8) NOT NULL, 
    `longitude` decimal(12,8) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 


INSERT INTO `companies` (`ID`, `title`, `latitude`, `longitude`) VALUES 
(NULL, 'John and SOns', '25.29064622', '55.368462502'), 
(NULL, 'Evas', '25.28862850', '55.40107816'); 

谷歌地圖上我有折線要素,在這裏用戶可以繪製折線,這樣我們就可以顯示所有屬於該多邊形內的公司。

這裏是地圖圖像

enter image description here

谷歌可能給經緯度 enter image description here

數組我如何可以查詢來從數據庫中的所有記錄,它位於繪製多邊形內?

+0

假設你很樂意使用(投影到)歐幾里德幾何,然後從MySQL v5.7.5 ['ST_Contains()'](https://dev.mysql.com/doc/refman/5.7/en /spatial-relation-functions-object-shapes.html#function_st-contains)將完全按照你的意願去做;早期版本的MySQL只能使用['MBRContains()'](https://dev.mysql.com/doc/en/spatial-relation-functions-mysql- specific.html#function_mbrcontains)。 – eggyal

+0

我正在使用MySQL v5.6.28,由於谷歌地圖bounds.getCenter()函數給出多邊形中心的經緯度,所以有什麼辦法可以得到多邊形的半徑,所以可以通過數據庫中的距離查詢。 –

+0

如果你對這種近似值滿意,MBRContains()'有什麼問題? – eggyal

回答

0

你會發現,如果你寫你的查詢爲:

select ID,title from companies where st_within(point(companies.longitude,companies.latitude), ST_GeomFromText('Polygon((75.80278873443604 26.863847231536703, 75.79540729522705 26.85136594544373, 75.81798076629639 26.851595674802315,75.80278873443604 26.863847231536703))')); 

那麼是應該工作。