我在我的项目中使用了谷歌地图MapView。当用户在地图上单击特定的标记时,我需要创建一个类似于谷歌地图的对话框,并且我需要将该对话框定位在用户单击的位置(视口内)。如何将对话框的位置设置为用户在地图上单击的位置?我已经看到了对话框API可以将其位置设置为某个坐标,但不知道如何获取用户单击的点的坐标。谢谢。
注册地图点击处理程序。
// Capture map click event.
google.maps.event.addListener(YourMap 'click', $.proxy(this.mapClickHandler, this));
mapClickHandler = function (event)
{
var position = new google.maps.LatLng(event.latLng.lat(), event.latLng.lng())
// Main Marker. Or in your case a google maps dialogue.
this.marker.setPosition(position);
}
我想到你可能需要x,y屏幕坐标,但我不确定,尽量避免使用它们,虽然它们也可能作为事件对象的属性可用。
找到了一个使用getProjection()获取屏幕位置坐标的示例。但是我的示例依赖于扩展谷歌的OverlayView。我不确定是否有一种从地图本身获取投影的方法。需要查一下。
MyOverlay.prototype = new google.maps.OverlayView();
var overlayProjection = this.getProjection();
var point = overlayProjection.fromLatLngToDivPixel(event.latLng);
point.x;
point.y;
@Override
protected boolean onTap(int index) {
MyOverlayItem item = mOverlays.get(index);
MarkerPopup this.popup = new MarkerPopup(mapView);
MapView.LayoutParams params = new MapView.LayoutParams(
MapView.LayoutParams.WRAP_CONTENT, // width
MapView.LayoutParams.WRAP_CONTENT, // height
item.getPoint(), MapView.LayoutParams.BOTTOM_CENTER);
params.mode = MapView.LayoutParams.MODE_MAP;
this.mapView.addView(popup, params);
// change parameter
popup.setLayoutParams(params);
// visibility
popup.setVisibility(View.VISIBLE);
}