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



我需要在 Apple 地图中缩放图像/图标1:1。在互联网上找不到有关该主题的任何信息。

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

为了清楚起见,我需要将图像与地图的缩放级别联系起来。例如,显示像猫这样的对象;)或地图上实际大小的树。第一步,对象应该停留在屏幕中间,这样我就可以旋转和重新排列下面的地图。稍后喜欢将对象固定到地图上。

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

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 https://stackoverflow.com/a/45989625/10878331
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 以方便

先生

你可以简单地将UIImage拖到故事板中,将宽度或高度设置为图像,然后将纵横比设置为1:1 (只需按控制按钮并将线条从图像视图拖到图像视图,然后按选项即可使用该选项(

或者您可以通过编程方式执行此操作

有好的一天

最新更新