问题标签 [mkmapsnapshotter]

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 投票
0 回答
727 浏览

ios - 当相机变焦/高度水平接近时,MKMapSnapshotter 卫星错误图像

我在使用 MKMapsnapshotter 时收到错误图像。我尝试手动缩小(设置更高的相机高度),这似乎解决了这个问题,但我不确定如何以编程方式处理这个问题。有没有办法检测到这种错误然后重置相机高度?这是 MapKit 错误吗?当我使用卫星或混合地图类型时会发生这种情况。

http://imgur.com/vWsu3Nc

任何帮助将不胜感激。谢谢!


编辑:

经过更多的研究和测试,我能够找到一种解决方法。

该错误图像主要发生在海洋/海洋上的卫星图像中。我发现我可以使用反向地理编码器并检查地标数组以查看该位置是否在城市中。如果不是,那么它可能在海洋上空。

0 投票
4 回答
868 浏览

ios - iOS MKMapShapshotter 完成块并不总是被调用

我正在尝试使用新的 iOS7 MKMapSnapshotter 来生成静态地图图像。每当我的应用需要地图时,我都会调用以下命令:

在大多数情况下,这很好用。但是有时,设备似乎因地图请求而过载,然后停止渲染。在我的日志文件中,我将看到关于“已分配快照程序”的第一条日志语句,但从未看到“快照程序完成块”消息。

我的请求是否有可能永远不会从调度队列中执行?有没有人遇到过这个问题?

0 投票
1 回答
689 浏览

ios - 将 MKTileOverlayPath 转换为 MKMapRect?

我正在使用以下方法:

- (void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *data, NSError *error))result

MKTileOverlayPath 给了我一个 x、y 和 z。我正在尝试沿此路径拍摄该区域的 Apple Maps 版本的快照,以便我可以对图像应用过滤器。

我正在使用 MKMapSnapshotter,但不知道给它什么值来绘制该区域的苹果地图表示。

或者也许还有另一种从该区域获取地图图像的已知方法。

0 投票
1 回答
375 浏览

ios - MKTileOverlay 中的 MKMapSnapshotter 出现移位

我用下面的代码覆盖了loadTileAtPath:result:方法。MKTileOverlay它只是将 转换MKTileOverlayPath为 MKMapRect,然后用于MKMapSnapshotter拍摄正在查看的地图区域的快照。从那里,我会使用地图的图像做进一步的工作。但是现在,我只是将快照作为结果数据返回,所以我可以看到它们在地图上的表现如何。

鉴于这里的数学是正确的,理论上它应该显示一个完美的地图。相反,它显示:

在此处输入图像描述

这就是它的样子(下图的样子):

在此处输入图像描述

0 投票
0 回答
492 浏览

ios - MKMapSnapshotter 使用大量的 CPU 和 RAM

MKMapSnapshotter 在模拟器中似乎最多使用 2GB 的 RAM,并触发内存警告并将我的应用程序在设备上挂起很长时间。我不确定我的设置的哪一部分导致了这种情况。

这种巨大的使用量发生在同时检索多个图像时,但即使是一个接一个地检索多个图像,坦率地说,似乎也使用了大量的 RAM,峰值为 600MB,并且完全占用了 CPU,使用率高达 190%。我已经尝试删除所有其他逻辑,甚至在请求图像后不保存图像,并且仍然会出现巨大的 RAM 和 CPU 使用率。

这不是故意的。一定有一些我没有设置的东西,导致这种失控的资源占用。这是我的选项代码:

我在这里想念什么?

0 投票
1 回答
2461 浏览

ios - 将 MKMapSnapshotter 作为 NSData 保存在内存中 - Swift

我正在尝试截取我的 MKMapView 的屏幕截图。我通常使用 Objective C 中的以下代码来实现这一点。

我想知道如何将 NSData 对象保存在内存中,而不是保存图像,然后立即从中读取。

我也想知道如何用 Swift 编写它 - 特别是完成处理程序部分。我查看了文档 - 但不确定语法:https ://developer.apple.com/library/prerelease/iOS/documentation/MapKit/Reference/MKMapSnapshotter_class/index.html#//apple_ref/c/tdef/MKMapSnapshotCompletionHandler

0 投票
1 回答
97 浏览

ios - 从 MKMapSnapShot 返回上一个 MKPinAnnotation 坐标

我有两个视图控制器,MapViewVC并且MapDetailViewVC.

我在MapView.

当点击时,这些注释(具有特定的默认“高度”视图)会启动一个MapDetailVC显示注释的快照,其中相机属性设置为确定的高度(4000 m)。

结果,当按下 上的“返回”按钮时MapDetailVC,视图将返回到MapViewVC与 ; 中显示的高度相同的高度MapDetailVC。不是原始高度,这只是点击标注按钮时正在查看的区域。

我想知道(从那些更有经验的人MapKit那里)是否有办法在mapView点击“返回”按钮时将返回设置为原始设置。

谢谢

0 投票
1 回答
227 浏览

ios - 串行创建多个 MKMapView 快照

我编写并使用THIS CLASS创建MKMapView带有自定义注释的小快照图像,并将它们设置UIImageViewUITableViewCell. 我以这样的方式编写它,调用和忘记,而不用过多担心内存消耗。

这个怎么运作:

  • 我有一本包含地点相关值(名称、纬度、经度等)的字典 [来源是 FourSquare API]。

  • 然后我请求CellMapFactory(参见 Gist)为该位置创建一个图像,并将其设置在来自子类的图像视图中,UITableViewCell如下所示:

    /li>
  • 然后,CellMapFactory 使用MKMapSnapshotOptionsMKMapSnapshotter和自定义注释来创建此图像,并在成功完成后将其设置在引用的图像视图中。

  • 此外,在成功完成后,我使用 手动将图像缓存到磁盘SDWebImageManager,以便下次请求同一位置的屏幕截图时,将从SDWebImage磁盘缓存中获取它,而不是重做整个过程。

问题

地图创建的过程,以及将完成的图像设置到图像视图的过程是绝对没问题的。但是,当表格中超过 1 个单元格需要绘制这些不同的快照时,每个单元格都会为每个请求的快照创建一个新实例CellMapFactory,这反过来又会MKMapView在应用程序窗口中添加一个新实例。这疯狂地增加了内存使用量。

所需的解决方案

我想CellMapFactory连续创建这些快照。例如,如果我表中的 20 个单元格需要 20 个唯一快照,CellMapFactory则必须以串行方式(队列?)处理它们,并一次创建一个快照,使用相同的MKMapView. 我看到它的方式(也许我错了),这将有助于极大地限制内存消耗。

这是一个示例屏幕截图,仅供记录:

在此处输入图像描述

任何帮助(以及所需解决方案的变体)将不胜感激。谢谢。

0 投票
1 回答
482 浏览

ios - 清除 MKSnapshotter 内存

我目前正在使用,MKSnapshotter但我注意到(类似于 MKMapView)它会占用大量内存,并且在应用程序运行期间从不释放它。我试过释放内存但没有用:

任何帮助是极大的赞赏。

更新 包括更多细节

0 投票
0 回答
173 浏览

ios - 使用 MKMapSnapshotter 捕捉整个世界

我正在尝试使用适用于 iOS 的 MKMapSnapshotter Api 获取整个世界的图像。我是否将 MKMapSnapshotterOptions 的 mapRect 设置为 MKMapRectWorld 或将区域设置为 Span(180,360) 都没有关系,它始终会创建从南美洲边缘到亚洲以及从欧洲中部到非洲末端的图像。

我还尝试更改 MKMapSnapshotterOptions 的大小。

有没有办法捕捉整个世界?

谢谢,狮子座