通过更新Android版Google Maps中的GeoFire位置来移动多个标记图标 [英] Multiple Marker Icon Move by Updating GeoFire Location in Google Maps for Android

查看:48
本文介绍了通过更新Android版Google Maps中的GeoFire位置来移动多个标记图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用方圆1公里范围内的地火在Google地图上显示所有骑手的位置.但是在Google地图中仅显示一个车手标记图标.尽管我得到了所有骑手的纬度和经度.

I’m trying to display all riders’ position in google maps using geo-fire within 1 km radius. But display only one rider marker icon in google maps. Though I get all riders latitude and longitude.

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) {}
    });

}

推荐答案

@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) {}
    });

}

这篇关于通过更新Android版Google Maps中的GeoFire位置来移动多个标记图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