因此,我在 Javascript 中使用 google.maps.geometry.spherical.computeDistanceBetween,并在 Java 中使用来自 SphericalUtil 的computeDistanceBetween。
对于相同的位置,我得到不同的距离。我可以做些什么来将它们校准为相同的,或者我可以使用两个库可以在前端(Javascript)和后端(Java)中获得类似的结果吗?
下面是一些值和示例:
在 JavaScript 中:
var from = new google.maps.LatLng(33.44138, -111.97500000000002);
var to = new google.maps.LatLng(33.505904166596224, -112.09470748901367);
var distanceBetween = google.maps.geometry.spherical.computeDistanceBetween(from, to);
console.log(distanceBetween);
在 Java 中:
LatLng from = new LatLng(Float.parseFloat("33.44138"), Float.parseFloat("-111.97500000000002"));
LatLng to = new LatLng(Float.parseFloat("33.505904166596224"), Float.parseFloat("-112.09470748901367"));
double distanceBetween = SphericalUtil.computeDistanceBetween(from, to);
System.out.println(distanceBetween);
在 Java 中使用 Double 而不是 Float:
LatLng from = new LatLng(Double.parseDouble("33.44138"), Double.parseDouble("-111.97500000000002"));
LatLng to = new LatLng(Double.parseDouble("33.505904166596224"), Double.parseDouble("-112.09470748901367"));
double distanceBetween = SphericalUtil.computeDistanceBetween(from, to);
System.out.println(distanceBetween);
Javascript 值为:13234.355969270651 Java(浮点)值为:13219.474110913057 Java( double )值为:13219.565680296535
谢谢!
最佳答案
检查文档以了解所使用的地球半径值。
尝试使用此代码将结果与其他 2 个代码进行比较。
Tier3Toolbox.EARTH_RADIUS = 6378137; /* Equitorial Radius instead of 6371000 */
Tier3Toolbox.toRad =
function (num) {
return num * Math.PI / 180;
};
Tier3Toolbox.calculateDistance =
function(lat1, lon1, lat2, lon2){
var dLat = this.toRad(lat2 - lat1);
var dLon = this.toRad(lon2 - lon1);
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(this.toRad(lat1)) *
Math.cos(this.toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
var distance = this.EARTH_RADIUS * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return distance;
}
关于javascript - 计算 Java 与 Javascript 之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47946599/