cha*_*hep 19 iphone mapkit mkmapview
任何人都可以确认setRegion"捕捉"到预定义的缩放级别,以及此行为是否与设计(虽然未记录)或已知错误一样?具体来说,似乎setRegion捕捉到与用户双击地图时使用的缩放级别相对应的相同缩放级别.
我正在尝试恢复以前保存的区域,但如果通过缩放缩放而不是双击缩放设置保存的区域,则此行为无法实现.
如果我在地图的当前区域调用regionThatFits,那么在mapkit方面的事情就会被打破的一个重要线索就是如此.它应该返回相同的区域(因为它显然适合地图的框架),但它返回的区域对应于下一个更高的预定义缩放级别.
setVisibleMapRect的行为类似.
任何进一步的见解或信息将不胜感激.
我找到了这些相关的帖子,但都没有包含解决方案或确切的确认,这实际上是一个mapkit错误:
编辑:
这是一个演示该问题的示例.所有值对我的地图视图的宽高比都有效:
MKCoordinateRegion initialRegion;
initialRegion.center.latitude = 47.700200f;
initialRegion.center.longitude = -122.367109f;
initialRegion.span.latitudeDelta = 0.065189f;
initialRegion.span.longitudeDelta = 0.067318f;
[map setRegion:initialRegion animated:NO];
NSLog(@"DEBUG initialRegion: %f %f %f %f", initialRegion.center.latitude, initialRegion.center.longitude, initialRegion.span.latitudeDelta, initialRegion.span.longitudeDelta);
NSLog(@"DEBUG map.region: %f %f %f %f", map.region.center.latitude, map.region.center.longitude, map.region.span.latitudeDelta, map.region.span.longitudeDelta);
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
DEBUG initialRegion: 47.700199 -122.367111 0.065189 0.067318
DEBUG map.region: 47.700289 -122.367096 0.106287 0.109863
Run Code Online (Sandbox Code Playgroud)
请注意纬度/经度增量值的差异.地图的值几乎是我要求的两倍.较大的值对应于用户双击地图时使用的缩放级别之一.
是的,它会捕捉到离散的水平.我做了很多实验,似乎像每个像素经度的2.68220906e-6度的倍数.
因此,如果您的地图填满整个屏幕宽度,第一个级别跨越.0008583度,那么您可以获得的下一级别是.001717的两倍,然后下一个级别是.003433的两倍,依此类推.我不确定他们为什么选择经度标准化,这意味着修正缩放级别取决于您所看到的世界的哪个部分.
我也花了很多时间试图理解这个数字的重要性.68220906e-6度.它出现在赤道约30厘米,这是有道理的,因为谷歌地图使用的高分辨率照片有30厘米的分辨率,但我希望他们使用纬度而不是经度来建立缩放级别.这样,在最大变焦时,你总是保留卫星图像的原始分辨率,但是谁知道,他们可能有一些聪明人的理由让它像那样工作.
在我的应用程序中,我需要显示一定范围的纬度.我将使用一些代码来尝试尽可能地缩放地图.如果有人有兴趣,请与我联系.
Nic*_*ick -1
正如您所描述的,我恢复了该区域,没有任何问题,也没有任何差异。如果没有一些代码可供查看,确实不可能判断出您的情况具体出了什么问题,但以下是对我有用的方法:
将中心值和跨度值保存在某处。当您恢复它们时,请特别设置中心和跨度。
恢复应该是这样的:
MKCoordinateRegion initialRegion;
initialRegion.center.latitude = Value you've stored
initialRegion.center.longitude = Value you've stored
initialRegion.span.latitudeDelta = Value you've stored
initialRegion.span.longitudeDelta = Value you've stored
[self.mapView setRegion:initialRegion animated:NO];
Run Code Online (Sandbox Code Playgroud)
另请记住,此方法在 4.0 中可用:`mapRectThatFits:edgePadding:MapRectThatFits 有助于添加合理的边框,以确保边缘上的地图注释不会被遮挡,并且您尝试显示的矩形完全可见。如果您想控制边框,请使用允许您设置 edgePadding 的调用。
| 归档时间: |
|
| 查看次数: |
7886 次 |
| 最近记录: |