如何在 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
对象获取屏幕的 rawX
和 rawY
点
有了这 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 了解如何自定义标记。
希望对您有所帮助。
我正在尝试使用 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
对象获取屏幕的 rawX
和 rawY
点
有了这 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 了解如何自定义标记。
希望对您有所帮助。