2011-07-10 93 views
2

在mysql數據庫中,我有地理區域表,其中每行都有一個id和一組多邊形頂點的座標(lat,long)拼成的面積(可頂點的數量不受限制),並標記爲這樣:從mysql數據庫中選擇一行,根據lat,多邊形的長座標

id |    poly_coords    | marker 
------|--------------------------------------|------------- 
    0 | x1,y1|x2,y2|x3,y3|x4,y4|x4,y4|x4,y4| |  0 
---------------------------------------------|------------- 
    1 | x1,y1|x2,y2|x3,y3|x4,y4|x4,y4|x4,y4| |  0 
---------------------------------------------|------------- 
    .      .       . 
    .      .       . 
    .      .       . 

我所試圖做的是當給出了具體的X,Y座標:

  1. 如果marker == 0 我需要選擇其中給定X,Y座標的行落在多邊形內或者X,Y座標在多邊形的一定距離內。

  2. 如果marker == 1 頂點是一條線上的點(即poly = 0的區域),並且我需要選擇其中X,Y座標位於該線的特定距離內的行。

我不知道如何從這裏開始。我如何使用MySql查詢來完成此操作?我應該使用其他方法結合多個查詢來完成這項工作嗎?

+0

重新正常化的選項?因此,你將不得不解析每個coor集合,並在可能的過程中進行一些數學運算。 – Randy

+0

@Randy:不確定你的意思是重新正常化?你能解釋一下嗎? – Derek

+0

空間擴展也可能有用(正常化後):http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html –

回答

1

你可以看看這個鏈接:http://www.sql-statements.com/point-in-polygon.html 它應該提供一個基本的開始接近你的問題。 我將首先創建一個存儲過程,用於在每個代表「x,y」(或「x | y」,如果考慮使用0,0作爲座標值而不是0.0)的字符串數組中轉換poly_coords列。之後,您可以對鏈接中提供的方法進行一些更改以實現所需的功能。我會提供更多幫助,但我沒有訪問MySql和其他SQL。 另一種方法是設計表中的鏈接,這樣你就不需要實際解析座標串

相關問題