не может получить маркер ClusterManager - PullRequest
0 голосов
/ 24 ноября 2018

Я использую API Google Map для своего приложения и хочу создать диспетчер кластеров.Действительно, на карте будет много Маркеров, и я хочу, чтобы она выглядела красиво.

Я перешел по этой ссылке: https://developers.google.com/maps/documentation/android-sdk/utility/marker-clustering

Вот мой код:

private ClusterManager<cluster_manager> clusterManager;
private void setUpClusterer(String choix){
    clusterManager = new ClusterManager<cluster_manager>(OnlyVert.this, googleMap);
    googleMap.setOnCameraIdleListener(clusterManager);
    googleMap.setOnMarkerClickListener(clusterManager);
    GetAllMarkers(choix);
}
// Fin localisation //
// Fonctions pour recuperer les fonctions:
public void GetAllMarkers(final String select){

    DatabaseReference mMarkerRef = mDatabase.child("Pins").child(select);
    mMarkerRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot snapshotNode: dataSnapshot.getChildren()) {

                //Getting back my markers
                String Latitude = snapshotNode.child("Latitude").getValue().toString();
                String Longitude = snapshotNode.child("Longitude").getValue().toString();
                String Description = snapshotNode.child("Description").getValue().toString();
                String ImageURL = snapshotNode.child("ImgUrl").getValue().toString();

                double lat = Double.parseDouble(Latitude);
                double lon = Double.parseDouble(Longitude);
                LatLng markerLocation = new LatLng(lat, lon);

                // puting them on the map
                Marker marker = googleMap.addMarker(new MarkerOptions()
                        .position(markerLocation)   // Position
                        .title(select) // Titre
                        .draggable(false)      // Pour la 3D
                        .snippet(Description)   // Pour la description

                );
                // Cluster manager ?
                cluster_manager offsetItem = new cluster_manager(lat, lon);
                clusterManager.addItem(offsetItem);

                /*for (int i = 0; i < 10; i++) {
                    double offset = i / 60d;
                    lat = lat + offset;
                    lon = lon + offset;
                    cluster_manager offsetItem = new cluster_manager(lat, lon);
                    clusterManager.addItem(offsetItem);

                }*/


            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}

И:

public class cluster_manager implements ClusterItem {
private  LatLng mPosition;
private String mTitle;
private String mSnippet;

public cluster_manager(double lat, double lon){
    mPosition = new LatLng(lat, lon);
}

public cluster_manager(double lat, double lng, String title, String snippet) {
    mPosition = new LatLng(lat, lng);
    mTitle = title;
    mSnippet = snippet;
}


@Override
public LatLng getPosition() {
    return mPosition;
}


public String getmSnippet() {
    return mSnippet;
}

public String getmTitle() {
    return mTitle;
}

}

Дело в том, что строка:

googleMap.setOnCameraIdleListener(clusterManager);

Это то, что написано в документации, но это не такработа:

error: incompatible types: ClusterManager<cluster_manager> cannot be converted to OnCameraIdleListener

Так что я бросил это в то, что он хочет:

        googleMap.setOnCameraIdleListener((GoogleMap.OnCameraIdleListener) clusterManager);

Но:

    java.lang.ClassCastException: com.google.maps.android.clustering.ClusterManager cannot be cast to com.google.android.gms.maps.GoogleMap$OnCameraIdleListener

Я пробовал пару вещей, но этоне будет работать

Надеюсь, вы сможете помочь мне заставить мой менеджер кластеров работать. Спасибо за вашу помощь и время:)

...