Google Maps API 3 fitBounds 填充 - 确保标记不会被重叠控件遮挡

2023-12-24

我希望能够在调用后向地图视图添加填充map.fitBounds() https://developers.google.com/maps/documentation/javascript/reference,因此无论地图控件或打开时会覆盖标记的滑动面板之类的东西如何,所有标记都是可见的。传单上有一个向 fitBounds 添加填充的选项 http://leafletjs.com/reference.html#map-fitboundsoptions,但 Google 地图没有。

有时,最北的标记部分隐藏在视口上方。最西边的标记也经常位于缩放滑块下方。使用 API 2,可以通过减少地图视口中给定的填充来形成虚拟视口,然后调用该方法showBounds()基于该虚拟视口计算并执行缩放和居中:

map.showBounds(bounds, {top:30,right:10,left:50});

可以找到 API 2 的工作示例here http://koti.mbnet.fi/ojalesa/exam/index.html在 showBounds() 示例链接下。

我在 API V3 中找不到类似的功能,但希望有另一种方法可以实现这一点。也许我可以抓住东北点和西南点,然后添加假坐标以在包含它们后进一步扩展边界?

UPDATE

(Codepen http://codepen.io/dandv/pen/QGWPzP如果下面的代码不起作用)

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    draggable: true,
    streetViewControl: false,
    zoomControl: false
  });

  var marker1 = new google.maps.Marker({
    position: {lat: 37, lng: -121},
    map: map,
  });

  var marker2 = new google.maps.Marker({
    position: {lat: 39.3, lng: -122},
    map: map,
  });
 
  var bounds = new google.maps.LatLngBounds();
  bounds.extend(marker1.position);
  bounds.extend(marker2.position);
  map.fitBounds(bounds);
}
#map {
  height: 640px;
  width: 360px;
}
#overlays {
  position: absolute;
  height: 50px;
  width: 340px;
  background: white;
  margin: -80px 10px;
  text-align: center;
  line-height: 50px;
}
/* Optional: Makes the sample page fill the window. */
html, body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Simple markers</title>

  </head>
  <body>
    <div id="map"></div>
    <div id="overlays">Controls / Order pizza / ETA / etc.</div>
  
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?&callback=initMap">
    </script>
  </body>
</html>

问题是这样的:

我尝试添加一个控件,如下所示自定义控件 https://developers.google.com/maps/documentation/javascript/controls#CustomControls,但地图并没有完全意识到这一点 - 请参阅这把小提琴 https://jsfiddle.net/dandv/pn66Lfcz/分叉自地图自定义控件示例 https://developers.google.com/maps/documentation/javascript/examples/control-custom。其中一个标记仍然被控件遮挡。


这是某种黑客解决方案,但之后fitBounds,您可以缩小一级,以便为标记获得足够的填充。

Assume map变量是您对地图对象的引用;

