随着用户移动,定期将地图上的所有标记移动到其更新/新的当前位置 [英] Move all the markers on the map to their updated/new current location periodically as users moves
问题描述
我正在开发一个 android 应用程序,其中一些用户从他们的设备打开相同的活动.此 Activity 中有一张地图,当用户从其设备打开此 Activity 时,会从 Firebase 获取他们的位置坐标,并在地图上显示基于这些坐标的标记.
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.
这是我的代码:
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) {
}
});
}
}
这里是 addMarkers()
方法:
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);
}
}
这是onLocationChanged()
:
@Override
public void onLocationChanged(Location location) {
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
}
用户不断向特定位置移动.
我想要的是在用户移动时将相应的标记移动到新位置,这样每个人都可以看到每个人当前所在的位置.请帮我弄清楚.
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. 每当 onLocationChanged
调用意味着用户移动了一段距离.
1. Whenever onLocationChanged
called means user moved to some distance.
在 onLocationChanged
中更新用户在 Firebase
上的更新位置,以便其他用户可以找到您更新的位置.
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. 在您成功将用户位置更新到 Firebase
2. call acceptingUserReference.child(requestID)
code when you successfully update user location to Firebase
这篇关于随着用户移动,定期将地图上的所有标记移动到其更新/新的当前位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!