Wenn ich eine Android-Kartenanwendung entwickle, möchte ich einen Kreis auf der Karte zeichnen, dessen Radius 1 Meter beträgt. Wie Sie wissen, kann ich nicht 1 Meter direkt zeichnen, ich sollte 1 Meter auf den Abstand von zwei Pixeln je nach Zoomstufe konvertieren. Wie kann ich es konvertieren, gibt es etwas API, das ich verwenden kann.
Canvas.draw (x, y, radius), welchen Wert soll ich dieser Methode zuweisen?
Wenn Ihre Karte Google Maps ist, wird die Mercator-Projektion verwendet. Sie müssen diese für die Konvertierung verwenden. In der Mercator-Projektion variiert die Entfernung, die ein Pixel in Metern anzeigt, mit dem Breitengrad. Daher ist der Breitengrad wichtig, wenn ein Meter eine sehr kleine Entfernung im Vergleich zum Erdradius ist.
Alle folgenden Beispiele sind Javascript, daher müssen Sie sie möglicherweise übersetzen.
Hier ist eine allgemeine Erklärung des Koordinatensystems:
Dieses Beispiel enthält ein MercatorProjection-Objekt, das die Methoden fromLatLngToPoint () und fromPointToLatLng () enthält:
Nachdem Sie Ihre (x, y) in (lat, lon) konvertiert haben, zeichnen Sie so einen Kreis:
%Vor%Diese beiden Mashups zeichnen einen Kreis mit einem bestimmten Radius auf der Erdoberfläche:
Wenn Sie die Projektion ignorieren, verwenden Sie kartesische Koordinaten und zeichnen einfach den Kreis mit dem Satz Pythagoras:
Sehen Sie sich die Projektion Objekt in der API. Es hat eine Methode namens MeterToEquatorPixels (). Angesichts der Beschreibung in der API könnte es nur entlang des Äquators korrekt sein, aber ich dachte, es wäre erwähnenswert, falls die Genauigkeit für Sie kein Problem wäre.
Dies ist der Weg, dies innerhalb der Zeichenmethode Ihrer Überlagerung zu verwenden, wenn Sie den Radius in Metern und den Längen- und Breitengrad angeben, an dem Sie den Kreis zeichnen möchten:
%Vor%Drei Fragen, die du stellen musst 1- Wie groß ist deine Karte? 2- Was ist Ihre Zoomstufe? 3- Wie groß ist dein Bildschirm
Lassen Sie uns annehmen, dass die Karte das gleiche Seitenverhältnis wie Ihr Bildschirm hat (wenn nicht, dann müssen Sie sich Gedanken darüber machen, wie Sie beschneiden (vertikal oder horizontal) oder wie Sie strecken und dann Ihre Antwort auf 1 ändern)
Sobald Sie die Antwort 1 und 3 haben, können Sie das Verhältnis zwischen Metern und Pixeln im Fall von 100% Zoom berechnen, so dass Sie ein Pixel pro Meter haben
Als nächstes müssen Sie einen Zoomfaktor beibehalten (z. B. Zoom in doppelte Größe ist 200%)
Ihr Aufruf zum Zeichnen des Kreises wird so aussehen
%Vor%Sie können die Zoomstufe für den gewünschten Radius berechnen:
Zuerst müssen wir die Bildschirmbreite des Telefons berechnen. Bei Zoomstufe 1 ist der Äquator der Erde 256 Pixel lang und jede nachfolgende Zoomstufe verdoppelt die Anzahl der Pixel, die benötigt werden, um den Erdäquator darzustellen. Die folgende Funktion gibt die Zoomstufe zurück, bei der der Bildschirm eine Fläche von 1 km Breite anzeigt.
%Vor%Tags und Links android