NOAA 雷达图像的 MKOverlayRenderer 无法正确显示(拉伸)

Posted

技术标签:

【中文标题】NOAA 雷达图像的 MKOverlayRenderer 无法正确显示(拉伸)【英文标题】:MKOverlayRenderer for NOAA radar image not displaying properly (stretched) 【发布时间】: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)
        
    

产生这个:

【问题讨论】:

【参考方案1】:

这里有一个类型不匹配:

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

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

【讨论】:

既然您指出了这一点,我明白您的意思了。如何从我想要使用的左上角(或任何选择使用的)lat/lon 和 img 宽度/高度的图像中获取区域和/或 mapRect?谢谢 对不起,但在我看来,根据您提供的信息,我已经完全回答了这个问题。我知道你有什么关于图像含义的信息,即它与地球重叠的位置,因为你没有告诉我。问题是为什么叠加在您的地图上时没有出现在正确的位置/大小,我回答了这个问题。

以上是关于NOAA 雷达图像的 MKOverlayRenderer 无法正确显示(拉伸)的主要内容,如果未能解决你的问题,请参考以下文章

雷达图像SAR合成孔径雷达成像及处理matlab源码

雷达图像SAR合成孔径雷达成像及处理matlab源码

Google Maps API 上的雷达图像 [关闭]

自动驾驶的眼睛:图像识别和激光雷达

距离多普勒二维图像绘制

青创行基于图像识别的设备监控告警系统