确保所有图块均加载到 Open Layers 3 XYZ 源中

2023-11-24

我们有一些层利用ol.source.XYZ来源。对于我们使用的加载策略ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({}))。在进行其他操作之前,我们需要确保所有图块已完全加载到地图视图中。

我们已经看过多篇与此相关的文章,但尚未找到 100% 的解决方案来为我们提供所需的解决方案。即使情况并非如此,逻辑也会返回 true。我们尝试使用tileloadstart、tileloadend、tileloaderror事件,如上图所示example页面但这似乎并不总是返回预期的结果。

GIS Stack Exchange 文章here看起来很有希望,因为我们可以将下面列出的代码与tileloadstart/tileloadend事件结合使用,但有许多函数调用只能在ol-debug.js而不是ol.js源代码。因此,下面粘贴的代码不适用于ol.js。此代码只是引用的 GIS Stack Exchange 文章的副本。

function calculateNumberOfTiles(tileSource) {
     var tg = (tileSource.getTileGrid()) ? tileSource.getTileGrid(): ol.tilegrid.getForProjection(map.getView().getProjection()), 
            z = tg.getZForResolution(map.getView().getResolution()),
            tileRange = tg.getTileRangeForExtentAndZ(map.getView().calculateExtent(map.getSize()), z),
            xTiles = tileRange['maxX'] - tileRange['minX'] + 1,
            yTiles = tileRange['maxY'] - tileRange['minY'] + 1;
        return xTiles * yTiles;
}

我有两个问题,任何人都可以对我们可能缺少的内容提供任何其他想法吗?感谢您的帮助。

  1. 为什么当函数调用挂在 ol-debug.js 的原型上时,它们在 ol-debug.js 中可用,而在 ol.js 中则不可用tilegrid目的?
  2. 还有其他建议如何判断所有图块已完全加载到地图中吗?

加载事件

你的假设是正确的tileloadstart源上的事件后面应该跟着一个tileloadend or tileloaderror对于相应的图块。正如链接的官方示例所示,可以使用它来跟踪加载图块的数量。

当发出的总和tileloadend and tileloaderror事件的数量等于tileloadstart事件,没有正在进行加载。如果不是这种情况,您应该尝试制作一个可重现的示例,因为它可能是库中的错误。

然而,了解这些事件的含义很重要。这tileloadend事件并不意味着该图块在地图上可见,而是意味着该图块已完成加载并且可用于渲染。图块的实际渲染将在调用事件处理程序后完成。因此,任何需要有关何时加载和渲染所有图块的信息的图块加载逻辑(例如在截取屏幕截图/创建打印时)都必须等到下一个postrender event.

你提到了 5-10 秒之间tileloadend并且图块实际上出现在地图上,这太长了,无法与渲染相关(除非您执行一些非常奇怪的渲染回调)。

ol-debug.js 与 ol.js

与许多 JS 库一样,OpenLayers 代码在构建过程中进行了优化和最小化,以创建更小、更高效的构建。任何不属于 API 的类型或函数都将被缩小或删除。仅 ol.js 中可用的方法,并记录在openlayers.org,应该被使用,因为任何缩小的方法都可能改变每个构建。

ol-debug.js 是该库的非优化版本,旨在在调试或探索时使用。

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

