簡體   English   中英

MySQL地理空間搜索返回奇怪的結果

[英]Mysql Geo Spatial Search returns strange results

我目前正在嘗試在Mysql和PHP中設置空間搜索。 為此,我使用在以下鏈接中找到的Haversin公式:

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

目前出於測試目的,我使用直接查詢(當然是最慢的方法),但它的行為確實很奇怪。

從我的一個數據庫條目中,我復制了緯度和經度信息,並將其用於測試目的,但是仍然返回空結果。 因此,我刪除了hading語句,以查看實際結果是我的圖像出現了什么距離,而從中獲取坐標的數據庫條目為4098.9334608610825。

我使用的是幻燈片的幻燈片中幻燈片8上顯示的確切公式(當然,我將字段名和表名調整為我的數據庫),但我一直在得到這些奇怪的結果。

有什么想法或建議可以解決這個問題嗎? 或者,如果有的話,也許還有更好的方法來進行空間搜索,請讓我知道(暫時不使用獅身人面像,因為由於我不是所有者,目前無法在服務器上安裝類似的東西)

在此處輸入圖片說明

在這里您可以看到帶有我的結果的圖片。 第一個結果是我從中獲取坐標的數據庫條目。

提前致謝。

嘗試

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

認為我寫得正確

嘗試使用其他版本的球面余弦定律公式。 這是MySQL的:

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

然后,您可以將這些度數轉換為km。 乘以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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM