javascript – 找到一组latlngs的质心(简单均值)

我想使用客户端JavaScript来查找一组纬度经度(实际上是Google LatLng对象)的质心,使用简单的平均值计算.

我看到之前在Stack Overflow上已经多次询问过类似的问题,但我找不到一个简单的JavaScript答案. (这可能只是我的谷歌搜索失败,如果这是重复的道歉.)

我有类似的东西,但它不适用于平均纬度为179和-179的情况,因此质心应该是180而不是0.

var avg_lat, avg_lng;
for (var i = 0; i < google_latlngs.length; i++) { 
    avg_lat += google_latlngs[0].lat();
    avg_lng += google_latlngs[1].lng();
}
avg_lat = avg_lat / google_latlngs.length; 
avg_lng = avg_lng / google_latlngs.length; 

我需要在客户端JavaScript中有效地执行此操作,并且我的点数不可能超过几公里,因此在这种情况下,大圆距离或任何花哨都不是必需的.

谢谢你的帮助.

更新:好的,任何在JavaScript中查找质心的方法都可以.

解决方法:

如果您只处理2个点,请确保在应用函数之前,两个纬度点之间的差异小于或等于180.您可以通过添加或减去360来完成此操作,这会将-179更改为181(或179到-181).当您得到最终结果时,加/减360,直到最终值在您想要的范围内.

更新

如果你希望这个有两个以上的点,我们就必须做一些几何.我们将每个纬度点视为单位圆上的点,其距离原点和特定角度a(纬度)具有一定距离x和y:

我们必须对所有x和y进行平均,然后采用结果点的角度来获得质心的最终纬度.这是JavaScript:

var latXTotal = 0;
var latYTotal = 0;
var lonDegreesTotal = 0;

var currentLatLong;
for (var i = 0; currentLatLong = google_latlngs[i]; i++) { 
    var latDegrees = currentLatLong.lat();
    var lonDegrees = currentLatLong.lng();

    var latRadians = Math.PI * latDegrees / 180;
    latXTotal += Math.cos(latRadians);
    latYTotal += Math.sin(latRadians);

    lonDegreesTotal += lonDegrees;
}

var finalLatRadians = Math.atan2(latYTotal, latXTotal);
var finalLatDegrees = finalLatRadians * 180 / Math.PI;

var finalLonDegrees = lonDegreesTotal / google_latlngs.length;
上一篇:php – Mysql检索多边形数据


下一篇:MYSQL使用空间索引