随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置

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 并且地图上还显示了许多标记......正在发生一些奇怪的事情。没有更简单的方法吗?

以上是关于随着用户的移动,定期将地图上的所有标记移动到其更新/新的当前位置的主要内容,如果未能解决你的问题,请参考以下文章

移动谷歌地图标记点时用纬度和经度更新数据库

移动地图时,在谷歌地图中更新Ajax Json数组中的标记

移动标记时谷歌地图显示两个标记

允许用户在谷歌地图中向后移动标记位置并关闭窗口

在谷歌地图javascript api中 - 如何移动地图而不是标记

如何使用相机谷歌地图 xcode 移动标记(图钉)