当前位置: 首页 > 知识库问答 >
问题:

基于实时Firebase lat和lang值更改标记位置

夏侯兴学
2023-03-14

我尝试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

共有1个答案

刘令
2023-03-14

不删除标记更新google map中的新位置()

1.初始创建标记:

        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.获取updateedlocation时

   LatLng oldLocation, newLocaation;

float bearing = (float) bearingBetweenLocations(oldLocation, newLocaation);
rotateMarker(marker, bearing);

private double bearingBetweenLocations(LatLng perviousPos,LatLng newPos) {

    double PI = 3.14159;
    double lat1 = perviousPos.latitude * PI / 180;
    double long1 = perviousPos.longitude * PI / 180;
    double lat2 = newPos.latitude * PI / 180;
    double long2 = newPos.longitude * PI / 180;

    double dLon = (long2 - long1);

    double y = Math.sin(dLon) * Math.cos(lat2);
    double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
            * Math.cos(lat2) * Math.cos(dLon);

    double brng = Math.atan2(y, x);

    brng = Math.toDegrees(brng);
    brng = (brng + 360) % 360;

    return brng;
}


   .To rotate marker using above bearing angle i have used this code

 Here isMarkerRotating is a boolean value. Add isMarkerRotating = false in OnCreate 
method

private void rotateMarker(final Marker marker, final float toRotation) {
    if(!isMarkerRotating) {
        final Handler handler = new Handler();
        final long start = SystemClock.uptimeMillis();
        final float startRotation = marker.getRotation();
        final long duration = 2000;

        final Interpolator interpolator = new LinearInterpolator();

        handler.post(new Runnable() {
            @Override
            public void run() {
                isMarkerRotating = true;

                long elapsed = SystemClock.uptimeMillis() - start;
                float t = interpolator.getInterpolation((float) elapsed / duration);

                float rot = t * toRotation + (1 - t) * startRotation;

                float bearing =  -rot > 180 ? rot / 2 : rot;

                marker.setRotation(bearing);

                if (t < 1.0) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 16);
                } else {
                    isMarkerRotating = false;
                }
            }
        });
    }
}
 类似资料:
  • 该活动有一个带有3个不同片段的视图页。在片段3中,我使用列表视图来显示自定义适配器。列表中的项目数量是动态的,因此可以出现滚动条。 如果存在滚动条,并且用户将一些视图从显示中滚动出来并再次返回,则值有时会发生变化。我知道这是由于适配器中GetView()的重新创建。但我找不到它变化的原因。 过程应该是这样的: < li >无选择:seekbar为灰色,右侧的textview显示未初始化 < li

  • 我试图在点击时更改标记的图标编号。我使用的是角度谷歌地图。我正在使用本地资产文件夹而不是服务API设置iNurl。 单击标记时,如何更改上述图标。

  • 我是XSLT新手,希望能得到一些帮助。 我目前有一个XML,它包含以下格式的多个副本: 我的任务是替换id属性的值。我需要根据代码的数字部分改变这个值。如果值大于850000,格式应该改为USA868509。如果该值小于850000,则将id值更改为仅包括数字。XML中的其余值应保持完全相同。 我目前拥有以下xslt: 我很难确定要更改的值,因为XSLT不执行变量循环。有没有办法更改XSLT以获得

  • 问题内容: 如何更改Google地图中MyLocationOverlay的默认蓝色动画标记? 问题答案: 步骤#1:创建的子类。 步骤2:根据需要覆盖并绘制标记。请记住,此方法不仅会绘制标记,而且还会“如果用户的位置移动到屏幕边缘附近,并且在构造函数中提供了a ,我们将滚动滚动以重新显示新的读数”。

  • 附注。Link1和link2是我第二个问题的相关答案。不过,他们并没有回答我的问题。

  • 我正在用html/jsp页面主体中的Google地图做一个web动态项目。 我制作了一个函数,可以创建一个标记(lat、lng、map),并在标记的参数中使用一个特殊的image.png作为图标。 在我的地图中,我制作了两种不同的样式(地图的颜色…)“白天”和“夜晚”。 我想知道当用户点击夜间更改样式时,我如何更改标记的图标。事实上,标记的颜色不适合这种风格的地图... 我尝试用相同的名称初始化不