MKOverlayRenderer для изображения радара NOAA не отображается должным образом (растянуто) - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь отобразить изображение радара 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)
        }
    }
}

Производит это:

enter image description here

1 Ответ

0 голосов
/ 19 июня 2020

Здесь имеется типологическое несоответствие:

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

Вы говорите, что это то место, где должно быть радиолокационное изображение. Но как узнать? Я не вижу, чтобы вы сверялись с радарным изображением, чтобы узнать, какой регион он изображает.

...