我有一组GEPONITES,希望找到LAT/Lon中心,并且包括所有这些GEPONITES(它们在MVIEW中都是可见的)。
在平面地图上,这相当简单,找到最高和最低的x/y值,通过将绝对距离的一半加上较低的值来找到中心。
但是对于球面世界地图来说,最大/最小值-180/+180和+90/-90是如何做到的呢?
我要做的是:

public void zoomToGeoPoints(GeoPoint... geoPoint) {

    MapController mc = getController();
    if (geoPoint == null) {
        Log.w(TAG, "No geopoints passed, doing nothing!");
        return;
    }

    // Set inverse max/min start values
    int maxLat = (int) (-90 * 1E6);
    int maxLon = (int) (-180 * 1E6);
    int minLat = (int) (90 * 1E6);
    int minLon = (int) (180 * 1E6);

    // Find the max/min values
    for (GeoPoint gp : geoPoint) {
        maxLat = Math.max(maxLat, gp.getLatitudeE6());
        maxLon = Math.max(maxLon, gp.getLongitudeE6());
        minLat = Math.min(minLat, gp.getLatitudeE6());
        minLon = Math.min(minLon, gp.getLongitudeE6());
    }

    // Find the spans and center point
    double spanLat = Math.abs(maxLat - minLat);
    double spanLon = Math.abs(maxLon - minLon);

    int centerLat = (int) ((minLat + spanLat / 2d));
    int centerLon = (int) ((minLon + spanLon / 2d));

    GeoPoint center = new GeoPoint(centerLat, centerLon);

    // Pan to center
    mc.animateTo(center);

    // Zoom to include all GeoPoints
    mc.zoomToSpan((int)(spanLat), (int)(spanLon));

最佳答案

未经测试,使用javascript中的maps api计算所需的最小边界框:

// points[] is your array of geo points
var boundbox = new map.LatLngBounds();
for (var i=0; i<points.length; i++){
  boundbox.extend(points[i]);
}
var center = boundbox.getCenter();

09-04 03:26