2014-11-06 62 views
0

我目前正在嘗試在Mysql和PHP中設置空間搜索。爲此,我使用haversin公式,我在下面的鏈接中找到:Mysql Geo空間搜索返回奇怪的結果

http://www.notaires.fr/sites/default/files/geo_searchjkkjkj_0.pdf

在用於測試目的,我用的是直接查詢(當然是最慢的方法)的時刻,但它的行爲真的很奇怪。

從我的數據庫條目之一,我複製的經度和緯度信息,並將其用於測試目的,但我仍然得到一個空的結果返回。所以我刪除了有聲明以查看我的圖像實際上出現了多少距離,對於我從中獲取座標的數據庫條目,它的值爲4098.9334608610825。

我使用的是幻燈片8中所示的精確公式中的鏈接的PowerPoint演示(當然我適應字段名和表名,以我的數據庫),但我只是不斷得到這些奇怪的結果。

任何想法或建議,我該如何解決這個問題?或者,也許還有更好的方法來做空間搜索,如果是這樣,請讓我知道(現在只是不是獅身人面像,因爲我不能在我的服務器上安裝這樣的東西,因爲我不是所有者)

enter image description here

在這裏你可以看到圖片和我的結果。第一個結果是我從中獲取座標的數據庫條目。

在此先感謝。

回答

0

嘗試

select (acos(sin(radians(@orig_lat)) * sin(radians(latitude)) + cos(radians(@orig_lat)) * cos(radians(latitude)) * cos(radians(longitude) - radians(@orig_lon))) * 6378) as dist 

想我所著它正確

+0

感謝您的快速回復。其實這個方法返回的6608.442268294232一個DIST: - /我不知道發生了什麼事情錯了:-( – Velixir 2014-11-06 13:03:25

+0

這個公式對我的作品,可以在以下網址進行檢查的例子:http://www.suhogar.info/residencias/ 4-303 /阿爾梅里亞/阿爾梅里亞難道是orig_lat的不正確的值或orig_lan什麼可能會導致錯誤 – sergio0983 2014-11-06 13:31:08

+0

orig_lat:135.674151 orig_long:34.833236 這是我使用orig_lat和orig_long它的格式爲座標的iOS應用程序支持我的Rest api來存儲它 – Velixir 2014-11-06 13:34:23

0

嘗試使用不同版本的球面餘弦法訣。這是MySQL的:

DEGREES(ACOS(COS(RADIANS(lat1)) 
      * COS(RADIANS(lat2)) 
      * COS(RADIANS(long1 - long2)) 
      + SIN(RADIANS(lat1)) 
      * SIN(RADIANS(lat2)))) AS distance_in_degrees 

然後,您可以將這些度數轉換爲公里。乘以111.045來做到這一點。

如果你需要一個更穩定的數字版本的大圓距離計算的(你可能沒有),嘗試Vincenty公式:

DEGREES(
    ATAN2(
    SQRT(
    POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) + 
    POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) - 
     (SIN(RADIANS(lat1))*COS(RADIANS(lat2)) * 
      COS(RADIANS(lon2-lon1))) ,2)), 
    SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) + 
    COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1)))) 

它也返回度的距離。

這種材料是寫在這裏了。 http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/

+0

非常感謝:-) 我試過了,但以千米爲單位的結果仍然是6592.286252411423,即使是我使用經度和緯度的條目: - /存儲的座標以iOS給出的格式存儲如果您使用CLLocationManager,那麼對於我的條目,我會嘗試這樣做: latitude:135.674151 longitude:34.833236 如果這有什麼幫助 – Velixir 2014-11-06 13:27:08