【发布时间】:2020-10-09 21:30:13
【问题描述】:
我正在尝试使用子类 MKOverlay 和子类 MKOverlayRenderer 将 NOAA 雷达图像显示到我的 MapView 中。我查看了其他几个链接并尝试了几种方法,但我要么根本没有得到任何图像(因为 mapRect 不正确),要么我得到的图像被延伸到加拿大并向下延伸到南美。我相信 东/西都可以。
有人可以指出我的解决方案吗?我的渲染器中的 mapRect 似乎有问题 但是经过几个小时的尝试,我还没有解决它。
这是我目前查看的链接:
MKOverlayRenderer stretches image
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)
}
}
}
产生这个:
【问题讨论】: