Android Maps API v2-Kreis zeichnen
Nachdem Sie den folgenden code zum zeichnen der Kreis (entnommen aus Google Play-Dienste "maps" - Beispiel):
PolylineOptions options = new PolylineOptions();
int radius = 5; //What is that?
int numPoints = 100;
double phase = 2 * Math.PI / numPoints;
for (int i = 0; i <= numPoints; i++) {
options.add(new LatLng(SYDNEY.latitude + radius * Math.sin(i * phase),
SYDNEY.longitude + radius * Math.cos(i * phase)));
}
int color = Color.RED;
mMap.addPolyline(options
.color(color)
.width(2));
Dies ist, was gezeichnet auf dem anderen Teil der Welt:
Als Sie sehen, die Kreise sind nicht wirklich Kreise und sogar die zweite ist die ellipse im Grunde.
Ich denke mal, dass "anti-aliasing" der Kreis je nach Anzahl der Punkte in int numPoints
variable.
- Was ist
int radius = 5
variable im Beispiel-code? Ich meine, was es Messen? - Und wichtigste Frage, was wäre die richtige Art, Zeichnung netten Kreis mit bestimmten radius in Meter? Etwas smiliar zu was wir in der api v1 mit
canvas.drawCircle()
UPDATE --------------------
OK nach der Verbesserung Mathe war ich in der Lage zu zeichnen "richtigen" Lochkreis:
private void addCircle(LatLng latLng, double radius)
{
double R = 6371d; //earth's mean radius in km
double d = radius/R; //radius given in km
double lat1 = Math.toRadians(latLng.latitude);
double lon1 = Math.toRadians(latLng.longitude);
PolylineOptions options = new PolylineOptions();
for (int x = 0; x <= 360; x++)
{
double brng = Math.toRadians(x);
double latitudeRad = Math.asin(Math.sin(lat1)*Math.cos(d) + Math.cos(lat1)*Math.sin(d)*Math.cos(brng));
double longitudeRad = (lon1 + Math.atan2(Math.sin(brng)*Math.sin(d)*Math.cos(lat1), Math.cos(d)-Math.sin(lat1)*Math.sin(latitudeRad)));
options.add(new LatLng(Math.toDegrees(latitudeRad), Math.toDegrees(longitudeRad)));
}
mMap.addPolyline(options.color(Color.BLACK).width(2));
}
Jedoch anti-aliasing der Kreis ist wohl etwas außer Kontrolle, und auf einige Zoomstufen Kreis könnte hässlich werden:
InformationsquelleAutor der Frage Ilja S. | 2012-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
How to draw circle in Google Maps v2 (bitmap)
und Ergebnis:
InformationsquelleAutor der Antwort embo
Google ist einfach in maps v2. Das snippet unten zeigt beide zeichnen von Markierungen und Kreise zusammen mit der Aktualisierung Ihrer Positionen zusammen.
InformationsquelleAutor der Antwort snotyak
Android 2.0-API, die Sie verwenden können CircleOption um einen Kreis zu zeichnen, der auch wirklich funktioniert, keine unordentlichen Umrechnungen von Pixel in Meter.
InformationsquelleAutor der Antwort Chrispix
Hier ist mein code, nur für zusätzliche Abwechslung. Ich habe nicht gefunden, einen Weg zur Lösung der Probleme mit antialiasing oder Form der Vereinfachung:
Erklärung der Mathematik
Google Earth nutzt die Mercator-Projektion was bedeutet, dass die körperlichen Kreise, erscheinen nicht als Kreise auf der Karte - stattdessen sind Sie verzerrt, wie in der Frage. Die näher an den Polen, die Sie gehen, desto mehr verzerrt Sie. Zeichnen Sie einen Kreis auf der Karte aber mit Koordinaten in Längen-und Breitengrad müssen wir umkehren die Verzerrung.
Zuerst finden wir das Zentrum des Kreises im Bogenmaß, das ist ziemlich einfach und ist gespeichert in
lat
undlon
.Dann gehen wir um den Kreis zu finden Punkte auf seinem Rand. Wenn wir bei einer physikalischen Kreis -, Längen-und Breitengrad von jedem Punkt ist nur:
Dass Recht einfache Trigonometrie. Der radius (/EARTH_RADIUS) ist die Winkel radius des Kreises im Bogenmaß angegeben werden (z.B. ein Kreis mit einem radius von 100 m hätte eine eckige radius von 0.000015 rad).
Wenn wir, die einfachen code, den wir finden würden, dass der Kreis auf der Karte angezeigt war, quetschte sich durch
cos(lat)
horizontal, so dividieren wir einfach durchcos(lat)
zu unsquish.Konnten wir ebenso getan haben:
Was in einem großen Kreis - es hängt davon ab, ob die
radius
Funktion parameter bezieht sich auf Längen-und Breitengrad.Dieser Erklärung könnten einige Diagramme, aber ich kann nicht belästigt werden, sorry.
InformationsquelleAutor der Antwort Timmmm
Google heute, Feb 26, soeben Kreis als ein overlay geben.
https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/model/Circle
InformationsquelleAutor der Antwort Jeff Arenberg
Gestern Android-Entwickler-team intoduced Google Play service v3. Sie missbrauchen! 😉
https://developers.google.com/maps/documentation/android/shapes#circles
InformationsquelleAutor der Antwort zmeda