如何在 Apple 地图中缩放图像 1:1

How to Scale a Image 1:1 in Apple Maps

我需要在 Apple 地图中缩放 image/icon 1:1。在 Internet 上找不到关于该主题的任何信息。

想法是在 MKMapView 上放置一个简单的 jpg 作为 UIImageView。但如果有其他方法请告诉我

为了清楚起见,我需要将图像与地图的缩放级别相关联。例如,在地图上以真实大小显示猫 ;) 或树等对象。第一步,对象应该留在屏幕中间,这样我就可以旋转并重新排列位于下方的地图。稍后点赞将对象固定到地图上。

先生

您只需将 UIImage 拖到您的情节提要中并为您的图像设置宽度或高度,然后设置纵横比 1:1 (只需按控制按钮并将线从图像视图拖到图像视图,然后按选项以选择该选项)

或者您可以通过编程方式完成

祝你有愉快的一天

我终于想到了这样的东西:

class MapViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()        
        mapView.delegate = self

        draw()
    }

    func draw() {

        let region = mapView.region
        let center = region.center

        let pointsPerMeter = MKMapPointsPerMeterAtLatitude(center.latitude)

        // Real-World-Object with 24 Meters length and 4 Meters width
        let objectLength = pointsPerMeter*24
        let objectWidth = pointsPerMeter*4
        let mapSize = MKMapSize.init(width: objectLength, height: objectWidth)
        let mapPoint = MKMapPoint.init(center)
        let objectRect = MKMapRect.init(origin: mapPoint, size: mapSize)

        // clear the map
        mapView.removeOverlays(mapView.overlays)

        // create image overlay from Real-World-Object
        let objectOverlay = ImageOverlay(image: UIImage(named: "nameOfYourImageAsset")!, rect: objectRect.offsetBy(dx: -objectLength/2 , dy: -objectWidth/2))

        // add overlay to map
        mapView.addOverlay(objectOverlay)

    }

}

// found here 
class ImageOverlay : NSObject, MKOverlay {
    let image:UIImage
    let boundingMapRect: MKMapRect
    let coordinate:CLLocationCoordinate2D

    init(image: UIImage, rect: MKMapRect) {
        self.image = image
        self.boundingMapRect = rect
        self.coordinate = rect.origin.coordinate
    }
}

class ImageOverlayRenderer : MKOverlayRenderer {
    override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {

        guard let overlay = self.overlay as? ImageOverlay else {
            return
        }

        let rect = self.rect(for: overlay.boundingMapRect)

        UIGraphicsPushContext(context)
        overlay.image.draw(in: rect)
        UIGraphicsPopContext()
    }
}

代码还不是很漂亮,也不是最优的,但我猜它有点管用。我假设您已经有了您的用户位置或任何点,因此 mapView.region 具有有效值。

守则仍在进行中。我将尝试将一个简单的 UIImage 放在地图的顶部,我希望它可以放入地图的上下文中。我想我需要设置 mapView.isZoomEnabled = false 以方便