Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得两个位置之间的精确或(接近精确)距离?Mysql/PHP_Mysql_Geocoding - Fatal编程技术网

如何获得两个位置之间的精确或(接近精确)距离?Mysql/PHP

如何获得两个位置之间的精确或(接近精确)距离?Mysql/PHP,mysql,geocoding,Mysql,Geocoding,选择邮政编码、lat、lng、, 截断 德雷萨科斯 辛辣板 * sin弧度“$纬度” + 斜角板条 * cos弧度“$纬度” * cos弧度-“.$经度” * 69.172, 2 作为距离 从myData 此查询以英里为单位计算距离。但当我在谷歌地图上检查相同纬度和经度的距离时,我的结果并不匹配。如果距离在10英里左右,那么我的结果有点准确,但在这一点上会出错。例如,对于相同的邮政编码值,我的结果显示为13英里,谷歌显示为22英里 我是从你那里得到这个问题的 我怎样才能得到准确的答案呢

选择邮政编码、lat、lng、, 截断 德雷萨科斯 辛辣板 * sin弧度“$纬度” + 斜角板条 * cos弧度“$纬度” * cos弧度-“.$经度” * 69.172, 2 作为距离 从myData 此查询以英里为单位计算距离。但当我在谷歌地图上检查相同纬度和经度的距离时,我的结果并不匹配。如果距离在10英里左右,那么我的结果有点准确,但在这一点上会出错。例如,对于相同的邮政编码值,我的结果显示为13英里,谷歌显示为22英里

我是从你那里得到这个问题的

我怎样才能得到准确的答案呢。有什么想法吗? 谢谢你的帮助

更新

我尝试了PHP中的@Blixt代码。提取了2个样本邮政编码及其lats长度

//B28 9ET
$lat1 = 52.418819;
$long1 = -1.8481053;

//CV5 8BX
$lat2 = 52.4125573;
$long2 = -1.5407743;

$dtr = M_PI / 180;
$latA = $lat1 * $dtr;
$lonA = $long1 * $dtr;
$latB = $lat2 * $dtr;
$lonB = $long2 * $dtr;
$EarthRadius = 3958.76; //miles
echo $distance = $EarthRadius * acos(cos($latA) * cos($latB) * cos($lonB - $lonA) + sin($latA) * sin($latB));
结果:

我的应用程序-12.95英里

谷歌-17.8英里

有什么好办法吗?

看看。当我将它与其他各种测量服务进行测试时,它似乎得到了相同的结果。它是C,但数学应该很容易转换

以下是相关内容:

public const double EarthRadius = 6371.0072; // Kilometers
//public const double EarthRadius = 3958.76; // Miles

/* ... */

const double dtr = Math.PI / 180;
double latA = this.Latitude * dtr;
double lonA = this.Longitude * dtr;
double latB = other.Latitude * dtr;
double lonB = other.Longitude * dtr;

return GpsLocation.EarthRadius * Math.Acos(Math.Cos(latA) * Math.Cos(latB) * Math.Cos(lonB - lonA) + Math.Sin(latA) * Math.Sin(latB));

注:地球不是完美的球形,因此使用的常数可能不同。要使测量结果真正准确,没有简单的方法。请参阅。

谢谢您的回复,Blix//B28 9ET$lat1=52.418819$long1=-1.8481053//CV5 8BX$lat2=52.4125573$long2=-1.5407743$dtr=M_-PI/180$latA=$lat1*$dtr$lonA=$long1*$dtr$latB=$lat2*$dtr$lonB=$long2*$dtr$地球半径=3958.76//英里回声$distance=$EarthRadius*acoscos$latA*cos$latB*cos$lonB-$lonA+sin$latA*sin$latB;结果:我的应用程序=12.95英里谷歌=17.8英里-:-@Blixt-你可以在你的应用程序中检查上述值吗?如果是,你能告诉我你得到了什么值吗?我已经检查过了,我得到了与你相同的值,我用互联网上的一些其他服务验证了它,他们也返回了相同的值。你是如何用谷歌地图检查距离的?现在,我甚至在谷歌地图中的地图上放了两个坐标,并使用“我的地图”功能在两点之间拖出一条线,果然,它显示了约13英里。因此,错误可能在于如何使用Google.hmm测量距离。。这是谷歌地图获取方向。你确定谷歌在计算距离时没有考虑道路之类的东西吗?嗯。。可能是因为这个。我使用谷歌地图上的“获取方向”功能进行了检查。有没有什么公式可以让你得到与谷歌相似的东西?没有任何公式可以把道路考虑进去,除了某种平均的鸟距/驾驶距离比率,这种比率在99%的情况下都是错误的。在这种情况下,您需要使用API来获取道路距离。看看谷歌地图API: