问题标签 [mktileoverlay]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
439 浏览

ios - MKTileOverlay 和 PINCache 库的 iOS / MapKit 缓存管理问题

我正在使用 MapKit 通过在 mapView 上添加 MKTileOverlay 来创建卫星和雷达动画。

使用 UISlider 和 PlayButton,我可以通过播放 MKOverlayRenderer 的 alpha(根据滑块的位置将它们设置为 0 或 0.75)来创建动画,例如 GIF。

动画非常流畅,我所有的卫星和雷达图块都在 mapView 上正确加载。

我在缓存管理方面遇到了一个问题。

我意识到 MapKit 没有为我的 tileOverlay 使用缓存,这就是为什么我使用库 PINCache 来保存我的图块,这样它就不会在我每次播放动画时请求和下载图像。

我的实现:

我重写了该方法URLForTilePath以构建我的 URL 来获取我的平铺图像。

将调用的关键方法URLForTilePath是我的实现loadTileAtPath

基本上我想要实现的是:

  • 检查我是否缓存了数据,如果有,则获取对象。
  • 如果没有,我会发出请求以下载具有URLForTilePath.
  • 然后我将对象设置为缓存。
  • 该字符串str是我的缓存管理密钥
  • 为了对图块进行排序和区分,我有 2 个重要值、类型(雷达或卫星、不同的图像、不同的 URL)和日期。

我可以看到缓存管理正在运行,叠加层的渲染速度更快,但我遇到的主要问题是它没有在相应的坐标处加载和构建图块。

我的 mapView 就像一个错误构建的世界的拼图。

用我的一段代码,你能看出我做错了什么吗?

0 投票
1 回答
160 浏览

ios - 离线地图图块已停止显示

我已经下载了缩放 15 到 18 的小镇的瓷砖。它们按预期显示,但现在没有。我在 Yosemite 上使用 xcode 7 和 swift 2。我现在在 sierra 上使用带有 swift 3 的 xcode 8.1。我很确定问题在升级之前就开始了,但是没有时间机器可以回去。我升级是因为我想在我的 iPad 2 上测试应用程序,收到 xcode 与 ipad 上的 ios 不兼容的消息,然后收到 xcode 8.1 无法加载到 Yosemite 的消息,因此升级到 sierra。代码如下。控制台输出如下。没有给出错误


控制台输出

0 投票
0 回答
1087 浏览

ios - iOS MKMapView 加载自定义图块优化

我开发了带有自定义 TileOverlay 的 iOS 地图应用程序,它从我们自己的服务器加载图块。我扩展了 TileOverlay 类,它获取瓦片数据如下:

该应用程序正常工作,但是当我快速放大/缩小或平移到随机方向时,图块加载速度非常慢。尤其是在 iPad 中,加载当前视图大约需要一分钟。我在方法中添加了 print(path.z)"loadTile"并意识到 mapView 请求不在所选区域中的图块。结果,所选区域的加载速度非常慢。我if给线程执行块设置了条件

它多次增强了加载瓷砖,但加载完成时,有空白瓷砖。这是因为缩放级别没有正确计算(我找到了几种查找缩放级别的方法,但对于这个问题没有一个是确定的)。

我正在使用 MapKit sdk,Swift 的版本是 3.0

所以我的问题是,如何优化瓷砖加载过程?如何取消不必要的线程?对此类问题的任何建议。提前致谢。

0 投票
1 回答
59 浏览

ios - 自定义图块未从 Documents 文件夹加载

我正在使用以下代码将自定义地图图块加载到我的应用程序中。当我使用 mainBundle 作为路径时,它按预期工作:

但是,如果我尝试更改文档文件夹的路径(因为我打算下载瓷砖文件夹并将它们存储在文档文件夹中),则以下代码不起作用:

任何提示都会很有用!

注意: tiles 文件夹存在于我的路径中。更具体地说,以下代码返回 YES

0 投票
1 回答
136 浏览

ios - MKTileOverlay 与 MTiles 数据库

有没有办法将MKTileOverlayMBTiles数据库一起使用?当覆盖区域越来越大时,直接在本机文件系统上存储许多小文件(切片)效率非常低。将它们放在一个地方会容易得多。但是,我找不到任何有关如何MBTiles使用MKtileOverlay.

0 投票
1 回答
504 浏览

android - 如何在 iOS 中使用带有自定义地图服务器、Swift 任何 Libraray 的 openstreet 地图?

