- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道如果边界发生变化,就会触发一个 bounds_changed
事件,但是我需要知道 fitBounds 何时完成(当边界发生变化或边界保持不变时)。
谷歌有某种容忍度,如果边界变化很小,它实际上不会改变边界/调用bounds_changed。我需要知道这种情况何时发生。
我已经通过超时成功完成了此操作,但看起来很糟糕,并且当bounds_changed需要超过100毫秒才能触发时,可能容易出现一些错误。
参见示例:http://jsbin.com/sosurexuke/1/edit?js,console,output
还有更好的解决方案吗?
编辑:如果您认为只是检查 map.getBounds() 是否与您发送的 fitBounds() 相同,那么您会失望地发现,拟合边界的结果通常甚至不接近您发送的边界。我写了这个函数,认为这可能是可能的
function boundsAreIdentical(bounds1, bounds2) {
if (!bounds1 || !bounds2) return false;
var tolerance = 0.00001;
console.log(bounds1.getNorthEast().lat(), bounds2.getNorthEast().lat());
console.log(bounds1.getNorthEast().lng(), bounds2.getNorthEast().lng());
console.log(bounds1.getSouthWest().lat(), bounds2.getSouthWest().lat());
console.log(bounds1.getSouthWest().lng(), bounds2.getSouthWest().lng());
if (
(Math.abs(bounds1.getNorthEast().lat() - bounds2.getNorthEast().lat()) <= tolerance) &&
(Math.abs(bounds1.getNorthEast().lng() - bounds2.getNorthEast().lng()) <= tolerance) &&
(Math.abs(bounds1.getSouthWest().lat() - bounds2.getSouthWest().lat()) <= tolerance) &&
(Math.abs(bounds1.getSouthWest().lng() - bounds2.getSouthWest().lng()) <= tolerance)) {
return true;
}
return false;
}
2年后编辑:
似乎在最新的谷歌地图实验版本 (3.32) 中,即使边界与当前边界相同,bounds_changed
也会被触发。
我将原始示例更新为版本 3.31,但仍然显示原始问题。
最佳答案
解决此问题第一部分(了解边界何时完成更改)的最简单方法是使用 idle event listener .
无论您如何更改边界,请在即将更改边界之前设置此事件。这样,当边界全部确定后, map 将注册为空闲状态并触发空闲事件,您可以在其中执行您的操作。为了防止事件相互堆积,请同时清除它。
你可能需要稍微摆弄它。说到 fiddle ,这里有一个 fiddle 。在这个 fiddle 中,我只是将警报设置为每次都发生:
https://jsbin.com/kapimov/edit?js,output单击“更改边界”,您会看到它一遍又一遍地发生:)
编辑:要检查 fitBounds() 失败时是否触发,请比较触发 fitBounds() 之前和之后的中心。
即使尝试将边界设置为同一坐标两次,中心也会发生变化并且可以进行比较。中心检查似乎发生在 map 实际移动边界之前,但在调用该函数时总是会发生变化。
点击“Fit Current Bounds”按钮两次以查看其实际效果;第一次“bounds_changed”触发,第二次则不触发,但中心仍然检查正确。注释掉 fitBounds() 函数,看看中心在没有它的情况下如何不会改变。
关于javascript - 谷歌地图 fitBounds 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761416/
我的 Leaflet map JavaScript 如下,在底部附近您将看到我的 fitBounds() 定义。 问题是我不明白如何准确使用它,或者将它放在代码中的何处以使其工作(即缩放以包含所有标记
我正在使用 Leaflet 和 Mapbox,我想设置 map 的 View : 所有标记均可见 中心设置为特定点 使用 setView 和 fitbounds 单独完成每个点很容易,但我不知道如何同
当我初始化 map 时,我向 map 添加 1 个标记。当我缩小 map 时,我可以在 map “副本”上多次看到添加的标记。 当我搜索某个位置时, map 会添加一个新标记。之后,我使用 fitBo
我正在使用 Selenium 编写验收测试来测试使用 Google Maps API 的应用程序。为了测试 map 标记的位置,我是 using un-optimized markers和独特的标题属
我有一个谷歌地图边界函数运行如下: function intializeCustom() { var map = new google.maps.Map(document.getElement
我正在尝试在传单 map 中设置 fitBounds 选项,如下所示: var bounds = new L.LatLngBounds([[Math.max(lat, borneLat), Math.
我知道如果边界发生变化,就会触发一个 bounds_changed 事件,但是我需要知道 fitBounds 何时完成(当边界发生变化或边界保持不变时)。 谷歌有某种容忍度,如果边界变化很小,它实际上
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 fitbound 函数在 map 的折线上自动缩放。但第一次如果我更改图表数据并再次调用相同的函数,它就无法正常工作,它就可以正常工作。函数代码如下。 var mapOptions = {
下面的代码工作正常,只是它没有缩放到给定的点。 如果我直接使用 Latlng,它就可以工作,无需将地址转换为 Latlng。 我需要将地址转换为 latlng,因为我是从数据库中获取地址的。 有人知道
我目前只能使用 google map v3。我尝试以这种方式手动添加边界,但它不起作用!? map.fitBounds((53.399999, 9.73215099999993), (53.71714
我只是想澄清一下我的理解方式是否正确。在我的 Google map 应用中,我想向我的用户显示来自特定大陆的标记。 问题:Google Map API 中的边界是由不多于两个点(标记)构成的区域,我说
新编码器尝试在我的 View 中调整 GoogleMap。 我查了很多资料,得出了这个结论,但对我不起作用。 覆盖 func loadView() { var markerList = [GM
我有两种类型的搜索来在 map 上放置标记。一个搜索基于来自输入表单的搜索查询触发,另一个在 moveend 事件上触发(即“在 map 移动时重做搜索”)。结果数据不一样;前者使用半径,后者限制在范
我的代码: if(!bounds.isEmpty()) { map.fitBounds(bounds); if (map.getZoom() > 11) { map.s
我对 googlemaps fitBounds 函数有疑问。 for (var i = 0; i Google Maps LatLngBounds.extend() Demo
我在我们的应用程序中使用 mapbox。执行 this.map.fitBounds(bound value) 将缩小或放大 map 以绑定(bind)指定值。在调用 this.map.fitBound
在这里,我的 javascript 代码在 map 中呈现标记,然后是该 map 的 fitBounds。 map 边界根据geojson得到拟合,但问题是当有任何标记时 在 map 上,我尝试适应绑
如何避免 this.map.fitBounds() 缩小?执行 this.map.fitBounds 将放大或缩小 map 以适合边界值。我想避免 fitBounds 的缩小功能。我怎样才能做到这一点
如果我在 Google map 上添加带有标签的标记,然后调用 fitBounds 到另一个区域,我仍然会继续看到没有标记的标签,除非缩小。这是一个错误吗? 这是一个工作 fiddle ,尝试单击 M
我是一名优秀的程序员,十分优秀!