由于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,但如果不隐藏其叠加层,我无法做到这一点。
问题可能来自加载地图吗?或者这是一个图形问题?