Move all the markers on the map to their updated/n

2019-01-12 12:04发布

问题:

I'm developing an android app where some users opens the same activity from their devices. There is a map in this activity and as users opens this activity from their devices, their location coordinates is fetched from Firebase and a marker based on these coordinates is shown on the map.

Here's my code:

    acceptingUserReference.child(requestID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {

                                    if (dataSnapshot.getValue() != null) {
                                            final Map<String, String> newAcceptedUser = (Map<String, String>) dataSnapshot.getValue();

                                            nameOfP.add(newAcceptedUser.get("pName"));                      
                                            cLatP.add(newAcceptedUser.get("currentLat").trim());
                                            cLngP.add(newAcceptedUser.get("currentLng").trim());

                                            addMarkers();

                                            //Check map is loaded
                                            mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
                                                @Override
                                                public void onMapLoaded() {
                                                     mMap.getUiSettings().setZoomControlsEnabled(true);
                                                    mMap.getUiSettings().setMapToolbarEnabled(true);
                                                    mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                                                    mMap.setMaxZoomPreference(19.0f);  mMap.setMyLocationEnabled(true);

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

                                }
                            });

Here's addMarkers() method:

public void addMarkers() {
        mMap.clear();
        venueMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(venueLat), Double.parseDouble(venueLng)));
        markersList.add(venueMarker);
        for (int i = 0; i < nameOfP.size(); i++) {
            p = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nameOfP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
            markersList.add(pMarker);
        }
}

Here's onLocationChanged():

@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    currentLtAU = mCurrentLocation.getLatitude();
    currentLnAU = mCurrentLocation.getLongitude();
}

The users keeps moving towards a specific location.

What I want is to move the respective markers to the new location as the users moves so that everybody can see where each and everyone currently is. Please help me figure it out.

回答1:

Save the result of addMarker and later call setPosition on it (result of addMarker).



回答2:

It appears as if there is nothing wrong with your code. I am sorry I could not find anything wrong with it as it is, but here is a file that you can use as a guideline to find the problem:

http://pastebin.com/9qq484Fz

I hope you solve the problem soon! (Apologies for the messy code, it's pretty old)



回答3:

1. Whenever onLocationChanged called means user moved to some distance.

Update user's updated location on Firebase in onLocationChanged so, other user can find your updated location.

Note: use geofire to update user location and see this answer.

@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
}

2. call acceptingUserReference.child(requestID) code when you successfully update user location to Firebase