找到lats / lngs的平均值(中心)

我正在动态地将几个点绘制到谷歌地图上。 我正在努力寻找找到给定点中心的最佳方法。 我尝试过使用以下内容:

var mapArray = new Array; mapArray[0] = new Array(42, 35.391228, -119.008401); mapArray[1] = new Array(34, 33.874277, -118.131555); mapArray[2] = new Array(214, 32.6922592, -115.4962203); mapArray[3] = new Array(216, 33.3818875, -117.2449785); mapArray[4] = new Array(40, 36.805231, -119.770192); mapArray[5] = new Array(47, 37.638266, -122.117398); mapArray[6] = new Array(218, 37.638266, -122.117398); mapArray[7] = new Array(39, 33.70677, -116.241719); mapArray[8] = new Array(219, 33.666489, -117.30137); mapArray[9] = new Array(37, 34.0625743, -118.354077); mapArray[10] = new Array(217, 34.0625743, -118.354077); mapArray[11] = new Array(43, 34.195561, -119.179495); mapArray[12] = new Array(220, 37.671111, -121.873443); mapArray[13] = new Array(215, 33.736294, -116.405587); mapArray[14] = new Array(35, 33.978778, -117.383186); mapArray[15] = new Array(36, 32.8321559, -117.1264585); mapArray[16] = new Array(46, 37.312298, -121.930904); mapArray[17] = new Array(221, 1, 1); mapArray[18] = new Array(41, 33.7453974, -117.8502537); mapArray[19] = new Array(44, 34.426024, -119.697417); mapArray[20] = new Array(45, 34.952801, -120.440045); mapArray[21] = new Array(38, 34.199697, -118.571618); var avgLat = 0; var avgLng = 0; var j = 0; for (var i in mapArray) { avgLat = (avgLat + mapArray[i][1]); avgLng = (avgLng + mapArray[i][2]); j++; } avgLat = avgLat / j; avgLng = avgLng / j; map.setCenter(new GLatLng(avgLat, avgLng), 6); 

但这并没有给我一个准确的中心。 动态绘制地图中心的最佳方法是什么?

找到lat和long的最大值和最小值,然后以(max-min)/ 2为中心。

那应该是(max + min)/ 2,平均值。

请注意,您已计算出质心 ,其中地理位置称为地理中心。

如果你没有一个定义良好的形状,因为它是一个平均值,这并没有真正起作用,所以你可以在一个区域中有一组点,使中心偏向它们。

相反,您可以找到最大和最小纬度和经度,并将每个中点作为新坐标。

您还可以做一些更复杂的事情,并尝试了解这些点所追踪的区域是什么样的。 我没有一个好的算法,但想法是删除“太近”的点,其中“close”由点之间的距离定义。 一旦你削减了一些集群,就可以使用质心方法获得更好的结果。

Stever我看到了你的形象并遇到了同样的问题。 为了解决这个问题,我所做的是将第一个点的值分配给最小值和最大值。

这是代码,您可以查看它。 注意:“Point”是我用来存储lat和lng值的结构。

  x = 0; y = 0; Point point; if (points.Count.Equals(0)) return; Double minLat = points[0].lat, maxLat = points[0].lat; Double minLng = points[0].lng, maxLng = points[0].lng; for (int index = 1, count = points.Count; index < count; index++) { point = points[index]; if (minLat > point.lat) minLat = point.lat; if (maxLat < point.lat) maxLat = point.lat; if (minLng > point.lng) minLng = point.lng; if (maxLng < point.lng) maxLng = point.lng; } x = (minLat + maxLat) / 2; y = (minLng + maxLng) / 2;