2011-10-16 28 views
3

我一直在使用MBRWithin函數很多次。突然我注意到谷歌地圖POINT(101.11857 4.34475)已經離開了我指定的地理圍欄,但是它仍然給出了一個值爲1的任何理由或調整需要完成?MBR在mysql中不準確

SELECT MBRWithin(GeomFromText('POINT(101.11857 4.34475)'),GeomFromText('POLYGON((101.12112522125244 4.3531723687957164,101.11846446990967 4.351417913665312,101.13138198852539 4.336397898951581,101.13477230072021 4.33211863778494,101.14065170288086 4.321933898868271,101.14992141723633 4.306699328215635,101.15455627441406 4.30978050198082,101.1397933959961 4.334600612212089,101.12112522125244 4.3531723687957164,101.12112522125244 4.3531723687957164))')) As geoFenceStatus

回答

1

MBRWithin()將根據最小邊界矩形返回結果的它的參數。你的多邊形包含比點更大和更小的兩個座標值,所以它將在多邊形的MBR內。

MySQL在多邊形算法中沒有內置點,因此您必須自己推出或在別處找到一個。 This one似乎是一個很好的候選人。

+0

那麼準確的解決方案是說這個點是否在多邊形中?因爲當我繪製地圖時,這兩點都不在地理圍欄之內,所以解決方案是什麼? – newbie14

+0

我也嘗試MBRContains它給了我相同的結果。 – newbie14

+0

@ newbie14:所有MBR函數都使用最小的邊界矩形,而不是實際的多邊形數據。我用一個值得檢查的鏈接更新了我的答案。 – Kaivosukeltaja

6

MySQL 5.6.1及更高版本除具有僅對MBR進行操作的早期功能外,還具有精確幾何算法。您可以使用ST_WITHIN而不是MBR_WITHIN。請參閱documentation。像這樣

SELECT ST_Within(GeomFromText('POINT(101.11857 4.34475)'), 
    GeomFromText('POLYGON((101.12112522125244 4.3531723687957164,101.11846446990967 
    4.351417913665312,101.13138198852539 4.336397898951581,101.13477230072021 
    4.33211863778494,101.14065170288086 4.321933898868271,101.14992141723633 
    4.306699328215635,101.15455627441406 4.30978050198082,101.1397933959961 
    4.334600612212089,101.12112522125244 4.3531723687957164,101.12112522125244 
    4.3531723687957164))')) As geoFenceStatus 
+0

馬克感謝您的信息。目前的問題是,我們在centos上運行5.0.77,根據centos傢伙在每次安裝時穩定,並且不建議升級到更高版本。那麼你對此有何看法?謝謝。 – newbie14

+0

嗨馬克任何建議centos問題? – newbie14

+0

如果你不能使用更高版本的MySQL,你將不得不使用Kaivosukeltaja的答案 – MarkJ