我在php / mysql中构建一个简单的小脚本来检查荷兰两个城市之间的距离。 问题是我想知道如何计算最大距离的比例。
例如,我位于Sittard,我查看附近的几个城市。
Van Sittard (51.00000000,5.86666700) naar Munstergeleen (50.98333300,5.86666700) is 1.9 KM
Van Sittard (51.00000000,5.86666700) naar Doenrade (50.96666700,5.90000000) is 4.4 KM
Van Sittard (51.00000000,5.86666700) naar Geleen (50.96666700,5.83333300) is 4.4 KM
Van Sittard (51.00000000,5.86666700) naar Nuth (50.91666700,5.88333300) is 9.3 KM
Van Sittard (51.00000000,5.86666700) naar Hoensbroek (50.91666700,5.93333300) is 10.4 KM
我知道我的位置,至少我的城市和我想去的地方。 现在我想知道怎么说10km就好了。
所以我可以做类似
的事情SELECT * FROM locations WHERE mylocation > whevereveriwantogoto AND whereeveriwanttogoto > maxmylocation ?
应该有一个简单的方法(我猜)只是在一个简单的查询中从给定的gps位置获得ma半径? 否则我需要检查数据库中的每个gps位置,看它们是否在半径范围内,然后只显示那些。 假设我的数据库中有100万个GPS位置,我的脚本被1000个人使用。
我甚至不想知道服务器的负载量是多少;)
任何人都知道一个简单的mysql查询吗?
小更新我试过这个:
$lat = $_GET['lat'];
$lng = $_GET['lng'];
$sql="SELECT *, (3959 * acos(cos(radians('".$lat."')) * cos(radians(lat)) * cos( radians(lng) - radians('".$lng."')) + sin(radians('".$lat."')) *
sin(radians(lat))))
AS distance
FROM postcode WHERE distance < 15 ORDER BY distance LIMIT 0 , 10";
$result = mysql_query($sql);
while($r = mysql_fetch_assoc($result)) {
echo $r['name'];
}
但我明白了:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 'long)附近 - 弧度('5.86666700'))+ sin(弧度('51 .00000000'))* 第1行的sin(弧度(纬度))'
我再次更新,但现在我得到了:
9061 8882 9174 6285 4931 7667 8458 7135 5534
这些邮政编码甚至不是很接近..
我在数据库中使用:lat和lng作为位置
所以问题是,我怎样才能得到它可以到达多远?在示例代码我看到'距离',但我没有那个表,我不知道为什么我需要它。距离哪里?
答案 0 :(得分:0)
修正了它!
示例:
$lat = $_GET['lat'];
$lng = $_GET['lng'];
$distance = $_GET['dist'];
$result = mysql_query("SELECT *, ( 6371 * acos( cos( radians($lat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($lng) ) + sin( radians($lat) ) * sin(radians(lat)) ) ) AS distance FROM city HAVING distance < $distance ORDER BY distance");
echo mysql_error();
while($r = mysql_fetch_assoc($result)) {
$getcityname = mysql_query("SELECT * FROM cityname WHERE city_id = '$r[id]' AND official = '1'");
while($putcityname = mysql_fetch_array($getcityname)) {
$cityname = $putcityname['name'];
}
echo $cityname;
echo "<br />";
}
答案 1 :(得分:0)
select 111.1111 *
DEGREES(
ACOS(
COS(RADIANS(lat1)) * COS(RADIANS(lat2)) * COS(RADIANS(lng1 - lng2)) +
SIN(RADIANS(lat1)) * SIN(RADIANS(lat2))
)
)