查找具有纬度和经度的记录[重复]

Posted

技术标签:

【中文标题】查找具有纬度和经度的记录[重复]【英文标题】:find records with latitude and longitude [duplicate] 【发布时间】:2012-07-15 04:36:40 【问题描述】:

可能重复:Fastest Way to Find Distance Between Two Lat/Long Points

我有位置表,其中包含所有位置及其纬度和经度值。我正在获取特定的位置。登录。和半径。现在,我想找到这个半径内和给定纬度的所有记录。并且很长。价值观。我正在使用以下查询。但我不确定它是否给了我正确的结果。

从给定的 lat 和 long 我发现 lat.min 和 max 为 -

$lng_min = $longitude - $radius / abs(cos(deg2rad($latitude)) * 69);
$lng_max = $longitude + $radius / abs(cos(deg2rad($latitude)) * 69);
$lat_min = $latitude - ($radius / 69);
$lat_max = $latitude + ($radius / 69);

然后使用以下查询 -

SELECT * FROM  merchant_branches,locations 
where locations."coorX" BETWEEN $lng_min AND $lng_max 
AND  
locations."coorY" BETWEEN $lat_min AND $lat_max 
and merchant_branches.location_id = locations.id

其中location id 是merchant_brach 表中的外键。

我对我得到的结果感到困惑。请帮帮我。

【问题讨论】:

【参考方案1】:

你必须使用这样的东西来获得离给定位置最近的结果

$query = sprintf(
         "SELECT foo,
                  6371 * ACOS( Cos(RADIANS(lat)) * COS(RADIANS(%f))
                      * COS(RADIANS(%f) - RADIANS(lng)) + SIN(RADIANS(lat))
                      * SIN(RADIANS(%f)) ) * 1000 AS distance
            FROM `%s`
        ORDER BY distance",
        $lat, $lag, $lng, $table
    );

您必须根据您的表结构设置$lat$lng$table,并且可能对结果设置限制。

您可以在这里Geo Distance Search with mysql获得详细解释。

【讨论】:

以上是关于查找具有纬度和经度的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用纬度和经度查找用户位置的名称[重复]

在Android中查找当前位置的纬度和经度[重复]

Node.js:查找附近的事件 [重复]

MySQL计算纬度和经度半径[重复]

计算给定2点,纬度和经度的距离[重复]

使用java程序查找具有指定半径的给定纬度和经度(即位置)的周围纬度和纬度值