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


Select records with closest Longitude and Latitude

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

表名: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。

使用毕达哥拉斯来获取它们与你的坐标之间的距离。

如果你的坐标是5,15(为了方便争论),并且你的类中的第一个存储是10,20。你可以使用;

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

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

抱歉,这个答案有点粗糙。

现在你的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替换为你想要的点的lat/lng距离。使用这些值来决定适合您的应用程序的数字。