随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置
Posted
技术标签:
【中文标题】随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置【英文标题】:Move all the markers on the map to their updated/new current location periodically as users moves 【发布时间】:2017-07-04 06:28:15 【问题描述】:我正在开发一个 android 应用程序,其中一些用户从他们的设备打开相同的活动。此活动中有一张地图,当用户从他们的设备打开此活动时,他们的位置坐标将从 Firebase 获取,并且基于这些坐标的标记会显示在地图上。
这是我的代码:
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();
用户不断向特定位置移动。
我想要在用户移动时将相应的标记移动到新位置,以便每个人都可以看到每个人当前所在的位置。请帮我弄清楚。
【问题讨论】:
什么是 pMarker?不是您将标记分配给 p 的变量吗?另外,您是否遇到任何错误,或者只是无法正常工作? 我建议根据用户“id”将标记添加到hashmap
,然后在您的应用从 Firebase 接收值时自行编辑标记,而不是每次都创建新值。
在onLocationChanged()
时致电acceptingUserReference.child(requestID)
并将您的位置更新为FireBase
@KishoreJethava 在 onLocationChanged() 之前得到了零件,请在前面描述零件。
发布onLocationChanged
代码。
【参考方案1】:
保存 addMarker 的结果,然后在其上调用 setPosition(addMarker 的结果)。
【讨论】:
【参考方案2】:您的代码似乎没有任何问题。很抱歉,我没有发现任何问题,但这里有一个文件,您可以将其用作查找问题的指南:
http://pastebin.com/9qq484Fz
希望您尽快解决问题! (抱歉代码乱七八糟,太老了)
【讨论】:
谢谢你的代码,伙计。你有没有像你在这里问的那样找到另一种方法:***.com/q/39778805/6144372 什么是mFriends
?
@hammadnasir 朋友列表和 mFriends 变量只是朋友 ID 的列表...对于其余代码并不重要。
friendList
正在onStart
中使用。你从哪里填充它?请告诉我,
@HammadNasir 我正在使用friendList 来存储我的“朋友”的Google Play 游戏ID,当有人添加朋友时我会填充它。我忘记从 Pastebin 中删除它,但因为它是访客帐户,我无法更改它。【参考方案3】:
1. 每当onLocationChanged
被调用时,意味着用户移动了一段距离。
在onLocationChanged
中更新用户在Firebase
上的更新位置,以便其他用户可以找到您的更新位置。
注意:使用geofire 更新用户位置并查看此answer。
@Override
public void onLocationChanged(Location location)
mCurrentLocation = location;
currentLtAU = mCurrentLocation.getLatitude();
currentLnAU = mCurrentLocation.getLongitude();
2.成功将用户位置更新为Firebase
后调用acceptingUserReference.child(requestID)
代码
【讨论】:
这是您的要求吗? 正在解决另一个问题...抱歉这么晚才回复...我可以保存而不是 GeoFIre从onLocationChanged()
内调用acceptingUserReference.child(requestID)
?。
我无法做到这一点......只是没有发生,兄弟。就没有别的办法了吗?
什么没有发生?
每当我试图获取数组中的更新位置时,数组会充满许多项目,并且我得到 arrayoutofboundsexception 并且地图上还显示了许多标记......正在发生一些奇怪的事情。没有更简单的方法吗?以上是关于随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置的主要内容,如果未能解决你的问题,请参考以下文章