如何在Android地图v2上更改标记的位置



我需要做以下事情:我在地图上有一个标记,我需要改变它的位置。所以我尝试了以下操作:

MarkerOptions a = new MarkerOptions()
            .position(new LatLng(50,6)));
        map.addMarker(a);
        a.position(new LatLng(50,5));

,其中map是一个GoogleMap。我想我需要刷新地图之类的?

找到了解决方案,需要这样做:

MarkerOptions a = new MarkerOptions()
    .position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));

有一个例子移动标记在谷歌地图v2演示应用程序。文件adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/exa‌​mple/mapdemo/MarkerDemoActivity.java(4.2.2示例)

移动标记的代码:

public void animateMarker(final Marker marker, final LatLng toPosition, final boolean hideMarker) {
    final Handler handler = new Handler();
    final long start = SystemClock.uptimeMillis();
    Projection proj = mGoogleMapObject.getProjection();
    Point startPoint = proj.toScreenLocation(marker.getPosition());
    final LatLng startLatLng = proj.fromScreenLocation(startPoint);
    final long duration = 500;
    final Interpolator interpolator = new LinearInterpolator();
    handler.post(new Runnable() {
        @Override
        public void run() {
            long elapsed = SystemClock.uptimeMillis() - start;
            float t = interpolator.getInterpolation((float) elapsed
                    / duration);
            double lng = t * toPosition.longitude + (1 - t)
                    * startLatLng.longitude;
            double lat = t * toPosition.latitude + (1 - t)
                    * startLatLng.latitude;
            marker.setPosition(new LatLng(lat, lng));
            if (t < 1.0) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);
            } else {
                if (hideMarker) {
                    marker.setVisible(false);
                } else {
                    marker.setVisible(true);
                }
            }
        }
    });
}

这段代码将使标记从一个地理点移动到另一个地理点。

StackOverflow上的大多数答案建议使用remove()来删除标记,然后使用addMarker创建一个新的标记。相反,只需在Marker类型变量中保存一次标记,然后更新其位置即可。

MarkerOptions a = new MarkerOptions().position(new LatLng(50,6))); 
myMarker = mGoogleMap.addMarker(a);

而不是删除和重新创建一个标记,只需使用

myMarker.setPosition(newLatLng);  

希望这有帮助!!

在函数外部定义"marker"。第一次,它将为空,并执行"if"条件。第二次执行"else"

        Marker marker = null;    
        protected void onPostExecute(Coordinates coordinates) {
        LatLng latLong = new LatLng("lat", "long");
        if (marker == null) {
            MarkerOptions options = new MarkerOptions().position(latLong)
                    .title("Marker Title");
            marker = mMap.addMarker(options);
        }
        else {
            marker.setPosition(latLong);
        }
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLong));
     mMap.animateCamera(CameraUpdateFactory.zoomTo(16f));
    }

相关内容

  • 没有找到相关文章

最新更新