如何在 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 以方便
我需要在 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 以方便