这是一个出租车应用程序,它获取客户的位置(纬度,经度(并计算每个出租车司机与客户之间的行驶距离,以便知道哪个出租车司机离客户更近。
我将出租车司机的所有位置存储在网络数据库中。并且我已经搜索了采用 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;
}
}