如何启用 MapKit 楼层?

Posted

技术标签:

【中文标题】如何启用 MapKit 楼层?【英文标题】:How to enable MapKit floor level? 【发布时间】:2019-02-12 11:00:44 【问题描述】:

我正在尝试在我的 Apple 应用中显示楼层高度。我知道在苹果地图中有一些选定的地方,比如机场或购物中心,可以看到这个楼层。我需要做到这一点。只需要显示可用的楼层。如图所示,图片右侧有5F、4F、3F、2F等。我已经在网上搜索过,但仍然没有任何线索。

【问题讨论】:

【参考方案1】:

您需要使用 MKOverlay。您可以将每个楼层作为叠加层添加到您的 MKMapView 中,并显示用户选择的任何楼层,隐藏其他楼层。

以下是制作叠加层的示例:

import MapKit

class MapOverlay: NSObject, MKOverlay 
  var coordinate: CLLocationCoordinate2D
  var boundingMapRect: MKMapRect

  override init() 
    let location = CLLocationCoordinate2D(latitude: 75.3307, longitude: -152.1929) // change these for the position of your overlay
    let mapSize = MKMapSize(width: 240000000, height: 200000000) // change these numbers for the width and height of your image
    boundingMapRect = MKMapRect(origin: MKMapPoint(location), size: mapSize)
    coordinate = location
    super.init()
  


class MapOverlayRenderer: MKOverlayRenderer 
  let overlayImage: UIImage
  init(overlay: MKOverlay, image: UIImage) 
    self.overlayImage = image
    super.init(overlay: overlay)
  

  override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) 
    guard let imageReference = overlayImage.cgImage else  return 

    let rect = self.rect(for: overlay.boundingMapRect)
    context.scaleBy(x: 1.0, y: -1.0)
    context.translateBy(x: 0.0, y: -rect.size.height)
    context.draw(imageReference, in: rect)
  

然后将其添加到您的地图中:

let mapOverlay = MapOverlay()
mapView.addOverlay(mapOverlay)

别忘了委托:

mapView.delegate = self

extension ViewController: MKMapViewDelegate 
  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer 
    return MapOverlayRenderer(overlay: overlay, image: UIImage(named: "overlayImage")!)
  

【讨论】:

以上是关于如何启用 MapKit 楼层?的主要内容,如果未能解决你的问题,请参考以下文章

didSelect 上的 MapKit/MKMapViewDelegate:如果启用了用户位置,则底部工作表不会打开

可拖动的 MapKit 注释

Mapkit,如何检测注释已加载

无法让 MapKit 工作

Swift:SwiftUI中MapKit的使用体验

如何使用 MapKit 中的名称搜索目的地?