我正在尝试使用MKMapView和MKMapCamera。到目前为止,我能够设置一切,并在3D模式/天桥配置地图。例如,我的地图中心是纽约帝国大厦,并使用构造函数设置了我的MKMapCamera:
public init(lookingAtCenterCoordinate centerCoordinate:
CLLocationCoordinate2D, fromDistance distance: CLLocationDistance,
pitch: CGFloat, heading: CLLocationDirection)所以我现在可以正确地看到在中心的帝国大厦。现在,我想要做的是改变我的MKMapCamera的“标题”,指向一个不同的方向:意思是没有位于帝国大厦的中心。
现在,如果我改变相机的标题,它实际上会移动相机,并且仍然保持帝国大厦在我的MKMapView的中心。
查看各种API,我无法在更改标题后找到用于“重新计算”新的MKMapView中心的API。
我想得到当前MKMapView的相反行为,在这里,我希望根据我指定的标题修复映射中心移动的MKMapCamera。
实现这一目标的正确途径是什么?
发布于 2016-08-17 10:24:10
当您更改MKMapCamera对象的标题,该对象正在查看地图的中心,您正在改变相机围绕该中心点的旋转角度。想象一下,摄像机是用一根绳子绑在中心点上的。照相机只能绕着中心点移动一个圆圈。摄像机围绕中心点移动的距离由摄像机的航向控制。在您的例子中,中心点是帝国大厦,因此更改相机的标题将使相机在帝国大厦周围绕成一个圆圈,同时保持相机面向大楼。
如果我正确理解您的要求,您希望保持您的相机位置固定,并改变位置显示在地图的中心使用一个标题从相机。要实现这一点,您需要为地图计算一个新的中心坐标。新的中心坐标将是以你的相机为中心的假想圆周上的一个点。圆的半径是地图中心点与照相机之间的距离。
此计算使用相机的位置、摄像机的航向和距相机的距离来计算将成为地图新中心的纬度和经度坐标。GreatCircle是一个Objective库,它作为执行所需计算的CLLocation的扩展提供了locationWithBearing:distance:方法:
- (nonnull CLLocation *)locationWithBearing:(CLLocationDirection)bearing
distance:(CLLocationDistance)distance;因此,考虑到相机c的位置、航向(方位) h (以度计)和距离d (以米为单位),地图m的新中心将是(在Swift中):
let m = c.locationWithBearing(h, distance: d)https://stackoverflow.com/questions/33849988
复制相似问题