Mkmapview MKMapCamera更改航向以查看不同的地图中心

Mkmapview MKMapCamera更改航向以查看不同的地图中心,mkmapview,mapkit,mkmapcamera,Mkmapview,Mapkit,Mkmapcamera,我正在尝试使用MKMapView和MKMapCamera。到目前为止,我能够在3D模式/天桥中设置所有内容并配置地图。 我以我的地图中心纽约帝国大厦为例,使用构造器设置MKMapCamera: public init(lookingAtCenterCoordinate centerCoordinate: CLLocationCoordinate2D, fromDistance distance: CLLocationDistance, pitch: CGFloat, heading

我正在尝试使用MKMapViewMKMapCamera。到目前为止,我能够在3D模式/天桥中设置所有内容并配置地图。 我以我的地图中心纽约帝国大厦为例,使用构造器设置MKMapCamera:

public init(lookingAtCenterCoordinate centerCoordinate:
   CLLocationCoordinate2D, fromDistance distance: CLLocationDistance, 
   pitch: CGFloat, heading: CLLocationDirection)
所以我现在可以清楚地看到帝国大厦的中心。现在,我希望能够将MKMapCamera的“标题”(CLLocationDirection)更改为指向另一个方向:这意味着没有帝国大厦位于中央

现在,如果我改变相机的方向,它实际上会移动相机,并且仍然保持帝国大厦在我的MKMapView的中心

查看各种API,在更改标题后,我找不到什么API可以用来“重新计算”新的MKMapView中心

我希望得到当前MKMapView的相反行为,我希望将我的MKMapCamera固定在地图中心根据我指定的标题移动的位置


实现这一点的正确方法是什么?

当您更改正在查看地图中心的对象的标题时,您正在更改相机围绕该中心点的旋转角度。假设相机用一根绳子系在中心点上。相机只能围绕中心点作圆周运动。摄影机围绕中心点移动的距离由摄影机的航向控制。在您的示例中,中心点是帝国大厦,因此更改摄影机的标题将使摄影机围绕帝国大厦旋转一圈,同时使摄影机面向建筑物

如果我正确理解您的要求,您希望固定相机位置,并使用相机的标题更改地图中心显示的位置。要完成此操作,需要计算地图的新中心坐标。新的中心坐标将是以相机为中心的假想圆圆周上的一点。圆的半径是地图中心点与摄影机的距离

此计算使用摄影机的位置、距摄影机的航向和距摄影机的距离来计算将成为地图新中心的纬度和经度坐标。是一个Objective-C库,它提供了
locationWithBearing:distance:
方法,作为执行所需计算的扩展:

- (nonnull CLLocation *)locationWithBearing:(CLLocationDirection)bearing
                                   distance:(CLLocationDistance)distance;
因此,给定相机的位置
c
、航向(方位)
h
(以度为单位)和距离
d
(以米为单位),地图的新中心
m
将是(以Swift为单位):


谢谢,我不知道GreatCircle图书馆!最后我自己写了一些类似的东西,但是我会用我的来检查lib的实现。
let m = c.locationWithBearing(h, distance: d)