计算给定经度和经度的两个位置之间的行驶/行驶距离(必应地图)


Calculating travel/drive distance between two locations given lat and long (Bing map)

这是一个出租车应用程序,它获取客户的位置(纬度,经度(并计算每个出租车司机与客户之间的行驶距离,以便知道哪个出租车司机离客户更近。

我将出租车司机的所有位置存储在网络数据库中。并且我已经搜索了采用 lat1,lat2 long1,long2 并以公里为单位返回距离的方法。

谷歌地图有距离矩阵API,但它禁止在不显示地图
的情况下使用它(我不需要地图,如果你知道一个可能的解决方案,我将能够使用谷歌地图服务(幸运的是,必应地图允许在不显示地图的情况下计算行驶距离!在下面的教程中: http://msdn.microsoft.com/en-us/library/gg636957.aspx

但我面临着拖曳问题:
* 它将位置作为字符串(位置名称(,我想将其作为浮点数(经度和经度(
*我不知道如何将XML与PHP一起使用(如何在PHP变量中存储行驶距离(

我已经寻找了一个星期,我将非常感谢您的帮助((

您可以使用 Google 地图地理编码 API 将位置名称转换为纬度和经度。例如

$location = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA");

文档:https://developers.google.com/maps/documentation/geocoding/

您可以使用 json_decode 将内容作为 PHP 对象进行访问。所以这应该有效:

print_r(json_decode($location));

使用上面的位置变量。纬度和隆在那里。

至于PHP中的XML:使用SimpleXMLElement可能是最简单的:http://php.net/manual/en/simplexml.examples-basic.php

顺便说一下,您不需要距离API,如果您有两个位置的纬度和经度,则可以自己计算距离。最简单的方法是简单地一个三角形和毕达哥拉斯,但由于地球是一个球体,所以并不准确。您可以复制/粘贴此代码段。我从 http://www.geodatasource.com/developers/php 那里拿走了它。

function distance($lat1, $lon1, $lat2, $lon2, $unit) {
  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) 
    * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) 
    * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);
  if ($unit == "K") {
    return ($miles * 1.609344);
  } else if ($unit == "N") {
    return ($miles * 0.8684);
  } else {
    return $miles;
  }
}