我正在使用此代码设置MKMapView
的区域,使其以pin
为中心,并缩放以显示大约10公里的区域。
CLLocationAccuracy accuracy = kCLLocationAccuracyKilometer;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(pin.coordinate, accuracy * 10.0f, accuracy * 10.0f);
[self.mapSubView setRegion:region animated:NO];
当运行针脚坐标为纬度-90,经度-58.359001159667969的代码时,生成region
,如下所示:
绘制mapSubView
时发生崩溃: -
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'无效区域 < center:-90.00000000,-58.35900116 span:+0.08953039, + 1462142065660629.00000000>'
我第一次尝试修复此问题是检查“edge”lat / long(-90,+ 90,-180,+ 180),这解决了这个问题。但是,如果纬度变为-89.99999,问题将返回。
我猜这是由于纬度为-90和/或区域跨度的经度delta如此大,导致一个区域有效地“超出了这个世界”:p
关于如何将地图围绕任何坐标固定在地图上的任何建议,显示一个~10km的区域,没有这种崩溃将非常感激。
答案 0 :(得分:4)
@ supp-f回答是对的
Swift 3 解决方案:
func safeSetRegion(_ region: MKCoordinateRegion) {
let myRegion = self.mapView.regionThatFits(region)
if !(myRegion.span.latitudeDelta.isNaN || myRegion.span.longitudeDelta.isNaN) {
self.mapView.setRegion(myRegion, animated: true)
}
}
答案 1 :(得分:1)
基于Sergey和supp-f的答案,您还必须检查最大跨度值。
纬度跨度最大值为180.0,经度跨度最大值为360.0
pd.read_html
答案 2 :(得分:0)
我能够重现崩溃。我认为它是SDK中的一个错误。
此测试也会失败,但没有崩溃:
MKCoordinateRegion region;
region.center.longitude = coord.longitude;
region.center.latitude = 90.f;//coord.latitude;
region.span.longitudeDelta = 0.02f;
region.span.latitudeDelta = 0.02f;
[self.mapView setRegion:region animated:NO];
那将是一个稳定的版本。只有在这里,该地区才非常大。如果有NSNotFound
,您可以测试delta值