MKCoordinateRegion的合法性检查

7

有没有快速测试MKCoordinateRegion是否合法的方法?我不小心把纬度和经度调换了,导致应用程序崩溃。我想在实际执行setRegion之前预览一下是否可以执行。MKCoordinateRegionMake会测试我给它的值吗?

谢谢。


可能需要澄清“混淆”的含义。您是交换了纬度和经度的值,还是输入了超出范围的值? - TechZen
我已经交换了它们,但在将这些值插入到“setRegion”之前,我真的想检查一下是否存在任何问题。 - nevan king
2个回答

10

事实证明我在某个地方交换了我的经纬度。这是我最终使用的代码:

// check for sane span values
if (currentRegion.span.latitudeDelta <= 0.0f || currentRegion.span.longitudeDelta <= 0.0f) {
    currentRegion.span.latitudeDelta = 1.0f;
    currentRegion.span.longitudeDelta = 1.0f;
}
// check for sane center values
if (currentRegion.center.latitude > 90.0f || currentRegion.center.latitude < -90.0f ||
    currentRegion.center.longitude > 180.0f || currentRegion.center.longitude < -180.0f
    ) {
    // Take me to Tokyo.
    currentRegion.center.latitude = 35.4f;
    currentRegion.center.longitude = 139.4f;
}

1
你可能还想检查 currentRegion.span.latitudeDeltacurrentRegion.span.longitudeDelta 是否大于 360.0f - AmiiQo

-1

我对地图的操作不是很熟悉,所以请谨慎参考。

听起来你需要在使用纬度、经度和跨度之前对它们进行范围检查。纬度和经度在所有情况下都应该在-180到180之间。

编辑01:

我认为交换纬度和经度不会导致崩溃。它们都具有完全相同的单位(度)和范围(-180->180)。所有有效的纬度值也都是有效的经度值,反之亦然。因此,MKCoordinateRegionMake无法知道您已经交换了值,因为它们仍然是有效的坐标,只是不在您想要的位置附近。

我认为你的问题出在其他地方。


2
感谢您的回答和编辑。经度的最大值为180°,但纬度的最大值只有90°。我在代码的其他地方交换了它们,但是您的答案给了我编写代码的提示。 http://zh.wikipedia.org/wiki/%E7%BA%AC%E5%BA%A6 - nevan king
1
当时我就知道了!我的老童子军指导一定在坟墓里翻滚。很奇怪,即使你知道更好的方法,但有时会困扰于一个想法上。当然,这也解释了为什么我击中了冰山。 - TechZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接