Я пытаюсь отобразить изображение радара NOAA в моем MapView, используя подкласс MKOverlay в сочетании с подклассом MKOverlayRenderer. Я просмотрел несколько других ссылок и попробовал несколько методов, но я либо вообще не получаю изображения (потому что mapRect не подходит), либо изображение, которое я получаю, растягивается вверх в Канаду и вниз в Южную Америку. Я считаю, что восток / запад в порядке.
Кто-нибудь может указать мне решение? Похоже, это проблема с mapRect в моем рендерере, но после нескольких часов попыток различных вещей я еще не решил ее.
Вот ссылки, на которые я смотрел до сих пор:
MKOverlayRenderer растягивает изображение
Правильное использование MKOverlayView
MapKit Добавление растровой карты через MKOverlay Проблема странной визуализации
Спасибо!
метод вызова дисплея:
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)
}
}
}
Производит это: