2016-09-22 8 views
0

Ich möchte den Radius in Meter oder km entsprechend der Zoomstufe berechnen.Radius durch Zoomstufe ändern

ich diese Formel gefunden habe -, die mir die grob berechneten Meter pro Pixel ergibt: https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

Auch mir diese Links unterstützt zu verstehen, was ich genau zu erreichen versuchte: google map API zoom range How to get center of map for v2 android maps?

und dies ist die Umsetzung:

double calculateScale(float zoomLevel, LatLng centerPos){ 
    double meters_per_pixel = 156543.03392 * Math.cos(centerPos.latitude * Math.PI/180)/Math.pow(2, zoomLevel); 

    return meters_per_pixel; 
} 

und das ist, wie ich auf die Zoomstufe hören Wechsel:

 _map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
     @Override 
     public void onCameraIdle() { 
      Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom); 
      Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude + 
        ", Center Long : " + _map.getCameraPosition().target.longitude); 
     }} 

Nun, wenn der Benutzer Zoomstufe ändert, möchte ich, um zu bestimmen, was der maximalen Radius ist, die innerhalb der Kartenansicht angezeigt werden können ...

Antwort

1

Sie nächsten Schnipsel verwenden können:

_map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
    @Override 
    public void onCameraIdle() { 
     Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom); 
     Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude + 
       ", Center Long : " + _map.getCameraPosition().target.longitude); 

     float zoom = _map.getCameraPosition().zoom; 
     LatLng position = _map.getCameraPosition().target; 
     double maxRadius = calculateScale(zoom, position) * mapViewDiagonal()/2; 
    } 
} 

private mapViewDiagonal() { 
    return Math.sqrt(_map.getWidth() * _map.getWidth() + _map.getHeight() * _map.getHeight()); 
} 
+0

Diese Antwort zeigte mir, wie man den maximalen Radius auf eine Weise berechnet, die zu meinem Anwendungsfall passt (ich habe das Map-Container-Layout anstelle von _map verwendet). – lionheart

+0

Entschuldigung, ich benutze zu viele Details. Der Hauptpunkt war, die Hälfte der Diagonale der Ansicht zu bekommen, und es wird maxRadius sein. :) Ich bin froh, dass du diesen Punkt verstanden hast. –

Verwandte Themen