选择经度和纬度最近的记录
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 替换为您希望这些点所在的纬度/经度距离。使用这些值来确定适合您的应用程序的数字。
【讨论】:
以上是关于选择经度和纬度最近的记录的主要内容,如果未能解决你的问题,请参考以下文章