【问题标题】:MKOverlayRenderer for NOAA radar image not displaying properly (stretched)NOAA 雷达图像的 MKOverlayRenderer 无法正确显示(拉伸)
【发布时间】:2020-10-09 21:30:13
【问题描述】:

我正在尝试使用子类 MKOverlay 和子类 MKOverlayRenderer 将 NOAA 雷达图像显示到我的 MapView 中。我查看了其他几个链接并尝试了几种方法,但我要么根本没有得到任何图像(因为 mapRect 不正确),要么我得到的图像被延伸到加拿大并向下延伸到南美。我相信 东/西都可以。

有人可以指出我的解决方案吗?我的渲染器中的 mapRect 似乎有问题 但是经过几个小时的尝试,我还没有解决它。

这是我目前查看的链接:

MKOverlayRenderer stretches image

Proper use of MKOverlayView

MapKit Adding Raster Map via MKOverlay Weird Rendering Issue

谢谢!

调用显示的方法:

func loadRadarImage()
{
    let center = CLLocationCoordinate2D(latitude: 47.6062, longitude: -122.3320)
    let overlay = RadarOverlay(coord: center, rect: self.mapView.visibleMapRect)

    self.mapView.addOverlay(overlay, level: .aboveRoads)
}

MKOverlay:

class RadarOverlay: NSObject, MKOverlay {

    var coordinate: CLLocationCoordinate2D
    var boundingMapRect: MKMapRect

    init(coord: CLLocationCoordinate2D, rect: MKMapRect) {
        self.coordinate = coord
        self.boundingMapRect = rect
    }
}

MKOverlayRenderer:

@objcMembers
class NOAAMapOverlayRenderer : MKOverlayRenderer
{
    var radarImage : UIImage?

    init(overlay: MKOverlay, overlayImage: UIImage)
    {
        self.radarImage = overlayImage

        super.init(overlay: overlay)
    }

    override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext)
    {
        if let mapImage = self.radarImage?.cgImage
        {
            let mapRect = rect(for: overlay.boundingMapRect) // CGRect
            context.scaleBy(x: 1.0, y: -1.0)
            context.translateBy(x: 0.0, y: CGFloat(-mapRect.size.height))
            context.draw(mapImage, in: mapRect)
        }
    }
}

产生这个:

【问题讨论】:

    标签: swift mkoverlay noaa


    【解决方案1】:

    这里有一个类型不匹配:

    RadarOverlay(coord: center, rect: self.mapView.visibleMapRect)
    

    你是说那是雷达图像应该在的地方。但是你怎么知道?我没有看到您查看雷达图像来了解它所描绘的区域。

    【讨论】:

    • 既然您指出了这一点,我明白您的意思了。如何从我想要使用的左上角(或任何选择使用的)lat/lon 和 img 宽度/高度的图像中获取区域和/或 mapRect?谢谢
    • 对不起,但在我看来,根据您提供的信息,我已经完全回答了这个问题。我不知道你有什么关于图像含义的信息,即它与地球重叠的位置,因为你没有告诉我。问题是为什么叠加在您的地图上时没有出现在正确的位置/大小,我回答了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2020-08-27
    • 2021-09-26
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多