Android 安卓谷歌地图获取标记的位置
我已经在我的应用程序中实现了谷歌地图。我试图做的是向用户显示当前位置,然后允许用户在地图上的任何其他位置添加标记。通过将setMyLocationEnabled设置为true,我显示了用户的当前位置。然后,在屏幕上单击的任何位置都会添加一个标记。我想得到标记的新lat/lng坐标,但它一直给我用户位置的坐标。当我将setMyLocationEnabled更改为false并添加标记时,它将返回正确的坐标。因此,似乎我必须编写自己的代码来获取用户的当前位置,而不是使用setMyLocationEnabled。有什么想法吗?下面是我的代码Android 安卓谷歌地图获取标记的位置,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,我已经在我的应用程序中实现了谷歌地图。我试图做的是向用户显示当前位置,然后允许用户在地图上的任何其他位置添加标记。通过将setMyLocationEnabled设置为true,我显示了用户的当前位置。然后,在屏幕上单击的任何位置都会添加一个标记。我想得到标记的新lat/lng坐标,但它一直给我用户位置的坐标。当我将setMyLocationEnabled更改为false并添加标记时,它将返回正确的坐标。因此,似乎我必须编写自己的代码来获取用户的当前位置,而不是使用setMyLocationEna
public class BasicMapDemoActivity extends FragmentActivity implements
OnMarkerDragListener, OnMapClickListener {
private GoogleMap mMap;
private String TAG = "TEST";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic_demo);
setUpMapIfNeeded();
mMap.setMyLocationEnabled(true);
mMap.setOnMarkerDragListener(this);
mMap.setOnMapClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the
// map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
// setUpMap();
}
}
}
@Override
public void onMarkerDrag(Marker marker) {
// TODO Auto-generated method stub
}
@Override
public void onMarkerDragEnd(Marker marker) {
// TODO Auto-generated method stub
LatLng position = marker.getPosition(); //
Toast.makeText(
BasicMapDemoActivity.this,
"Lat " + position.latitude + " " + "Long " + position.longitude,
Toast.LENGTH_LONG).show();
}
@Override
public void onMarkerDragStart(Marker marker) {
// TODO Auto-generated method stub
}
@Override
public void onMapClick(LatLng point) {
// TODO Auto-generated method stub
// Creating a marker
MarkerOptions markerOptions = new MarkerOptions();
// Setting the position for the marker
markerOptions.position(point);
// Setting the title for the marker.
// This will be displayed on taping the marker
markerOptions.title(point.latitude + " : " + point.longitude);
// Clears the previously touched position
mMap.clear();
// Animating to the touched position
mMap.animateCamera(CameraUpdateFactory.newLatLng(point));
// Placing a marker on the touched position
mMap.addMarker(markerOptions).setDraggable(true);
}
}
我不清楚在您试图从中获取其位置的方法中,标记来自何处,但看起来您并没有保留对要报告其位置的标记的引用 调用此方法时:
// Placing a marker on the touched position
mMap.addMarker(markerOptions).setDraggable(true);
它返回对已添加标记的引用。我认为您需要保留它返回的引用,然后根据该引用查询位置
所以你可以试试这样的东西:
// Placing a marker on the touched position
Marker myMarker = mMap.addMarker(markerOptions).setDraggable(true);
LatLng position = myMarker.getPosition(); //
Toast.makeText(
BasicMapDemoActivity.this,
"Lat " + position.latitude + " " + "Long " + position.longitude,
Toast.LENGTH_LONG).show();
更新
不知道为什么会投反对票,也许有人可以评论一下到底是怎么回事?无论如何,我会尝试添加更多信息,也许这会有所帮助
首先,我看不到发布的代码中有什么触发了对onMarkerDragEnd()事件的调用。我在文档中没有看到任何内容表明,只需在地图上添加一个标记即可触发此操作。如果您想从在onmaclick()方法末尾添加的生成器处获取位置,那么,我上面显示的内容应该可以做到这一点。虽然这应该与传递到onmaClick()事件中的point对象相同,但问题是关于添加的标记的位置,而不是单击的点,即使在这种情况下它们应该是相同的。我不理解这个问题,
onmaplick
中的point
是您的新标记位置是的,但地图中的point click只会继续返回用户当前位置的值,而不是标记所在的新位置。真奇怪!尝试从onCreate()中删除映射设置内容。我认为地图还没有准备好,也许你尝试设置两次会得到混合信号。当我试图在ActivityCreated()或onResume()之外的地方设置地图时,发生了一些奇怪的事情。仍然无法工作,我很担心这个答案是绝对的美丽,1+为我节省了很多天。