我有一个小的 android 问题(谷歌地图 v2 api)
这是我的代码:
GoogleMaps mMap;
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));
我正在尝试找到一种方法来获取此标记对象的当前屏幕坐标 (x,y)。
也许有人有想法?我尝试了 getProjection 但它看不到工作。谢谢!:)
我有一个小的 android 问题(谷歌地图 v2 api)
这是我的代码:
GoogleMaps mMap;
Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(20, 20)));
我正在尝试找到一种方法来获取此标记对象的当前屏幕坐标 (x,y)。
也许有人有想法?我尝试了 getProjection 但它看不到工作。谢谢!:)
是的,使用Projection
类。进一步来说:
获取Projection
地图:
Projection projection = map.getProjection();
获取标记的位置:
LatLng markerLocation = marker.getPosition();
将位置传递给Projection.toScreenLocation()
方法:
Point screenPosition = projection.toScreenLocation(markerLocation);
就这样。现在screenPosition
将包含标记相对于整个地图容器左上角的位置:)
请记住,Projection
对象只会在地图通过布局过程后返回有效值(即它具有有效width
和height
设置)。您可能会得到,(0, 0)
因为您试图过早地访问标记的位置,就像在这种情况下:
Projection
地图上屏幕上的标记位置。这不是一个好主意,因为地图没有设置有效的宽度和高度。您应该等到这些值有效。解决方案之一是将 a 附加OnGlobalLayoutListener
到地图视图并等待布局过程解决。在扩展布局并初始化地图后执行此操作 - 例如在onCreate()
:
// map is the GoogleMap object
// marker is Marker object
// ! here, map.getProjection().toScreenLocation(marker.getPosition()) will return (0, 0)
// R.id.map is the ID of the MapFragment in the layout XML file
View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView();
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// remove the listener
// ! before Jelly Bean:
mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// ! for Jelly Bean and later:
//mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// set map viewport
// CENTER is LatLng object with the center of the map
map.moveCamera(CameraUpdateFactory.newLatLngZoom(CENTER, 15));
// ! you can query Projection object here
Point markerScreenPosition = map.getProjection().toScreenLocation(marker.getPosition());
// ! example output in my test code: (356, 483)
System.out.println(markerScreenPosition);
}
});
}
请通读评论以获取更多信息。
toScreenLocation 似乎已被 fromLatLngToPoint gmaps api doc 替换为投影:https ://developers.google.com/maps/documentation/javascript/reference/image-overlay#Projection