簡體   English   中英

MySQL - 從數據庫中查找半徑內的點

[英]MySQL - Find points within radius from database

我有一個表有一個POINT列,其中包含各個位置的緯度和經度。

然后我還在瀏覽器中有一個來自地理位置的用戶位置。

我需要做的是找到表中所有記錄的所有記錄,其中POINT值在半徑10公里(或半徑X公里)內,按距離最近的第一個排序。

我的表在POINT列上有一個SPATIAL索引。

我正在開展一個項目,我正在計算多個地點之間的距離。 我正在使用以下查詢來選擇給定半徑內的object_id。

SELECT id, 
( 6371 * 
    ACOS( 
        COS( RADIANS( db_latitude ) ) * 
        COS( RADIANS( $user_latitude ) ) * 
        COS( RADIANS( $user_longitude ) - 
        RADIANS( db_longitude ) ) + 
        SIN( RADIANS( db_latitude ) ) * 
        SIN( RADIANS( $user_latitude) ) 
    ) 
) 
AS distance FROM the_table HAVING distance <= $the_radius ORDER BY distance ASC"

我無法解釋ACOS配方本身,因為我從研究中得到了它。

db_latitude = database latitude field
db_longitude = database longitude field
$user_latitude = browser latitude coördinate
$user_longitude = browser longitude coördinate
$the_radius = the radius that you want to search in

這是公里。

下面的查詢實際上對我有用:

$query = "SELECT *,
    ( 6371 * 
    acos( 
    cos( radians( ".$user_lat." ) ) * 
      cos( radians( lat ) ) * 
      cos( radians( lng ) - 
      radians( ".$user_lng." ) ) + 
        sin( radians( ".$user_lat." ) ) * 
          sin( radians( lat ) ) ) ) 
          AS distance FROM parkings 
          HAVING distance <= ".$radius." ORDER BY distance ASC";

  $stmt = $conn->execute($query);

  $rows = $stmt->fetchAll('assoc');

其中:$ user_lat和$ user_lng是瀏覽器的lat和lng,$ radius = 10,表名是停車

可能對您有所幫助, https://ru.scribd.com/presentation/2569355/Geo-Distance-Search-with-MySQL

對於Django我使用它

    dist = 20 #дистанция 20 км
    mylon = 51.5289156201 # долгота центра
    mylat = 46.0209384922 # широта 
    lon1 = mylon-dist/abs(math.cos(math.radians(mylat))*111.0) # 1 градус широты = 111 км
    lon2 = mylon+dist/abs(math.cos(math.radians(mylat))*111.0)
    lat1 = mylat-(dist/111.0)
    lat2 = mylat+(dist/111.0)
    profiles = UserProfile.objects.filter(lat__range=(lat1, lat2)).filter(lon__range=(lon1, lon2))

它搜索20平方公里的所有用戶。

暫無
暫無

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

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