Android 安卓谷歌地图获取标记的位置

Android 安卓谷歌地图获取标记的位置,android,google-maps,google-maps-android-api-2,Android,Google Maps,Google Maps Android Api 2,我已经在我的应用程序中实现了谷歌地图。我试图做的是向用户显示当前位置,然后允许用户在地图上的任何其他位置添加标记。通过将setMyLocationEnabled设置为true,我显示了用户的当前位置。然后,在屏幕上单击的任何位置都会添加一个标记。我想得到标记的新lat/lng坐标,但它一直给我用户位置的坐标。当我将setMyLocationEnabled更改为false并添加标记时,它将返回正确的坐标。因此,似乎我必须编写自己的代码来获取用户的当前位置,而不是使用setMyLocationEna

我已经在我的应用程序中实现了谷歌地图。我试图做的是向用户显示当前位置,然后允许用户在地图上的任何其他位置添加标记。通过将setMyLocationEnabled设置为true,我显示了用户的当前位置。然后,在屏幕上单击的任何位置都会添加一个标记。我想得到标记的新lat/lng坐标,但它一直给我用户位置的坐标。当我将setMyLocationEnabled更改为false并添加标记时,它将返回正确的坐标。因此,似乎我必须编写自己的代码来获取用户的当前位置,而不是使用setMyLocationEnabled。有什么想法吗?下面是我的代码

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+为我节省了很多天。