我们有自己的开放式街道地图服务器maintain由我们公司提供。对于AndroidiOS,我们计划使用这个Map Server,就像

http://maps.mycompanyname.com/osmtiles/15/23655/15748.png。”

对于 Android,他们为所有显示、路由和所有这些事情提供了惊人的osmdroid 。它完美地工作。但是对于iOS,我们找不到这样的库。我们正在尝试使用MKMapView来做到这一点custom tiles但没有成功

喜欢拥有的功能,

  1. 用标记显示任何给定的位置。
  2. 显示多个标记点。
  3. 导航支持(可选)

希望您对此提供任何指导。请帮我解决一下这个。

0 投票
1 回答
423 浏览

ios - 为什么MKTileOverlay在ios​​,swift4中一遍又一遍地为openstreet地图重复相同的图块

我将 OpenStreet 地图与我们自己的 iOS 地图服务器一起使用。对于 iOS,我找不到任何可以与我们的开放式 StreetMap 服务器一起使用的第三方库(免费或付费)。然后我决定使用 MKTileOverlay 与 MKMapView 一起使用,如下所示:

在我的故事板中添加了一个 MapKit 插座。使用情节提要建立了插座连接并将代表设置为自我,然后这是我的 viewdidload 方法。

那么输出如下:

地图输出

对正在发生的事情有任何想法。当我滚动到左边的右边时,我只能看到这张图片。请帮我解决一下这个。

0 投票
0 回答
70 浏览

ios - 在 MKTileOverlay 上绘制 MKPolyLine 时的性能问题

我有一个 MKMapView,用户可以在其中选择是否要使用 Apple Maps 或替代地图源。在该地图上,我绘制了一条 MkPolyline 显示当前航向。通过删除和添加该行,该行每秒更新一次。我的应用程序进行了许多其他计算,在调试模式下,使用 Apple 地图时 CPU 级别约为 20%。如果我添加 MKTileOverlay 以使用替代地图源,CPU 级别将增加到 140% 左右。

有人知道这是什么原因吗?使用 MkTileOverlay 有什么不同?

0 投票
1 回答
321 浏览

ios - openweathermap MKTileOverlay 不在地图视图中显示

我试图阅读尽可能多的关于这个主题的文章。AFAIK 我这样做是正确的,但是我的地图从未显示我的通话结果。我试图查看 precipitation_new 图层并在测试时将我的模拟器位置设置为当前显示降水的区域,但我在地图上从未看到任何内容。这也是我第一次尝试使用 MKTileOverlay。

我已经尝试将 canReplaceMapContent 更改为 NO 和 YES,并以相同的结果更改 alpha。

我已验证我的地图委托已连接并正在处理我的所有其他地图调用。我也知道我正在下载请求,因为 openweathermap 因过于频繁地调用他们的站点而阻止了我几次(我现在只能获得 60 个请求/分钟)。

我正在执行以下操作:

一个小问题:我如何计算我提出的请求数量?似乎我这样做的方式并没有计算我提出的所有请求,而且我很快就被关闭了。

谢谢你的帮助。

[编辑] 实际上,我确实对其进行了子类化以缓存图块,但是图块始终是白色的(当我在浏览器中复制/粘贴链接时),但我仍然没有看到它们出现在地图上。该贴图仅显示法线贴图(未更改)。我尝试将“canReplaceMapContent”更改为 false,结果相同。我确认我到达了结果(数据,零)行,它在应该包含降水的图块上显示了 1444 个字节的计数。我使用另一个雷达应用程序来验证我正在寻找的地方有雨。这是我的代码:

0 投票
1 回答
94 浏览

swift - MKTileOverlay,180.0 / -180.0 处的图块未一致绘制

我使用 MKTileOverlay 类通过自己生成的平铺图像覆盖地图。

一切都很好,除了在经度 180 或 -180 度的边界上的瓷砖。在这条线上,只有有时才会绘制瓷砖......有人可以给我一个提示来解决这个问题吗?

你可以看到这个截图的效果

在此处输入图像描述

地图的这个特定区域应该被这个“默认”图块完全覆盖。平铺图像本身应该没问题,因为它们显示在其他平铺上。

我使用这个 loadTile(at: ... ) 函数来提供生成的平铺图像。打印语句显示该函数被调用用于所有图块并且结果函数得到一个有效的图像。只是没有绘制瓷砖..我使用标准的MKTileOverlayRenderer ..

..欢迎任何提示;-)