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 无法正确显示(拉伸)的主要内容,如果未能解决你的问题,请参考以下文章