首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MKMapView中计算方位在180度时给出了错误的值

在MKMapView中计算方位在180度时给出了错误的值
EN

Stack Overflow用户
提问于 2018-05-21 11:02:36
回答 1查看 745关注 0票数 1

我需要画线来演示苹果地图上的货物运输。为了澄清起点和终点,我在目标side.The箭头上画了一个小箭头,分别绘制,但在一个情况下是相反的。

代码语言:javascript
复制
>-->-->-->- 

而不是

代码语言:javascript
复制
<--<--<--<-

我正在使用MKMapView和MKPolyline绘制线。我使用MKOverlay添加方向箭头。我遵循的步骤是,

  1. 计算轴承 资料来源:CLLocationCoordinate2D(纬度:-33.8392932,经度: 151.21519799999999)目的地:CLLocationCoordinate2D(纬度: 39.645516999999998,经度:-104.598724) 使用以下函数 打开静态漏斗getDirectionOf( _ supplyLineWithCoordinates: CLLocationCoordinate2D) -> CGFloat {-> let sourceCoordniate = supplyLineWithCoordinates.first,让destinationCoordniate = supplyLineWithCoordinates.last else {fatalError(“未找到补给线的坐标”)}}让sourcePoint: MKMapPoint = MKMapPointForCoordinate(sourceCoordniate)让destinationPoint: MKMapPoint =supplyLineWithCoordinates x: Double = destinationPoint.x -SourcePoint.xlet y: Double = destinationPoint.y -SourcePoint.yvar=MKMapPoint(fmod((y,x),360.0)如果<{en22#2*}返回en24# }
  2. 旋转箭头图像,并添加它作为地图覆盖。在大多数情况下,方向是正确计算的,然而,当我选择下面所示的直线时,方向会相反地显示180。从澳大利亚的悉尼开始,在美国的丹佛结束。

当试图在mapView.setVisibleMapRect中显示具有这两个位置的区域时,不会显示这些区域,地图视图尝试显示从悉尼(澳大利亚)到丹佛(美国)通过亚洲和欧洲开始的区域,而应该显示我在上面附加的地图区域。如果你有优化的建议,可以随意提出来。

我认为这可能是因为,方向应该沿着红线计算,但它是沿着绿线计算的。这两条线是通过连接地图中相同的位置坐标来绘制的。有什么解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-05-30 11:56:45

我把坐标转换成CGPoint,然后计算点间的方位,这样就解决了这个问题。

代码语言:javascript
复制
let destinationPoint = mapView.convert(destination, toPointTo: nil)
let sourcePoint = mapView.convert(source, toPointTo: nil)

let bearing = atan2(sourcePoint.y - destinationPoint.y, sourcePoint.x - destinationPoint.x) - .pi

警告:当地图旋转时,此计算将出错

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50447459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档