Ich hatte eine Situation, um den Abstand zwischen zwei Markierungen über der Polylinie zu zeigen.
Im Folgenden finden Sie, was meine Forderung war:
Ich schaffte es auf andere Weise zu tun, und es ist sehr interessant Weise, auf diese Weise Sie es etwas erreichen anpassen können.
Schritte:
- Berechnen des Abstandes zwischen den Markierungen von Location.distanceBetween() Verfahren.
- Erstellen Sie eine neue
Layout XML
Datei und erstellen Sie einen beliebigen Typ von UI
, den Sie für Ihren Text anzeigen möchten. In meinem Fall enthielt es nur einen TextView
.
- Legen Sie die berechnete Entfernung in
TextView
fest.
- Konvertieren Sie die
XML Layout
in Bitmap
.
- Erstellen Sie ein
BitmapDescriptor
von diesem Bitmap
Objekt.
- Finden Sie den Mittelpunkt zwischen den gewünschten Markern und fügen Sie einen benutzerdefinierten Marker mithilfe der
BitmapDescriptor
erstellt im letzten Schritt und Sie sind fertig.
Code:
Zur Berechnung der Entfernung zwischen zwei Markern
float[] distance1 = new float[1];
Location.distanceBetween(userMarker.getPosition().latitude, userMarker.getPosition().longitude, positionMarker.getPosition().latitude, positionMarker.getPosition().longitude, distance1);
Bitmap Erstellen von XML-Layout-Datei
Um Mittelpunkt zwischen zwei Markern tun so etwas wie die folgenden finden Sie heraus:
double dLon = Math.toRadians(flagMarker.getPosition().longitude - positionMarker.getPosition().longitude);
double lat1 = Math.toRadians(positionMarker.getPosition().latitude);
double lat2 = Math.toRadians(flagMarker.getPosition().latitude);
double lon1 = Math.toRadians(positionMarker.getPosition().longitude);
double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
lat3 = Math.toDegrees(lat3);
lon3 = Math.toDegrees(lon3);
einen neuen cutom Marker hinzufügen, indem Sie die Bitmap-Descriptor von uns in den vorherigen Schritten erstellt mit
Marker centerOneMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat3, lon3))
.icon(flagBitmapDescriptor));
Ich hoffe, es hilft Ihnen.
Gute Idee, aber laut [docs] (https://developers.google.com/maps/documentation/android/infowindows) kann immer nur 1 Infofenster sichtbar sein, an das gebunden werden muss Ein Marker. Also müsste ich einen unsichtbaren Marker verwenden und keine anderen Infofenster verwenden. – Tamas
Oder eine andere Idee wäre benutzerdefinierte Overlays. Verwenden Sie Texte als benutzerdefinierte Überlagerungen über den Zeilen. Aber ich bezweifle, dass dies leichter zu erreichen ist. Unglücklicherweise scheint es momentan keine unterstützte Methode zu geben, die Text an eine Polylinie anfügt. –
Mittlerweile habe ich den Infowindow-Hack ausprobiert, und es ist verrückt langsam. Ich muss es bei jedem Ziehereignis aktualisieren, damit es an der richtigen Stelle ist, und sogar mit nur einer Textansicht ist es wirklich langsam. ~ 1-2 fps während des Ziehens (auf der Registerkarte GT-P5200 der Galaxie). – Tamas