Ich würde gerne wissen, ob es bereits einen Weg gibt zu wissen, aus einer bestimmten Reihe von Markern, den Zoom, den ich auf die Karte anwenden sollte oder muss ich es selbst tun? (Dies hängt von der Auflösung ab, so dass ich es in MapView finden würde, da es seine Grenzen kennt.)Wie berechnet man den Zoom-Level gegen zurückgegebene Marker?
4
A
Antwort
0
Ich habe versucht, eine Methode zu machen, es funktioniert nicht perfekt, aber es scheint ausreichend (vielleicht sollte ich um den Quotienten auf den realen Wert haben):
private void adjustZoomToMarkers(ArrayList<GeoLocationFlag> flags) {
GeoPoint mapCenter = mapView.getMapCenter();
int lat = mapCenter.getLatitudeE6(), lng = mapCenter.getLongitudeE6();
int farestLat = 0, farestLng = 0;
for (GeoLocationFlag geoLocationFlag : flags) {
Log.d(LOG_TAG, "lat: " + geoLocationFlag.getLat());
int flagLatDistance = Math.abs(geoLocationFlag.getLat() - lat);
if (farestLat < flagLatDistance)
farestLat = flagLatDistance;
Log.d(LOG_TAG, "lng: " + geoLocationFlag.getLng());
int flagLngDistance = Math.abs(geoLocationFlag.getLng() - lng);
if (farestLng < flagLngDistance)
farestLng = flagLngDistance;
}
Log.d(LOG_TAG, "farest: " + farestLat + "," + farestLng);
Log.d(LOG_TAG, "spans: " + mapView.getLatitudeSpan() + "," + mapView.getLongitudeSpan());
// compute how many times this screen we are far on lat
float latQuotient = (float) farestLat/((float) mapView.getLatitudeSpan()/2);
// compute how many times this screen we are far on lng
float lngQuotient = (float) farestLng/((float) mapView.getLongitudeSpan()/2);
int zoom = 0;
if (latQuotient > 1 || lngQuotient > 1) {
// must zoom out
float qutient = Math.max((int) latQuotient, (int) lngQuotient);
while ((qutient/2) > 1) {
qutient = qutient/2;
zoom--;
}
} else {
float qutient = Math.max((int) (1/(float) latQuotient), (int) (1/(float) lngQuotient));
while ((qutient/2) > 1) {
qutient = qutient/2;
zoom++;
}
}
Log.d(LOG_TAG, "Zoom found " + zoom);
int zoomLevel = mapView.getZoomLevel();
mapController.setZoom(zoomLevel + zoom);
}
Mit freundlichen Grüßen, Zied Hamdi
0
Wie erraten, wenn ich die Antwort oben schrieb: wenn der Quotient ist zB. 9, es bedeutet, dass Sie mehr als 4 Iterationen brauchen es, um zu sehen: so einfach correst beide Linien:
while ((qutient/2) > 0.5) {
Mit besten Grüßen, Zied Hamdi
4
int minLat = Integer.MAX_VALUE;
int minLong = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int maxLong = Integer.MIN_VALUE;
for(GeoPoint l : points) {
minLat = Math.min(l.getLatitudeE6(), minLat);
minLong = Math.min(l.getLongitudeE6(), minLong);
maxLat = Math.max(l.getLatitudeE6(), maxLat);
maxLong = Math.max(l.getLongitudeE6(), maxLong);
}
mapView.getController().zoomToSpan(Math.abs(minLat - maxLat), Math.abs(minLong - maxLong));
0
Ich mag deinen Code, der viel kürzer ist ;-), vielleicht sollte ich nur neue Instanzen in der for-Schleife zu schaffen vermeiden, dass die minimalen und maximalen Punkte zu haben ...
mit besten Grüßen, Zied Hamdi
Verwandte Themen
- 1. wie man den aktuellen Zoomlevel in D3.js kennt
- 2. Wie berechnet man den Netzwerkdurchmesser
- 3. JavaScript: Wie berechnet man den Seitenverkehr?
- 4. Wie berechnet man den Dropdown-Wert? JQuery
- 5. Wie berechnet man den richtigen Zoomfaktor?
- 6. Wie berechnet man den Gesamtwert der Zeile?
- 7. Linienstärke von Marker Kontur gegen Series Linie
- 8. Wie berechnet man Partituren?
- 9. Wie berechnet man "Ansichten"?
- 10. Wie man einen Marker in einer Kartenaktivität in Android heranzoomen
- 11. Wie berechnet man freien Speicherplatz?
- 12. Wie berechnet iperf den Durchsatz
- 13. So erreichen Sie den maximalen Zoomlevel auf iOS MKMapView
- 14. Pyephem: Wie berechnet man Transite?
- 15. Wie berechnet man mit String?
- 16. Wie berechnet man die Zeit?
- 17. Wie berechnet man die Schriftbreite?
- 18. Wie kann man den Marker beim Herauszoomen ausblenden?
- 19. Wie zentriert man die Karte um den Bereich oder die Marker?
- 20. Wie berechnet man den Durchschnitt pro Tag mit MongoDB?
- 21. Wie berechnet man den Unterschied zwischen zwei Datumsangaben mit PHP?
- 22. Wie berechnet man den Bereich in SQL mit geografischen Koordinaten?
- 23. Wie berechnet man den Durchschnitt mehrerer Listen von ganzen Zahlen?
- 24. Wie berechnet man den Unterschied zwischen zwei Datumsangaben in Sekunden?
- 25. Wie berechnet man den Konfidenzgrad aus dem Abhängigkeitsanalysebaum?
- 26. Wie berechnet man den Farbunterschied in Prozent für weniger
- 27. Wie berechnet man den RadGrid-Zellenwert auf der Client-Seite?
- 28. Wie berechnet man den Median in AWS Redshift?
- 29. Wie berechnet man den Durchschnitt mehrerer Felder mit MongoDB?
- 30. Wie berechnet man den längsten ungeschlagenen Streak mit MySQL?
Ich habe es versucht, aber es scheint überhaupt nicht zu funktionieren, der Zoom ist riesig. –
Hoppla, du hast Recht, dass die Version kaputt war. Ich habe die Antwort bearbeitet, um weniger temporäre Objekte zu verwenden und auch zu arbeiten :) – emmby
Kann mir jemand sagen, was ist mit Punkten, was soll es sein? –