确保所有图块均加载到 Open Layers 3 XYZ 源中 的相关文章

  • Struts Tiles框架,标签库详解<tiles:insert page="facebook.jsp" />

    Tiles框架为创建Web页面提供了一种模板机制 xff0c 它能将网页的布局和内容分离 它允许先创建模板 xff0c 然后在运行时动态地将内容插入到模板中 Tiles 框架建立在JSP的include指令的基础上 xff0c 但它提供了比
  • 1178C C. Tiles

    C Tiles time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Bob is
  • 如何在 OpenLayers-3 中使用 SVG 图像作为地图标记?

    我正在尝试使用 SVG 图像在 OpenLayers 3 OL3 中创建地图 针滴 即地图标记 目前 我使用 PNG 图像作为引用 ol style Icon 源 src 属性的 pindrop 效果很好 但是 使用 SVG 图像时会失败
  • 离线模式下具有自定义图层的 Windows Phone 7 地图控制

    嗨 WP7 移动热情开发者 我正在尝试使用 Windows Phone 控件中默认提供的 Bing 地图控件 具体来说 我尝试使用自定义 TileSource 来提供自定义的平铺地图 该地图将作为文件夹 内容文件 或隔离存储存储在项目中 下
  • 使用 Bing Maps Quadkeys 作为 Openlayers 3 Tile 源

    我有许多图块源 它们在旧的 Silverlight 应用程序中使用 Bing Maps 的 Quadkey 系统 我想在新的 Openlayers 3 地图中使用它们 我找到了几个函数示例 这些函数会将这些源转换为 Leaflet js 但
  • 开放层 3:如何为修改交互创建侦听器

    我已经成功设置了修改交互 ol interaction Modify 的文档 http ol3js org en master apidoc ol interaction Modify html 不要提及修改功能时触发的单个事件 与 ol
  • 未找到属性:Spring 的图块中出现 NoSuchAttributeException

    我搜索了该网站上提出的所有问题并尝试了所有更改 但没有成功 所以在这里发布查询 我收到以下异常 HTTP Status 500 org apache tiles template NoSuchAttributeException Attri
  • 删除溢出的内联元素行之间的边距

    我正在创建一个基于图块的游戏 并使用块渲染来更新大量图块 我试图以最简单的方式做到这一点 所以我一直在尝试使用 HTML 的默认布局 现在我正在创建 内联块 省略元素之间的空白以避免它们之间的水平空间 但是当块溢出并创建新行时 会有一些垂直
  • OL3:缩放到地图上的矢量图层

    我有一张带有 openlayers 3 和矢量图层的地图 我想将地图调整为该矢量图层的大小 但到目前为止 我所能得到的只是将地图集中在该矢量的最后一个点上 因为在创建地图时无法访问矢量图层的点 if trackMap null for va
  • 在隐藏元素中绘制 OpenLayers 3 地图

    我正在编写一个页面 您可以在其中查看有关区域和地图的详细信息 详细信息位于一个选项卡上 地图位于另一个选项卡上 HTML 的相关部分如下 类来自引导程序 http getbootstrap com css div class col xs
  • 如何在 OpenLayers 3 中使描边不透明度起作用

    无论我如何尝试 我都无法在 OpenLayers 3 中使描边不透明度正常工作 我试图实现的是用 0 5 的不透明度在 OSM 平铺地图上画一条线 这是示例代码 var lineString new ol geom LineString 4
  • 使用 OpenLayers 从 GeoServer Javascript 编辑 WFS

    看完后非常好有关如何使用 OpenLayers 编辑 WFS 的教程 http wordpress dbauszus rhcloud com wfs t with openlayers 3 5 我尝试过复制它 但是使用来自 Geoserve
  • OL3:按坐标从图层获取特征

    我想通过坐标获取图层的特征 此外 我想在弹出窗口中打开此功能 到目前为止我已经通过 onclick 事件解决了这个问题 但我想通过给出特征的坐标并打开特征的弹出窗口来实现 我有一个带有地图的图层和一个带有以下功能的图层 if trackMa
  • 无法使用传单渲染矢量切片 (.mbtiles) 文件

    我正在尝试渲染一些从 OpenMapTile 下载的本地存储和基于矢量的图块 我这样做的原因是因为我的最终应用程序只能在无法连接到互联网的计算机上运行 我已经阅读了许多关于传单是否可以渲染基于矢量的图块的不同内容 但从一些示例来看它似乎可以
  • JS:给定二维数组中的一个点和一个距离,哪些坐标是可移动的?

    给定一个任意大小的二维数组 如下所示 var board 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 如何减小 openlayers 3 中图标的大小,我正在使用 bing 地图

    这是我的代码 var iconFeature new ol Feature geometry new ol geom Point ol proj transform 95 3698 29 7604 EPSG 4326 EPSG 3857 n
  • 无法将 openlayers-3 与 webpack 一起使用

    我必须将 openlayers 包含在我正在开发的项目中 我已经尝试过将其包含在ext文件夹和 npm 我在我的工作流程中使用 Webpack 编译时 我在控制台中收到以下警告 WARNING in openlayers dist ol j
  • 在 Pygame 中获取等距平铺鼠标选择

    I m not managing to get this math correct and it s a little bit difficult to explain in words I have managed to create a
  • 设置样式缩放级别 openlayers 3

    在 Openlayers 中 可以根据缩放级别打开或关闭某些功能 尽管查看了文档 但我在 OpenLayers 3 中没有找到相同的功能 有谁知道如何做到这一点 这是我放置在地图上的功能ol style Text是我只想在用户放大到特定缩放
  • GeoJSON 要素坐标未显示在 OpenLayers 地图上

    我正在尝试显示一个GeoJSON地图上的多边形 我使用了 OpenLayers 提供的示例以及以下数据 但仅显示第二个多边形 var geojsonObject type FeatureCollection crs type name fe

随机推荐