Für die Google Maps Android API können Sie die Grenzen von ...
Von der Karte Referenz erhalten, die getProjection()Projection
durch bekommen. Und
ein Vorsprung verwendet, um zwischen auf dem Bildschirm Lage und geographische Koordinaten zu übersetzen ..
So von der Projektion, können wir die getVisibleRegion() verwenden und die VisibleRegion der Karte zu bekommen, das enthält eine LatLngBounds, die eine Klasse ist, die 2 LatLng
Variablen enthält, eine für die nordöstliche Ecke der Grenze und eine für die südwestliche Ecke.
So sollte der Code wie folgt aussehen:
googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
LatLng northeast = bounds.northeast;
LatLng southwest = bounds.southwest;
Context context = getApplicationContext();
CharSequence text = "ne:"+northeast+" sw:"+southwest;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
= - = - = - = - = - = edit:
Kann sein, ich zu naiv war nur die NE gegeben und SW kann dieses Problem lösen, aber nur in dem speziellen Fall, in dem der Benutzer die Karte nicht gedreht oder für die 3D-Karte hochgeklappt hat.
Stattdessen können Sie einfach greifen die VisibleRegion
, die 4 Variable zur Verfügung stellte, farRight, farLeft, nearRight, nearLeft, jeweils 4 Connecers des Gebiets.
Dann können wir die Breite und Höhe des Bereichs für diese 4 Punkte berechnen und die kleineren wählen (na ja, irgendwann kann Breite größer sein als die Höhe denke ich.)
Und für die Berechnung, können wir nur Verwenden Sie die Location.distanceBetween(x1,y1,x2,y2,result)
Funktion ...
, die den Code wie folgt aussehen macht:
VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion();
LatLng farRight = visibleRegion.farRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng nearLeft = visibleRegion.nearLeft;
float[] distanceWidth = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceWidth
);
float[] distanceHeight = new float[2];
Location.distanceBetween(
(farRight.latitude+nearRight.latitude)/2,
(farRight.longitude+nearRight.longitude)/2,
(farLeft.latitude+nearLeft.latitude)/2,
(farLeft.longitude+nearLeft.longitude)/2,
distanceHeight
);
float distance;
if (distanceWidth[0]>distanceHeight[0]){
distance = distanceWidth[0];
} else {
distance = distanceHeight[0];
}
danke für deine antwort, wirklich geschätzt !! :) – awaistoor
Ich wollte sagen, der Rest ist nur ein Mathe-Problem, aber ich denke, ich war zu naiv. übrigens ist die Entfernung in Meter. – kaho
tolle Arbeit Kumpel !!! Nochmals vielen Dank – awaistoor