Dies ist die Geschichte der Google Maps Android-API, die bei der Verwendung von Google Maps unter Android verwendet wird.
Eine der Funktionen dieses SDK ist die "gegenseitige Konvertierung zwischen Kartenkoordinaten (Breiten- und Längengrad) und Bildschirmkoordinaten". Mit diesem,
Rufen Sie dazu "fromScreenLocation" oder "toScreenLocation" mit einer Instanz der "Projection" -Klasse in "GoogleMap.getProjection ()" auf.
Fühlt es sich nicht wie die Instanz an, die Sie mit dieser "GoogleMap.getProjection ()" -, einzelnen Tonne oder derselben Instanz erhalten können, wann immer Sie sie erhalten? Wie bei GoogleMap.getUiSettings ()
. Das Schreiben von map.getProjection (). FromScreenLocation
ist langweilig. Möchten Sie es also nur einmal abrufen, wenn Sie eine Karte erstellen und wiederverwenden?
private Projection _proj;
@Override
public void onMapReady (GoogleMap map) {
//Es gab eine Zeit, in der ich dachte, ich sollte es zuerst bekommen und wiederverwenden ...
_proj = map.getProjection();
}
Dies ist jedoch ein Fehler.
Als Versuch schreibe ich: "Wenn sich die Position der Karte ändert, ermitteln Sie den Breiten- und Längengrad oben links (0, 0) des Bildschirms."
private Projection _proj;
@Override
public void onMapReady (GoogleMap map) {
//Es gab eine Zeit, in der ich dachte, ich sollte es zuerst bekommen und wiederverwenden ...
_proj = map.getProjection();
//Ereignis, wenn die Kamera vollständig bewegt und im Leerlauf ist (mit RetroLambda)
map.setOnCameraIdleListener(() -> {
//Ermitteln Sie den Breiten- und Längengrad des Bildschirmursprungs
LatLng latlng = _proj.fromScreenLocation(new Point(0, 0));
Log.d("TEST", "lat:" + latlng.latitude + ", long:" + latlng.longitude);
});
}
Durch Scrollen der Karte wird der Handler für "setOnCameraIdleListener" aufgerufen, aber ich erhalte nicht die erwarteten Ergebnisse. Ich denke, es ist wahrscheinlich minus oder nahe Null.
Um das richtige Ergebnis zu erhalten
map.setOnCameraIdleListener(() -> {
//Ermitteln Sie den Breiten- und Längengrad des Bildschirmursprungs
Projection prj = map.getProjection();
LatLng latlng = prj.fromScreenLocation(new Point(0, 0));
Log.d("TEST", "lat:" + latlng.latitude + ", long:" + latlng.longitude);
});
Sie müssen eine "aktuelle" Projektion
-Instanz erhalten, wie z.
Schauen wir uns nun die API-Referenzbeschreibung an.
The Projection returned is a snapshot of the current projection, and will not automatically update when the camera moves. As this operation is expensive, you should get the projection only once per screen. Google Maps uses the Mercator projection to create its maps from geographic data and convert points on the map into geographic coordinates.
The Projection returned is a snapshot of the current projection, and will not automatically update when the camera moves.
Es wurde fest geschrieben!
Die Projektion ist eine Projektionsmethode (Mercator-Projektion), und da die Projektionsmethode (= Formel für die Projektion) unveränderlich ist, hätte ich nicht gedacht, dass bei jeder Aufnahme ein Schnappschuss erstellt wird. Ich bemerkte dieses Verhalten nicht und machte mir etwa 3 Stunden lang Sorgen.
Die Lektion war, wenn Sie besorgt waren, lassen Sie uns die Stereotypen wegwerfen und Kihon überprüfen. Wenn ich es jedoch wage zu sagen, dass der Methodenname so etwas wie "getCurrentProjection ()" war, war es möglicherweise nicht die Idee, "ihn zuerst zu bekommen und wieder zu verwenden". Als Person, die SDK erstellt, wollte ich über eine Namensgebung nachdenken.
Recommended Posts