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

时间:2014-06-16 12:02:00

标签: javascript php mysql wordpress google-maps

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

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

2 个答案:

答案 0 :(得分:0)

使用毕达哥拉斯来远离坐标。

如果你的坐标是5,15(为了论证),你喜欢的第一个商店是10,20。你可以使用;

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

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

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

答案 1 :(得分:0)

现在你的选择语句正在拉入所有点,因此你想要限制它只拉动附近的点。最简单的方法是在数据库表中添加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。使用这些值来确定适用于您的应用程序的数字。