【问题标题】: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 代码。

标签: android google-maps google-maps-markers google-maps-android-api-2 android-maps-v2


【解决方案1】:

保存 addMarker 的结果,然后在其上调用 setPosition(addMarker 的结果)。

【讨论】:

    【解决方案2】:

    您的代码似乎没有任何问题。很抱歉,我没有发现任何问题,但这里有一个文件,您可以将其用作查找问题的指南:

    http://pastebin.com/9qq484Fz

    希望您尽快解决问题! (抱歉代码乱七八糟,太老了)

    【讨论】:

    • 谢谢你的代码,伙计。你有没有像你在这里问的那样找到另一种方法:stackoverflow.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 并且地图上还显示了许多标记......正在发生一些奇怪的事情。没有更简单的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2017-06-10
    相关资源
    最近更新 更多