如何获取当前用户的经纬度并计算与位置B的距离?
How to get current user latitude and longitude and calculate distance with location B?
我可以知道如何获取当前用户位置并计算位置 B 之间的公里距离吗?
我尝试了以下代码,但似乎不起作用。
<?php
echo "<script type = 'text/javascript'>
function showPosition(){
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
});
} else {
alert(\"Sorry, your browser does not support HTML5 geolocation.\");
}
}
</script>";
$point1 = array("lat" => $latitude, "long" => $longitude);
$point2 = array("lat" => $row_Merchant['latitude'], "long" => $row_Merchant['longitude']);
$km = distanceCalculation($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); // Calculate distance in kilometres (default)
echo "$km km";
?>
<?php
function distanceCalculation($point1_lat, $point1_long, $point2_lat, $point2_long, $unit = 'km', $decimals = 2)
{
// Calculate the distance in degrees
$degrees = rad2deg(acos((sin(deg2rad($point1_lat)) * sin(deg2rad($point2_lat))) + (cos(deg2rad($point1_lat)) * cos(deg2rad($point2_lat)) * cos(deg2rad($point1_long - $point2_long)))));
// Convert the distance in degrees to the chosen unit (kilometres, miles or nautical miles)
switch ($unit) {
case 'km':
$distance = $degrees * 111.13384; // 1 degree = 111.13384 km, based on the average diameter of the Earth (12,735 km)
break;
case 'mi':
$distance = $degrees * 69.05482; // 1 degree = 69.05482 miles, based on the average diameter of the Earth (7,913.1 miles)
break;
case 'nmi':
$distance = $degrees * 59.97662; // 1 degree = 59.97662 nautic miles, based on the average diameter of the Earth (6,876.3 nautical miles)
}
return round($distance, $decimals);
}
?>
如何在 $point1 = array("lat" => $latitude, "long" => $longitude); 中传入经纬度值?以便我可以计算用户位置和 lcoation B 之间的距离?
请帮忙。谢谢。
Eddy 目前您正计划将 javascript 变量分配给 PHP 变量,这不是 Client-side 中的正确方法,另一个是 Server-side ].
Reference.
我已更改您的代码以查找用户位置与商家位置之间的距离。
<script type = 'text/javascript'>
function distance(lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var radlon1 = Math.PI * lon1/180;
var radlon2 = Math.PI * lon2/180;
var theta = lon1-lon2;
var radtheta = Math.PI * theta/180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = dist * 180/Math.PI;
dist = dist * 60 * 1.1515;
if (unit=="K") { dist = dist * 1.609344; }
if (unit=="N") { dist = dist * 0.8684; }
return dist;
}
function showPosition(dest_lon, dest_lat){
if(navigator.geolocation) {
console.log('hhhh');
navigator.geolocation.getCurrentPosition(function(position){
latitude = position.coords.latitude;
longitude = position.coords.longitude;
console.log(latitude+','+longitude+','+ dest_lat+','+ dest_lon);
dist = distance(latitude, longitude, dest_lat, dest_lon, 'K');
console.log(dist); //final distance present in dist variable
});
} else {
alert("Sorry, your browser does not support HTML5 geolocation.");
}
}
var merch_longitude = 47.683277;
var merch_latitude = 3.210482;
showPosition(merch_longitude, merch_longitude);
</script>
在上面的代码中,您会将数据库值传递给 merch_longitude
和 merch_latitude
,目前它是硬编码的。我们将使用 Javascript 的地理定位获取用户的当前位置,然后 showPosition()
将计算距离。
距离函数有 5 个参数 lat1, long1, lat2, long2, unit。
默认单位是英里,KM可以传K,NM可以传N。
我可以知道如何获取当前用户位置并计算位置 B 之间的公里距离吗?
我尝试了以下代码,但似乎不起作用。
<?php
echo "<script type = 'text/javascript'>
function showPosition(){
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position){
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
});
} else {
alert(\"Sorry, your browser does not support HTML5 geolocation.\");
}
}
</script>";
$point1 = array("lat" => $latitude, "long" => $longitude);
$point2 = array("lat" => $row_Merchant['latitude'], "long" => $row_Merchant['longitude']);
$km = distanceCalculation($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); // Calculate distance in kilometres (default)
echo "$km km";
?>
<?php
function distanceCalculation($point1_lat, $point1_long, $point2_lat, $point2_long, $unit = 'km', $decimals = 2)
{
// Calculate the distance in degrees
$degrees = rad2deg(acos((sin(deg2rad($point1_lat)) * sin(deg2rad($point2_lat))) + (cos(deg2rad($point1_lat)) * cos(deg2rad($point2_lat)) * cos(deg2rad($point1_long - $point2_long)))));
// Convert the distance in degrees to the chosen unit (kilometres, miles or nautical miles)
switch ($unit) {
case 'km':
$distance = $degrees * 111.13384; // 1 degree = 111.13384 km, based on the average diameter of the Earth (12,735 km)
break;
case 'mi':
$distance = $degrees * 69.05482; // 1 degree = 69.05482 miles, based on the average diameter of the Earth (7,913.1 miles)
break;
case 'nmi':
$distance = $degrees * 59.97662; // 1 degree = 59.97662 nautic miles, based on the average diameter of the Earth (6,876.3 nautical miles)
}
return round($distance, $decimals);
}
?>
如何在 $point1 = array("lat" => $latitude, "long" => $longitude); 中传入经纬度值?以便我可以计算用户位置和 lcoation B 之间的距离?
请帮忙。谢谢。
Eddy 目前您正计划将 javascript 变量分配给 PHP 变量,这不是 Client-side 中的正确方法,另一个是 Server-side ]. Reference.
我已更改您的代码以查找用户位置与商家位置之间的距离。
<script type = 'text/javascript'>
function distance(lat1, lon1, lat2, lon2, unit) {
var radlat1 = Math.PI * lat1/180;
var radlat2 = Math.PI * lat2/180;
var radlon1 = Math.PI * lon1/180;
var radlon2 = Math.PI * lon2/180;
var theta = lon1-lon2;
var radtheta = Math.PI * theta/180;
var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
dist = Math.acos(dist);
dist = dist * 180/Math.PI;
dist = dist * 60 * 1.1515;
if (unit=="K") { dist = dist * 1.609344; }
if (unit=="N") { dist = dist * 0.8684; }
return dist;
}
function showPosition(dest_lon, dest_lat){
if(navigator.geolocation) {
console.log('hhhh');
navigator.geolocation.getCurrentPosition(function(position){
latitude = position.coords.latitude;
longitude = position.coords.longitude;
console.log(latitude+','+longitude+','+ dest_lat+','+ dest_lon);
dist = distance(latitude, longitude, dest_lat, dest_lon, 'K');
console.log(dist); //final distance present in dist variable
});
} else {
alert("Sorry, your browser does not support HTML5 geolocation.");
}
}
var merch_longitude = 47.683277;
var merch_latitude = 3.210482;
showPosition(merch_longitude, merch_longitude);
</script>
在上面的代码中,您会将数据库值传递给 merch_longitude
和 merch_latitude
,目前它是硬编码的。我们将使用 Javascript 的地理定位获取用户的当前位置,然后 showPosition()
将计算距离。
距离函数有 5 个参数 lat1, long1, lat2, long2, unit。
默认单位是英里,KM可以传K,NM可以传N。