Php 从给定阵列lat long获取最近的lat long约25 km

Php 从给定阵列lat long获取最近的lat long约25 km,php,google-maps,map,Php,Google Maps,Map,我有一个lat long的数组: var locationList = new Array( '23.2531803, 72.4774396', '22.808782, 70.823863', '24.3310019, 72.8516531', '22.3073095, 73.1810976', '22.3038945, 70.8021599', '23.850809, 72.114838' ); 我想得到距离第一个给定阵列最近的距离,大约25公里的纬度,即23.2531803,72.4774

我有一个lat long的
数组

var locationList = new Array( '23.2531803, 72.4774396', '22.808782, 70.823863', '24.3310019, 72.8516531', '22.3073095, 73.1810976', '22.3038945, 70.8021599', '23.850809, 72.114838' );
我想得到距离第一个给定阵列最近的距离,大约25公里的纬度,即
23.2531803,72.4774396

是否计算了距离给定阵列最近的25 km lat长度

NOTE: for some reason i can not use sql query, because i get lat long from given address 

步骤1:计算起点坐标和每个子坐标之间的距离 步骤2:选择最小距离 步骤3:是否小于25公里?成功

如何计算两个坐标之间的距离:

function distance($lat1, $lon1, $lat2, $lon2) {

$D = 6371; // Earth Radius
$dLat = $lat2-$lat1;
$dLon = $lon2-$lon1;

$a = sin($dLat/2) * sin($dLat/2) +
     sin($dLon/2) * sin($dLon/2) * cos($lat1) * cos($lat2); 

$b = 2 * atan2(sqrt($a), sqrt(1-$a)); 
$c = 2 * atan2(sqrt($a), sqrt(1-$a)); 


return $D * $c;

}

此函数将地球视为一个完美的球体,但事实并非如此——微小的变化确实适用,但在您想要的25公里直径处可以忽略。

步骤1:计算起点坐标和每个次坐标之间的距离 步骤2:选择最小距离 步骤3:是否小于25公里?成功

如何计算两个坐标之间的距离:

function distance($lat1, $lon1, $lat2, $lon2) {

$D = 6371; // Earth Radius
$dLat = $lat2-$lat1;
$dLon = $lon2-$lon1;

$a = sin($dLat/2) * sin($dLat/2) +
     sin($dLon/2) * sin($dLon/2) * cos($lat1) * cos($lat2); 

$b = 2 * atan2(sqrt($a), sqrt(1-$a)); 
$c = 2 * atan2(sqrt($a), sqrt(1-$a)); 


return $D * $c;

}

该函数将地球视为一个完美的球体,但事实并非如此——微小的变化确实适用,但在您想要的25公里直径处可以忽略。

首先,您的数据阵列已满。您需要使您的数据更易于计算机读取。然后,可以使用计算到每个位置的距离。可以将第一个距离和索引保存在变量中,如果较短,则用新的距离和索引替换

var closest = {id:0,dist:-1};
var myloc = [23.2531303, 72.4774398]
for(var i = 0; i < locationList.length; i++)
{
  var long_lat = locationList[i].match(/([0-9.]+)+/)
  long_lat[0] = parseFloat(long_lat[0]);
  long_lat[1] = parseFloat(long_lat[1]);
  var dist = Math.sqrt(Math.pow(long_lat[0] - myloc[0], 2)+Math.pow(long_lat[1] - myloc[1], 2)));
  if((closest.dist == -1) || (closest.dist > dist))
  {
    closest.dist = dist;
    closest.id = i;
  }

}
var最近={id:0,dist:-1};
var myloc=[23.2531303,72.4774398]
对于(变量i=0;idist))
{
最近距离=距离;
d.id=i;
}
}

首先,您的数据数组已满。您需要使您的数据更易于计算机读取。然后,可以使用计算到每个位置的距离。可以将第一个距离和索引保存在变量中,如果较短,则用新的距离和索引替换

var closest = {id:0,dist:-1};
var myloc = [23.2531303, 72.4774398]
for(var i = 0; i < locationList.length; i++)
{
  var long_lat = locationList[i].match(/([0-9.]+)+/)
  long_lat[0] = parseFloat(long_lat[0]);
  long_lat[1] = parseFloat(long_lat[1]);
  var dist = Math.sqrt(Math.pow(long_lat[0] - myloc[0], 2)+Math.pow(long_lat[1] - myloc[1], 2)));
  if((closest.dist == -1) || (closest.dist > dist))
  {
    closest.dist = dist;
    closest.id = i;
  }

}
var最近={id:0,dist:-1};
var myloc=[23.2531303,72.4774398]
对于(变量i=0;idist))
{
最近距离=距离;
d.id=i;
}
}

当您想在JS中计算时,可以使用JS计算单点之间的距离


将结果存储在一个数组中,对数组进行排序,当最小条目为时,您可以使用JS计算单个点之间的距离


将结果存储在一个数组中,对数组进行排序,当最小的条目是locationList是一个javascript数组时,问题被标记为PHP的原因是什么?我在使用PHP,我在PHP中有地址数组,所以我正在转换为java scriptlocationList是一个javascript数组,问题被标记为PHP的原因是什么?我在使用PHP,我有php中的地址数组,所以我正在转换成java脚本,
$lat1、$lon1、$lat2、$lon2的值是多少?
?我强烈建议进行第一次“粗略”排序,以清除所有位于正方形外的数据点,源在中间。否则,您可能会使用大量的计算能力来发现某个点距离您的起点500公里。
$lat1、$lon1、$lat2、$lon2的价值是什么?
?我强烈建议您首先进行“粗略”排序,将源位于中心的正方形外的所有数据点剔除。否则,你可能会使用大量的计算能力来找出某个点距离你的起点500公里。+1,但请注意,毕达哥拉斯定理非常不精确,因为地球是球形的,而不是扁平的:)想想看,例如,你越靠近北极和南极,坐标在很短的距离内变化较快。+1,但要注意,毕达哥拉斯定理非常不精确,因为地球是球形的,而不是扁平的:)想想看,例如,你越靠近北极和南极,坐标在很短的距离内变化就越快。