如何更改标记在 Android Map v2 上的位置
Posted
技术标签:
【中文标题】如何更改标记在 Android Map v2 上的位置【英文标题】:How to change the position of a Marker on a Android Map v2 【发布时间】:2013-04-01 02:02:19 【问题描述】:我需要执行以下操作: 我在地图上有一个标记,我需要更改它的位置。所以我尝试了以下方法:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
map.addMarker(a);
a.position(new LatLng(50,5));
其中地图是GoogleMap
。我想我必须刷新地图或其他类似的东西?
【问题讨论】:
【参考方案1】:找到解决方案,需要这样做:
MarkerOptions a = new MarkerOptions()
.position(new LatLng(50,6)));
Marker m = map.addMarker(a);
m.setPosition(new LatLng(50,5));
【讨论】:
@dvrm 我检查了它,它改变了地图上标记的位置。更新是什么意思? @dvrm 如果不需要添加标记,则使用 mMap.clear();方法 @mischka 你是对的!它只是添加新标记,而不是更新旧标记。【参考方案2】:在 google map v2 演示应用中有一个移动标记的示例 .. 在文件 adt-bundle-linux/sdk/extras/google/google_play_services/samples/maps/src/com/example/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);
);
此代码会将标记从一个地理点移动到另一个地理点。
【讨论】:
什么是mGoogleMapObject
?
@HammadNasir,mGoogleMapObject 是 GoogleMap 对象,在您的类中初始化。私人谷歌地图 mGoogleMap;投影项目 = mGoogleMap.getProjection();【参考方案3】:
*** 上的大多数答案都建议使用 remove()
删除标记,然后使用 addMarker
创建一个新标记。而不是这样做,只需将标记保存在 Marker
类型变量中一次,然后更新其位置。
MarkerOptions a = new MarkerOptions().position(new LatLng(50,6)));
myMarker = mGoogleMap.addMarker(a);
然后不用删除和重新创建标记,只需使用
myMarker.setPosition(newLatLng);
希望对你有帮助!!
【讨论】:
谢谢!你的评论对我很有用!【参考方案4】:在函数外部定义“标记”。第一次,它将为 null 并执行“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));
【讨论】:
以上是关于如何更改标记在 Android Map v2 上的位置的主要内容,如果未能解决你的问题,请参考以下文章
Android,如何从 Google Map V2 中删除所有标记?
如何在 android google map v2 实现上为 geoserver 瓦片重新加载 TileOverlay
在android google map v2中使标记只能点击一次