Перемещение значка нескольких маркеров путем обновления местоположения GeoFire в Google Maps для Android - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь отобразить положение всех гонщиков на картах Google, используя гео-огонь в радиусе 1 км.Но отображать только один значок маркера райдера на картах Google.Хотя я получаю широту и долготу всех гонщиков.

Снимок экрана:

https://imgur.com/p0wUxRB.jpg

Код:

@Override
public void onLocationChanged(Location location) {
    if (location != null) {
        updateRiderPosition(new GeoLocation(location.getLatitude(), location.getLongitude()));
    }
}

public void updateRiderPosition(GeoLocation location) {
    ArrayList<Marker> markerList = new ArrayList<>();

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(mPositionNode).child(mAuthId);
    GeoFire geoFire = new GeoFire(ref);
    GeoQuery geoQuery = geoFire.queryAtLocation(location, 1);
    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {
            //---------------------------------------------------
            if (markerList != null) {
                for (Marker marker : markerList) {
                    marker.remove();
                }
            }
            markerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(location.latitude, location.longitude)).icon(icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_motorbike)))));
            //---------------------------------------------------
        }

        @Override
        public void onKeyExited(String key) {}

        @Override
        public void onKeyMoved(String key, GeoLocation location) {}

        @Override
        public void onGeoQueryReady() {}

        @Override
        public void onGeoQueryError(DatabaseError error) {}
    });

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019
@Override
public void onLocationChanged(Location location) {
    if (location != null) {
        updateRiderPosition(new GeoLocation(location.getLatitude(), location.getLongitude()));
    }
}

private ArrayList<Marker> markerList = new ArrayList<>();

private void updateRiderPosition(GeoLocation location) {
    if (markerList != null) {
        for (Marker marker : markerList) {
            marker.remove();
        }
    }

    DatabaseReference ref = FirebaseDatabase.getInstance().getReference(mPositionNode).child(mAuthId);
    GeoFire geoFire = new GeoFire(ref);
    GeoQuery geoQuery = geoFire.queryAtLocation(location, 1);
    geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
        @Override
        public void onKeyEntered(String key, GeoLocation location) {
            markerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(location.latitude, location.longitude)).icon(icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_motorbike)))));
        }

        @Override
        public void onKeyExited(String key) {}

        @Override
        public void onKeyMoved(String key, GeoLocation location) {}

        @Override
        public void onGeoQueryReady() {}

        @Override
        public void onGeoQueryError(DatabaseError error) {}
    });

}
0 голосов
/ 22 февраля 2019

в onKeyEntered перед добавлением нового маркера, удалите все предыдущие

@Override
    public void onKeyEntered(String key, GeoLocation location) {
        //---------------------------------------------------
        // this if remove all previous markers
        if (markerList != null) {
            for (Marker marker : markerList) {
                marker.remove();
            }
        }
        markerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(location.latitude, location.longitude)).icon(icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_motorbike)))));
        //---------------------------------------------------
    }
...