map.setZoom(map.getZoom() - 1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Maps API 3 fitBounds 填充 - 确保标记不会被重叠控件遮挡 的相关文章

随机推荐

  • glDrawArrays 上的 OpenGL ES EXC_BAD_ACCESS

    我在 OpenGL ES 1 1 中为我正在构建的 iPhone 游戏进行渲染时遇到问题 简而言之 我正在渲染 3 个项目 背景 效果很好 许多球形物体 效果很好 一个改变大小的简单线圆 我在这里遇到问题 基本上 当我在圆上调用 drawA
  • 如何生成 Identity Server 签名证书

    在身份服务器示例中 我们发现这样的代码Startup cs var certFile env ApplicationBasePath idsrv3test pfx var signingCertificate new X509Certifi
  • C++ 二进制文件和迭代器:使用 ifstreambuf_iterator 摆脱 1:1 的束缚?

    这个答案 https stackoverflow com a 13665583 2485710指出 C 不太适合对二进制文件进行迭代这一事实 但这正是我现在所需要的 简而言之 我需要以 二进制 方式操作文件 是的 所有文件都是二进制的 即使
  • 对 SVG 组进行动画处理

    我目前有以下 SVG
  • 使用 Lua 注册闭包

    我不想使用 lua CFunction 签名来编写从 Lua 调用的方法 而是使用我自己的函数签名来简化导出过程 void foo call t call int a char b char c table t d reading argu
  • Angular Reactive 表单嵌套 FormGroup 中的空值

    我有一个带有嵌套表单组的角反应表单 this form new FormGroup name new FormControl address new FormGroup line1 new FormControl line2 new For
  • Modernizr 可以异步加载脚本但按顺序执行它们吗?

    我正在尝试 Modernizer load 我有这个 Modernizr load load js jquery 1 6 1 js js jquery tools min js js myscript js 如果我理解正确的话 我可以使用这
  • 使用 OWIN 的混合模式身份验证

    我正在构建一个 MVC 5 应用程序 我需要根据 AD 和 SQL 数据库或 Web 服务对人员进行身份验证 要求是 如果一个人登录到公司网络或通过 VPN 连接 我必须登录他们而不要求提供凭据 如果用户通过互联网访问网站或没有 AD 帐户
  • 打印所需数量的倒​​星图案[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 倒星图案由给定行数的星号组成 其中下一行少一个星号 直到最后一行剩下一个星号 每五个星号替换为 see image https i stac
  • Android AOSP 汽车模拟器

    我正在尝试构建一个汽车模拟器 因为 Android studio 3 5 未检测到系统映像 我已经在Android 8和9中尝试过并下载了所有工具 如何在AOSP中构建汽车模拟器 您需要 Mac 或 Linux 来构建模拟器 执行以下站点中
  • 使用不同格式选项实现 __str__ 方法的 Pythonic 方法是什么?

    我想创建一个 str 根据用户选择创建各种格式的字符串的方法 我想出的最好的办法就是制作一个 str kwargs 方法 这似乎工作正常 但它不兼容str obj or print obj 换句话说我必须使用print obj str st
  • (HTML + JS) 桌面客户端框架

    我计划为 Windows 和 Mac 编写一个桌面客户端 它将由网络技术 HTML JS 提供支持 因此 它应在用户桌面上的 WebKit 引擎上运行 最近 我看到一个有趣的方法来解决这个问题 加速器 http www appcelerat
  • 是否有使用 java 实现状态机的标准模式?

    我可以考虑的一种方法是有一个类来监听事件并将不同的状态存储在变量中 是否有使用 java 实现状态机的标准模式 我之前读过的文章现在似乎已经被删除了 但是如果你谷歌足够多 你应该能够找到其他关于如何实现的资源有限状态机使用Javaenums
  • 观察 Angularjs 控制器中的对象

    var app angular module myApp app controller myCtrl function scope scope form name my name age 25 scope watch form functi
  • 将 QMultiSampleAntiAliasing 添加到 QForwardRenderer

    我正在尝试在 qt3d 中启用多重采样 Qt3DExtras Qt3DWindow 在初始化期间已经执行了以下操作 format setDepthBufferSize 24 format setSamples 4 format setSte
  • 带 JQuery Mobile 的粘性页脚

    我使用了粘性页脚教程 它起作用了 但我随后添加了 JQuery Mobile 它就不再起作用了 这是一个jfiddle 不起作用 取消单击 Jquery 移动扩展的使用 它就可以满足我的要求 如何获得使用 Jquery mobile 时所拥
  • 在 REST 框架中返回字典而不是数组

    我正在将一组现有 API 从 tastypie 转换为 REST 框架 默认情况下 在执行列表 API 时 tastypie 返回一个包含对象列表的字典和一个元数据字典 其中 REST 框架仅返回一个对象数组 例如 我有一个名为 Site
  • 将html实体存储在数据库中?或者检索时转换?

    简单问一下 打电话更好吗htmlentities or htmlspecialchars 在将数据插入数据库之前还是之后 Before 新的较长字符串将导致我必须更改数据库以在字段中保存更长的值 maxlength 800 可以更改为 80
  • 带图像的android网格视图(图像缩小并且看起来模糊)

    I have to show 7 icons on the home screen of my application To do this i have arranged the icons on the grid view using
  • Google Maps API 3 fitBounds 填充 - 确保标记不会被重叠控件遮挡

    我希望能够在调用后向地图视图添加填充map fitBounds https developers google com maps documentation javascript reference 因此无论地图控件或打开时会覆盖标记的滑动