选择经度和纬度最近的记录

Posted

技术标签:

【中文标题】选择经度和纬度最近的记录【英文标题】:Select records with closest Longitude and Latitude 【发布时间】:2014-08-06 06:05:41 【问题描述】:

我将经度和纬度存储在数据库中,例如

表名:km_stores 字段:store_id、store_long、store_lat、store_name

如何根据经度和纬度拉到最近的商店?

我正在使用

<script>
var x = document.getElementById("demo");

function getLocation() 
    if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(showPosition);
     else  
        x.innerhtml = "Geolocation is not supported by this browser.";
    


function showPosition(position) 
    document.getElementById("km_long").value = position.coords.latitude;
    document.getElementById("km_lat").value = position.coords.longitude;    

</script>
<strong>Long:</strong> <input type="text" id="km_long" /> <strong>Latitude:</strong> <input type="text" id="km_lat" />
[php]

global $wpdb;
$results = $wpdb->get_results('select * from km_stores', OBJECT );
foreach ($results as $store) 
            echo $store->store_name;

[/php]

[php][/php] 标签,因为我在 WordPress 页面插件中使用 PHP。

【问题讨论】:

可能重复:***.com/questions/5031268/… 【参考方案1】:

使用毕达哥拉斯来让他们远离你的坐标。

如果您的坐标是 5、15(为了参数),并且您喜欢的第一个商店是 10、20。您可以使用;

$distance = sqrt((5 - 10) * (5 - 10) + (15 - 20) * (15 - 20))

这个公式可能会给你一个负数,但如果你忽略 -,你会得到距离。

抱歉,这个回答有点粗。

【讨论】:

【参考方案2】:

现在您的 select 语句正在提取所有点,因此您需要将其限制为仅提取附近的点。最简单的方法是在数据库表中添加 lat 和 lng 值的搜索条件。

$query = 'SELECT * FROM km_stores WHERE lat BETWEEN ' . $lat - x . ' AND ' . $lat + x;
$query = $query . ' AND lng BETWEEN ' . $lng - x . ' AND ' . $lng + x;
$results = $wpdb->get_results($query, OBJECT );

这假设您定义了 $lat 和 $lng 值来表示您要搜索的点(看起来您将它们称为 km_lat 和 km_lng)。然后,您将 x 替换为您希望这些点所在的纬度/经度距离。使用这些值来确定适合您的应用程序的数字。

【讨论】:

以上是关于选择经度和纬度最近的记录的主要内容,如果未能解决你的问题,请参考以下文章

列出数组中最近的经度/纬度

查找提供的纬度和经度的最近距离记录的程序[重复]

使用经度和纬度选择半径内的对象[重复]

选择不同的经度和纬度值并找到它们的中值

使用纬度-经度返回用户位置可用的最近地点?

根据圆形范围选择纬度和经度