根据实时Firebase纬度和经度值更改标记位置

时间:2019-04-08 09:27:09

标签: java android firebase-realtime-database google-maps-markers

我试图用实时数据库的值更改Google地图中标记的位置

我尝试使用mMap.clear,但这不是正确的解决方案,因为如果我有100个标记并更改了1个标记的位置,则100个标记是清除的,并且重新定位以进行1个标记的更改

    myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      mMap.clear();           
 for (DataSnapshot ds : dataSnapshot.getChildren()) {

            Double lang = ds.child("lang").getValue(Double.class);
            Double lat = ds.child("lat").getValue(Double.class);
            save = new model(lat, lang);
            ll = new LatLng(save.getLat(), save.getLang());

            mCurrLocationMarker = mMap.addMarker(options
                    .position(ll));

        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

我尝试更改标记的位置,但是如果我不编写mMap.clear,则实际结果会添加一个新标记,然后清除所有标记,如果我编写mMap.clear,则会添加所有标记以更改一个标记

3 个答案:

答案 0 :(得分:0)

您可以将标记对象存储为全局变量,而只需在位置更改时更改所选标记的位置即可。

就像

if (mCurrLocationMarker == null)
    mCurrLocationMarker = mGoogleMap.addMarker(new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin_red)).position(location));
else
    mCurrLocationMarker.setPosition(location);

当您拥有多个标记时,可以使用ArrayList或LinkedHashMap尝试相同的逻辑。

请检查以下文件:https://filebin.net/m2vgvcms6g73kef2/TestFragment.java?t=e9g0tdki

希望它会有所帮助..:)

答案 1 :(得分:0)

不删除标记即可在Google Map()中更新新位置

1。最初创建的标记:

Func<Task<bool>>

2。获取更新位置

        Double lang = ds.child("lang").getValue(Double.class);
        Double lat = ds.child("lat").getValue(Double.class);
          LatLng latLng=new latLng(lang ,lat )
     // Creating a marker

      Marker marker= mMap.addMarker(new MarkerOptions()
                      .position(latLng)
                      .draggable(true));

答案 2 :(得分:0)

我建议将标记存储在数组或Hashmap抛出中,您可以在需要时随时进行更新。

//            code for ploat and store marker
            HashMap<String, Marker> mPlotedMarker = new HashMap<>();
            if (mMap != null) {
                mMap.clear();
                ArrayList<MarkerDataModel> mDataList = new ArrayList<>();
                //With Hash map

                for (int positon = 0; positon < mDataList.size(); positon++) {
                    LatLng markerPosition = new LatLng(mDataList.get(positon).getMarkerLat(), mDataList.get(positon).getMarkerLong());
                    Marker marker = mMap.addMarker(new MarkerOptions().position(markerPosition)
                            .title(mDataList.get(positon).getMarkerTitle()));
                    mPlotedMarker.put(mDataList.get(positon).getMarkerId(), marker);
                }
            }

            //Now whenever you want to update
            String markerId="1"; // replace which you want to update
            if(mPlotedMarker.containsKey(markerId)){
                Marker marker=mPlotedMarker.get(markerId);
                if(marker!=null){
                    marker.setPosition(newPostion); //Specifie new position
                }
            }