如何在 Google 地图上放置 Pin 后获取位置

How to get location from Google Map after dropping Pin over it

我正在尝试使用 ImageView 从 GoogleMap 获取位置。 我可以拖动这个 Pin 图片和我放置它的位置,我应该得到它的位置。

我将 framelayout 与 googleMap 一起使用作为第一个子元素,将 ImageView(即 Pin)作为其第二个子元素。

与我们在 Google 地图应用程序中使用的相同。

.

请给我建议,如何实现?

我的布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<fragment
    android:id="@+id/fetchaddressMap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    class="com.google.android.gms.maps.MapFragment" />

    <ImageButton
    android:id="@+id/markerRed"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@android:color/transparent"
    android:contentDescription="@string/content_description"
    android:src="@drawable/marker_red"
    android:visibility="visible" />
    </FrameLayout>

我猜你是通过 OnTouchListener.

中收到的 MotionEvent 对象获取屏幕的 rawXrawY

有了这 2 个坐标,您可以借助 Projection:

在地图上找到位置
Projection projection = googleMap.getProjection();
Log.e("TAG", projection.fromScreenLocation(new Point(x, y)).toString());

我建议您使用 Google 地图中已经内置的标记 Api,您只需将标记设置为可拖动,并添加一个监听器,回调将为您提供所需的所有信息。更多信息在 documentation. Also you can use the Android Maps Utils library 中以定义自定义标记。

您需要实现 OnMarkerDragListener class。您还可以获得街道地址和其他信息。阅读文档。

http://developer.android.com/reference/android/location/Geocoder.html http://developer.android.com/reference/android/location/Address.html

mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() {
        @Override
        public void onMarkerDragStart(Marker marker) {

        }

        @Override
        public void onMarkerDrag(Marker marker) {

        }

        @Override
        public void onMarkerDragEnd(Marker marker) {
            marker.getPosition();
            Geocoder geocoder;
            List<Address> addresses;
            geocoder = new Geocoder(MapsActivity.this, Locale.getDefault());
            try {
                addresses = geocoder.getFromLocation(marker.getPosition().latitude, marker.getPosition().longitude, 1);
                String city = addresses.get(0).getAddressLine(1);
                Toast.makeText(MapsActivity.this, city, Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    });

使用 android 的引脚可以更好、更轻松地实现。但是,如果您想使用自定义图钉,则无需在框架布局下添加该图像视图。删除该图像视图。请参阅 this link 了解如何自定义标记。

希望对您有所帮助。