2

Ich habe Google Maps erfolgreich in meiner App implementiert. Ich muss Marker Clustering für Xamarin Android implementieren.Wie Sie Marker Clustering für Google Maps in Xamarin implementieren

Die link hier gibt eine gute Erklärung, wie zu implementieren, aber ich bin nicht in der Lage zu verstehen, wie das Paket beziehen.

Ich habe einige Quelldateien, aber es hilft nicht, da ich nicht weiß, wie die Jar-Dateien zu beziehen sind. Die Dokumente, die ich bekommen habe, beziehen sich auf Java, aber nicht auf C#. Hier sind die wenigen Verbindungen:

https://github.com/googlemaps/android-maps-utils https://forums.xamarin.com/discussion/13569/google-maps-android-api-utility-library-support/p2?

Antwort

5

Sie wollen das Xamarin.Android Binding-Projekt verwenden, die die android-maps-utils.aar-Datei enthält.

Anmerkung: Ich habe forked eine ältere Github Repo, die ein verbindliches Projekt und Beispiel und aktualisiert sie auf die neueste Version von android-maps-utils.aar (v0.4.3 als von diesem Post) enthalten.

Klonen Sie einfach diesen Repo und kopieren Sie das gesamte GoogleMapsUtility Projekt in Ihre Xamarin.Android Lösung und fügen Sie das zu Ihrer Lösung hinzu (über Add Existing Project).

Dann können Sie eine Google Map erstellen, wie Sie es normalerweise, das heißt:

GoogleMapOptions mapOptions = new GoogleMapOptions() 
    .InvokeMapType(GoogleMap.MapTypeNormal) 
    .InvokeZoomControlsEnabled(true) 
    .InvokeMapToolbarEnabled(true) 
    .InvokeZoomGesturesEnabled(true) 
    .InvokeRotateGesturesEnabled(true) 
    .InvokeCompassEnabled(true); 

Dann können Sie Ihre Map Marker zum ClusterManager hinzufügen und lassen Sie es die Clustering verwalten:

_clusterManager = new ClusterManager(this, _map); 
_clusterManager.SetOnClusterClickListener(this); 
_clusterManager.SetOnClusterItemClickListener(this); 
_map.SetOnCameraChangeListener(_clusterManager); 
_map.SetOnMarkerClickListener(_clusterManager); 

I Das ursprüngliche Beispiel wurde geändert, um 20 Markierungen in einem Protokoll zu erstellen. Spiralmuster den Clusters bei verschiedenen Zoomstufen zu testen:

private void AddClusterItems() 
{ 
    double lat = 47.59978; 
    double lng = -122.3346; 

    var items = new List<ClusterItem>(); 

    // Create a log. spiral of markers to test clustering 
    for (int i = 0; i < 20; ++i) 
    { 
     var t = i * Math.PI * 0.33f; 
     var r = 0.005 * Math.Exp(0.1 * t); 
     var x = r * Math.Cos(t); 
     var y = r * Math.Sin(t); 
     var item = new ClusterItem(lat + x, lng + y); 
     items.Add(item); 
    } 
    _clusterManager.AddItems(items); 
} 

enter image description here

+0

Das ist wirklich cool..I die Lage ist, die Funktionalität zu erreichen. Vielleicht ist meine Frage albern. Ich bin mir nicht sicher, was die .aar-Datei tut. Danke vielmals!. Dieser Thread wird für Anfänger wie mich hilfreich sein. Nochmals vielen Dank für die ausführliche Erklärung. – Dilip

+0

Hinweis: Es wird angezeigt, dass '_mapFragment.Map' veraltet ist: 'veraltet'. Wird es in Zukunft ein Problem sein? Ab sofort funktioniert es perfekt. – Dilip

+1

@Dilip Das Paket 'aar' ist die Binärdistribution eines Android-Bibliotheksprojekts. Diese '.aar'-Datei enthält also die eigentlichen Java-Klassen und Ressourcen von Google (https://github.com/googlemaps/android-maps-utils). Das 'Xamarin.Android'-Bindungsprojekt stellt einen" C# -Wrapper "um diesen Java-Code bereit, damit er in der' Xamarin.Android'/C# /. Net-Welt funktionieren kann. – SushiHangover