1

在我的一个 iPad 应用程序中,我使用 MKMapView 来显示区域,但我遇到了一个奇怪的问题。我使用 setRegion: animated: 方法从 noOf 点设置特定区域。当我从地图中的特定点放大时,地图会显示没有地点/位置图像的网格。以前有人有同样的问题吗?有人可以提供如何处理此缩放级别问题的解决方案吗?

附上图片以供更多参考

最初,我使用 2d 坐标调用 mapview 的 setRegion: 方法,其跨度为 0.0014f,用于纬度和经度增量值。所以我得到以下图像。

在此处输入图像描述

之后,如果我再次尝试放大地图视图,则会出现以下情况

在此处输入图像描述

我担心的是,是否有办法限制放大以避免黑色图层显示/一旦地图视图达到其最佳缩放单元格,我该如何限制放大。

4

3 回答 3

0

当您放大 CLOSE 时,地图视图想要显示最详细的图块而不是其他任何东西。对于某些区域(政府、军事或什么都没有的地方)没有瓷砖,它会碰到!

问题是您事先不知道哪里有或没有任何可用的瓷砖。

我能想象的:当你放大。 regionWillChange:被调用,然后willStartLoading:应该被调用,然后mapViewDidFailLoadingMap:withError在没有瓷砖的情况下

(我在这里猜)

于 2013-05-07T09:43:55.127 回答
0

Swift中,您应该使用以下代码来定义最小和最大缩放限制

let MIN_ZOOM_LEVEL = 16.5
let MAX_ZOOM_LEVEL = 18.0

extension UIViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
            let coordinate = CLLocationCoordinate2DMake(mapView.region.center.latitude, mapView.region.center.longitude)
            let zoomLevel = getZoomLevel()

            if MIN_ZOOM_LEVEL > zoomLevel || MAX_ZOOM_LEVEL < zoomLevel {
                let region = MKCoordinateRegionMake(coordinate, self.latestSpan)
                mapView.setRegion(region, animated:true)
            } else {
                self.latestSpan = MKCoordinateSpanMake(0, 360 / pow(2, Double(zoomLevel-1)) * Double(mapView.frame.size.width) / 256)
            }
    }
}


func getZoomLevel() -> Double {
        var angleCamera = mapView.camera.heading
        if angleCamera > 270 {
            angleCamera = 360 - angleCamera
        } else if angleCamera > 90 {
            angleCamera = fabs(angleCamera - 180)
        }
        let angleRad = M_PI * angleCamera / 180
        let width = Double(mapView.frame.size.width)
        let height = Double(mapView.frame.size.height)
        let heightOffset : Double = 20
        let spanStraight = width * mapView.region.span.longitudeDelta / (width * cos(angleRad) + (height - heightOffset) * sin(angleRad))
        return log2(360 * ((width / 256) / spanStraight)) + 1
}
于 2018-04-10T10:07:34.353 回答
-1
//fix for ios6
if (region.span.latitudeDelta < .0005f)
    region.span.latitudeDelta = .0005f;
if (!region.span.longitudeDelta < .0005f)
    region.span.longitudeDelta = .0005f;

确保您的纬度/经度区域跨度没有设置得太低,它会清除。

为清楚起见进行编辑:在 iOS6 中,将跨度增量设置得太低(例如小于 0.0005)将导致它按字面意思将地图视图设置为该区域,无论它是否具有该级别细节的平铺图像集。IE:如果放大得太远,则没有地图图块可以代表该区域。在 iOS5 中,它会处理试图放大太多并剪辑区域而不会导致问题。

要解决此问题,您可以将区域跨度 lat 和 lon delta 设置为最小值,以便地图仍然显示自己。在设置地图区域或导致其更改时,请检查最小值。

于 2013-06-27T19:53:45.223 回答