在Swift中使用MapKit进行部分隐藏覆盖

时间:2016-04-09 14:20:09

标签: ios swift mapkit mkoverlay

由于IndoorAtlas SDK,我目前正在构建一个室内位置的iPad应用程序。

我首先尝试自己构建整个地图,但是我有很大的准确性问题,这些问题在Apple(MapKit)提供的地图上显示为叠加时似乎已得到解决。

但是,我现在对我的自定义floorPlan图像叠加有问题,这似乎被Apple Map部分隐藏了。我已经有隐藏的标签,交通,兴趣点,建筑物,我的地图设置为以标准模式显示。

我的叠加隐藏部分取决于相机的高度,这让我相信瓷砖是负责任的。

通过此功能将floorPlan图像添加到地图上:

func indoorLocationManager(manager: IALocationManager, didEnterRegion region: IARegion) {
    print("Floor plan changed to \(region.identifier)")
    ressourceManager.fetchFloorPlanWithId(region.identifier, andCompletion: {
        (floorPlan:IAFloorPlan?, error:NSError?) -> () in
        if error == nil {
            self.floorPlan = floorPlan
            self.fpImage = UIImage(imageLiteral: "Map")
            if self.mapOverlay != nil {
                map.removeOverlay(self.mapOverlay)
            }
            self.mapOverlay = MapOverlay(floorPlan: self.floorPlan!)
            map.addOverlay(self.mapOverlay, level: .AboveRoads)
        } else {
            print("Error fetching floorplan")
        }
    })
}

位置更新如下:

func indoorLocationManager(manager: IALocationManager, didUpdateLocations locations: [AnyObject]) {
    let loc: CLLocation = (locations.last as! IALocation).location!
    print("Long. \(loc.coordinate.longitude) lat. \(loc.coordinate.latitude)")

    if circle != nil {
        map.removeOverlay(circle)
    }

    circle = MKCircle(centerCoordinate: loc.coordinate, radius:3)
    map.addOverlay(circle)

    camera = nil
    camera = MKMapCamera(lookingAtCenterCoordinate: loc.coordinate, fromEyeCoordinate: loc.coordinate, eyeAltitude: 300)
    camera.heading = loc.course
    map.setCamera(camera, animated: true)
}

我的叠加视图就像这样呈现:

class MapOverlayView : MKOverlayRenderer {

    let floorPlan: IAFloorPlan!
    let image: UIImage!

    init(overlay: MKOverlay, overlayImage: UIImage, floorPlan: IAFloorPlan) {
        self.image = overlayImage
        self.floorPlan = floorPlan
        super.init(overlay: overlay)
    }

    override func drawMapRect(mapRect: MKMapRect, zoomScale: MKZoomScale, inContext ctx: CGContextRef) {
        let theMapRect: MKMapRect = self.overlay.boundingMapRect
        let theRect: CGRect = self.rectForMapRect(theMapRect)
        // Rotate around top left corner
        CGContextRotateCTM(ctx, degreesToRadians(self.floorPlan.bearing))
        UIGraphicsPushContext(ctx)
        image.drawInRect(theRect, blendMode: .Normal, alpha: 1.0)
        UIGraphicsPopContext()
    }

    func degreesToRadians(x: Double) -> CGFloat {
        return CGFloat(M_PI * x / 180.0)
    }

}

Apple Map是在初始化时添加的,Overlay会在稍后添加,但我真的没有看到任何可能导致问题的原因..

一种解决方案可能就是完全隐藏Apple Map,但如果不隐藏其叠加层,我无法做到这一点。

问题可能来自加载地图吗?或者这是一个图形问题?

Here is a screen of the iPad

0 个答案:

没有答案