Javascript 谷歌地图:通过平移到特定点进行放大/缩小,如在maps.Google.com上下文菜单中

Javascript 谷歌地图:通过平移到特定点进行放大/缩小,如在maps.Google.com上下文菜单中,javascript,google-maps,google-maps-api-3,contextmenu,zooming,Javascript,Google Maps,Google Maps Api 3,Contextmenu,Zooming,我有一个谷歌地图的项目。我想用放大和缩小操作模拟maps.google.com上下文菜单。 google.maps.Map.setZoom()正在将地图缩放到中心点,但在maps.google.com中,当您右键单击特定点并选择放大/缩小操作时,地图正在平移,以便该特定点保持在同一位置。 例如,如果我右键单击左上角的点并在关联菜单中选择“放大”,则此桥在放大后会停留在光标下,不会超出地图边框。 是否有一种简单的方法来实现此功能?您可以使用标记来处理它。 我不知道这是不是最有效的方法 因此,您可以

我有一个谷歌地图的项目。我想用
放大
缩小
操作模拟maps.google.com上下文菜单。
google.maps.Map.setZoom()
正在将地图缩放到中心点,但在maps.google.com中,当您右键单击特定点并选择放大/缩小操作时,地图正在平移,以便该特定点保持在同一位置。
例如,如果我右键单击左上角的点并在关联菜单中选择“放大”,则此桥在放大后会停留在光标下,不会超出地图边框。

是否有一种简单的方法来实现此功能?

您可以使用标记来处理它。 我不知道这是不是最有效的方法

因此,您可以在当前鼠标位置添加一个标记(您可以跟踪鼠标光标,对吗?上次没有使用它做任何操作) 然后将地图中心设置为该标记(我知道,它有一个函数),然后删除该标记

编辑:哦,对不起,我想我误解了你的问题。因为这和双击一个点是一样的,对吗?
因此,您希望使屏幕上的距离mousetop和mouseleft与下方的点保持不变,但放大/缩小一个阶段?

您可以使用标记处理它。 我不知道这是不是最有效的方法

因此,您可以在当前鼠标位置添加一个标记(您可以跟踪鼠标光标,对吗?上次没有使用它做任何操作) 然后将地图中心设置为该标记(我知道,它有一个函数),然后删除该标记

编辑:哦,对不起,我想我误解了你的问题。因为这和双击一个点是一样的,对吗?
因此,您希望使屏幕上的距离mousetop和mouseleft与下方的点保持不变,但放大/缩小了一个阶段?

在以下位置询问并回答了一个相同的问题:

我解决这个问题的方法是相同的,只是我的地图像素坐标都是相对于地图的中心(而不是左上角)计算的:

  • 确定特定点相对于贴图中心的像素偏移。可以获得以像素为单位的贴图矩形尺寸,例如Map.getDiv().getclientracts()[0],中心就是矩形的中心
  • 计算放大/缩小后特定点的新像素偏移量。对于Google Maps放大而言,所有像素偏移都会加倍(对于单个缩放步骤),因此如果您的特定点距离中心[30,40],则在正常放大后(或者在正常缩小后,它将距离地图中心[60,80])
  • 计算缩放后需要调整地图中心的程度,使特定点回到开始位置。在上面的例子中,在放大之后我们需要映射.panBy(-30,-40),或者在缩小之后我们需要映射.panBy(15,20)
  • 将法线贴图.setZoom(zoom)和计算贴图.panBy(dX,dY)应用于重新居中

  • 在以下位置询问并回答了相同的问题:

    我解决这个问题的方法是相同的,只是我的地图像素坐标都是相对于地图的中心(而不是左上角)计算的:

  • 确定特定点相对于贴图中心的像素偏移。可以获得以像素为单位的贴图矩形尺寸,例如Map.getDiv().getclientracts()[0],中心就是矩形的中心
  • 计算放大/缩小后特定点的新像素偏移量。对于Google Maps放大而言,所有像素偏移都会加倍(对于单个缩放步骤),因此如果您的特定点距离中心[30,40],则在正常放大后(或者在正常缩小后,它将距离地图中心[60,80])
  • 计算缩放后需要调整地图中心的程度,使特定点回到开始位置。在上面的例子中,在放大之后我们需要映射.panBy(-30,-40),或者在缩小之后我们需要映射.panBy(15,20)
  • 将法线贴图.setZoom(zoom)和计算贴图.panBy(dX,dY)应用于重新居中

  • 是的,你误解了,你的第二次猜测是对的。如果我用latlng(55.000,38.000)右键单击该点并在菜单中选择
    放大
    ,则该点将停留在第一次右键单击的位置。是的,您误解了,您的第二次猜测是正确的。如果我用latlng(55.000,38.000)右键单击该点,并在菜单中选择
    放大
    ,则该点将保持在第一次右键单击的位置。