ios - 在 UIImage 中渲染 MKPolyline

标签 ios mapkit core-graphics

我需要渲染 MKPolylineUIImage不使用 MKMapView如果可能的话(主要是出于性能原因,我想尽快显示路径,而 Map screenshotter 会异步提供 map ,就像应用程序 Strava 所做的那样)。

我想出了这段代码:

func pathImageForSize(size: CGSize) -> UIImage {
    let region = regionForPath() // MKCoordinateRegion
    let coordinates = locations.map { $0.coordinate }
    UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale)

    let context = UIGraphicsGetCurrentContext()

    CGContextSetStrokeColorWithColor(context, UIColor.palette_mainColor().CGColor)
    CGContextSetLineWidth(context, 4.0)
    CGContextBeginPath(context)

    let origin = CGPoint(x: region.center.latitude - region.span.latitudeDelta / 2, y: region.center.longitude - region.span.longitudeDelta / 2)

    for (index, coordinate) in coordinates.enumerate() {
        let point = CGPoint(x: ((CGFloat(coordinate.latitude) - origin.x) / CGFloat(region.span.latitudeDelta)) * size.width,
                            y: ((CGFloat(coordinate.longitude) - origin.y) / CGFloat(region.span.longitudeDelta)) * size.height)

        if index == 0 {
            CGContextMoveToPoint(context, point.x, point.y)
        } else {
            CGContextAddLineToPoint(context, point.x, point.y)
        }
    }

    CGContextStrokePath(context)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
}

该代码基本上重新调整坐标并使用 CoreGraphics 绘制它们。
路径已绘制,但它也旋转了 90 度,如您在此处看到的:

MapKit 渲染的折线:
MapKit polyline

我的代码渲染的折线:
CoreGraphics polyline

知道我做错了什么吗?

最佳答案

我怀疑这是因为您将纬度用作“x”,将经度用作“y”。纬度是垂直维度(在顶部为北的 map 上),经度是水平维度。

关于ios - 在 UIImage 中渲染 MKPolyline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37501535/

相关文章:

security - 如何加密/解密核心数据中的数据?

ios - SoundCloud 与 Facebook 的连接在 iOS 中不起作用

ios - 无法从核心图、RealTimePlot 中删除或隐藏轴

objective-c - 自定义uiview下的阴影

iOS 以编程方式截取屏幕截图会弄乱图像

ios - 如何使用 WindowsAzureMobileServices.framework 修复 iOS 项目中的重复符号错误

ios - 以中间没有中间间距的方式设置 UICollectionViewCell 的大小

ios - 点击 Collection View 单元格以向 map 添加注释

ios - 如何在 map 上的两点之间绘制箭头? map 工具包

iphone - IOS6 防止/限制在 MKMapView 中缩放