2013-08-18 205 views
0

好吧,我有一個相當複雜的查詢,它查看包含一組經緯度座標(爲了便於閱讀,我用-41.000000 & 174.000000代替)的點變量是否包含在多邊形中,該多邊形是從我的名爲squares的表格(其中包含2.25米行座標代表正方形的左上角,然後通過將0.5/60添加到每個座標來創建正方形)。它使用MySQL MBRContains函數檢查是否匹配。唯一的問題是,它不工作,我只是得到這個消息:返回空結果集的MySQL空間關係查詢?

MySQL returned an empty result set (i.e. zero rows).

這裏的查詢:

SELECT `square_id` FROM `squares` WHERE 

MBRContains(
    GeomFromText(
      CONCAT(
        'POLYGON((', 
         `coord_lat`,' ',`coord_long`,',', 
         `coord_lat`,' ',(`coord_long` + (0.5/60)),',', 
         (`coord_lat` + (0.5/60)),' ',(`coord_long` + (0.5/60)),',', 
         (`coord_lat` + (0.5/60)),' ',`coord_long`, 
        '))' 
       ) 
       ), 
    GeomFromText('POINT(-41.000000 174.000000)') 
) 

任何想法,這是爲什麼?肯定有一個正方形,它包含我的點對象內的座標,並且在我的SQL語法中看不到任何明顯的錯誤。思考?

+0

你能提供的緯度/經度 – lreeder

回答

0

兩件事情會在這裏:

  1. 頂點WKT定義被定義爲(X,Y),不同於經/緯度,它被定義爲 「X,Y」。您正在使用(lat lng)構建WKT POLYGON和POINT字符串,但應使用(lng lat)。既然你對此一致,這可以在這裏工作,但可能在其他情況下破壞。

  2. 實際問題是您創建的POLYGON未關閉。當GeomFromText傳遞一個無效的WKT字符串時,MySQL安靜地返回null,所以MBRContains沒有找到任何交點。要關閉POLYGON,您需要將起點添加到多邊形字符串的末尾。試着改變你的SQL這樣的:

SELECT `square_id` FROM `squares` WHERE 
MBRContains(
    GeomFromText(
     CONCAT(
       'POLYGON((', 
        `coord_lat`,' ',`coord_long`,',', 
        `coord_lat`,' ',(`coord_long` + (0.5/60)),',', 
        (`coord_lat` + (0.5/60)),' ',(`coord_long` + (0.5/60)),',', 
        (`coord_lat` + (0.5/60)),' ',`coord_long`,',', 
        `coord_lat`,' ',`coord_long` 
       '))' 
      ) 
      ), 
    GeomFromText('POINT(-41.000000 174.000000)') 
)