无法绘制 MKPolylineView 交叉经度 +/-180

2023-12-04

我在 MKMapView 上绘制 MKPolylineView 时遇到问题。该线路代表一次环游世界的旅行,起点和终点均在纽约附近,始终向东行驶。从日本到旧金山的旅程的其中一段跨越太平洋,因此经度为 +/-180。 MKPolylineView 确实连接了这两点,但它的行进方向错误。也就是说,该线路从日本向西返回旧金山,而不是向东穿越太平洋。我没有看到任何选项可以让我指定线段应沿哪个方向移动以连接两点。

简单来说,MKMapView 似乎不明白世界是圆的。有没有一种方法可以让我按照预期划线,从日本向东到达旧金山?

我有一个屏幕截图,清楚地显示了问题:
折线 http://www.builtlight.org/pub/MKPolylineView.png


这似乎是 MKMapView 的限制。

解决方法是将 +/-180 交叉点分成“东”和“西”部分。

对于环球旅行(结束 == 开始),您可以将交叉路口的“西”部分放在折线的前面。
例如:

CLLocationCoordinate2D newYorkCoord = CLLocationCoordinate2DMake(40.7141667, -74.0063889);
CLLocationCoordinate2D londonCoord = CLLocationCoordinate2DMake(51.5, -0.116667);
CLLocationCoordinate2D japanCoord = CLLocationCoordinate2DMake(36, 138);
CLLocationCoordinate2D sanFranciscoCoord = CLLocationCoordinate2DMake(37.775, -122.4183333);

CLLocationCoordinate2D japanToSFMidpointEast;
//use average calc as crude way to find midpoint...
japanToSFMidpointEast.latitude = (japanCoord.latitude + sanFranciscoCoord.latitude)/2.0;
japanToSFMidpointEast.longitude = 180;

CLLocationCoordinate2D japanToSFMidpointWest;
japanToSFMidpointWest.latitude = japanToSFMidpointEast.latitude;
japanToSFMidpointWest.longitude = -180;

int pointsCount = 6;
CLLocationCoordinate2D *points = malloc(pointsCount * sizeof(CLLocationCoordinate2D));
points[0] = japanToSFMidpointWest;
points[1] = sanFranciscoCoord;
points[2] = newYorkCoord;
points[3] = londonCoord;
points[4] = japanCoord;
points[5] = japanToSFMidpointEast;
MKPolyline *polyline = [MKPolyline polylineWithCoordinates:points count:pointsCount];
[mapView addOverlay:polyline];
free(points);
points = NULL;


如果旅行不是环球旅行(结束!=开始),则必须使用两条折线。
这个例子是从日本到SF的:

CLLocationCoordinate2D japanCoord = CLLocationCoordinate2DMake(36, 138);
CLLocationCoordinate2D sanFranciscoCoord = CLLocationCoordinate2DMake(37.775, -122.4183333);

CLLocationCoordinate2D japanToSFMidpointEast;
japanToSFMidpointEast.latitude = (japanCoord.latitude + sanFranciscoCoord.latitude)/2.0;
japanToSFMidpointEast.longitude = 180;

CLLocationCoordinate2D japanToSFMidpointWest;
japanToSFMidpointWest.latitude = japanToSFMidpointEast.latitude;
japanToSFMidpointWest.longitude = -180;

int eastPointsCount = 2;
CLLocationCoordinate2D *eastPoints = malloc(eastPointsCount * sizeof(CLLocationCoordinate2D));
eastPoints[0] = japanCoord;
eastPoints[1] = japanToSFMidpointEast;
MKPolyline *eastPolyline = [MKPolyline polylineWithCoordinates:eastPoints count:eastPointsCount];
[mapView addOverlay:eastPolyline];
free(eastPoints);
eastPoints = NULL;

int westPointsCount = 2;
CLLocationCoordinate2D *westPoints = malloc(westPointsCount * sizeof(CLLocationCoordinate2D));
westPoints[0] = japanToSFMidpointWest;
westPoints[1] = sanFranciscoCoord;
MKPolyline *westPolyline = [MKPolyline polylineWithCoordinates:westPoints count:westPointsCount];
[mapView addOverlay:westPolyline];
free(westPoints);
westPoints = NULL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法绘制 MKPolylineView 交叉经度 +/-180 的相关文章

  • 仅当用户下拉表格时显示搜索栏

    我有一个表格视图 上面有一个搜索栏 我的要求是当有人打开页面时不显示搜索栏 但当有人向下滑动表格时搜索栏应该可见 在你的控制器中viewDidAppear 方法 设置表视图的 contentOffset 属性 在 UIScrollView
  • 在 Swift 中将 JSON 解析为 NSArray

    我有一个json数据 我可以将所有项目作为字符串或字典获取 但我无法将 付款 项目作为数组获取 我想从 付款 获取数据并转换 NSDictionary 我尝试了几种方法 但没有成功 这是我的 JSON 数据 last name aaa co
  • 如何确定 C 代码是为 Android/NDK 还是 iOS 编译的

    我在 iOS 应用程序和 Android 应用程序中重用旧版 C 库 我想自定义一些宏定义 例如用于日志记录 是否有标准定义来检查 使用 ifdef 代码是否是针对 iOS 或 Android NDK 编译的 ANDROID or ANDR
  • iPhone 上的 CoreText 和删除线

    我目前正在努力解决在许多情况下显示删除线文本的需要UITableViewCells 用 HTML 编写的内容看起来像
  • 在旧版 iOS 模拟器上运行时 Xcode 10 测试失败 - “无法加载测试包...找不到合适的图像”

    我已经安装了 Xcode 10 并将我的 iOS 应用程序升级到 Swift 4 2 当我通过 Xcode 在运行 iOS 12 的 iPhone 模拟器上运行测试 UI 和 Unit 时 测试成功启动 当我尝试在运行先前 iOS 版本 例
  • 将故事板转换为 XIB

    我使用 iOS 5 Storyboard 功能创建了一个应用程序 并决定希望它也能在 iOS 4 上运行 如何将我的 Storyboard 仅包含一个 ViewController 转换为 XIB 另外 ARC 可以为 iOS 4 编译吗
  • iOS 以编程方式添加 CardDAV 帐户

    是否可以添加CardDav以编程方式帐户 因为它可以通过手动使用来完成邮件 通讯录 日历 gt 添加帐户选项中Settings app 一般来说 是否可以在代码中添加任何其他类型的帐户 比如兑换账户 我在论坛上的某个地方读到 事实并非如此
  • UIModalTransitionStyleFlipHorizo​​ntal 横向垂直翻转

    在横向模式下 从一个视图 导航控制器堆栈的一部分 转换到另一个视图作为模态视图 并将 UIModalTransitionStyleFlipHorizo ntal 设置为 modalTransitionStyle 视图在横向模式下垂直翻转 动
  • Reactive Cocoa - 以编程方式设置文本时,不会调用 UITextView 的 rac_textSignal

    我正在实现一个聊天 UI 并使用 Reactive Cocoa 在用户键入时调整聊天气泡的大小 目前 我正在根据 textview 更新 UI 的布局rac textSignal 一切都工作得很好 除了一点 当用户sends消息中 我以编程
  • 是否可以获取 NSMutableAttributedString 的属性和范围列表?

    我创建了一个接受 NSAttributedString 的方法 并且我希望动态创建一个子视图和标签以将字符串放入其中 由于需要确定字体和大小等属性才能正确确定标签的大小 因此我需要确定是否可以迭代已应用于属性字符串的值和范围 我知道我可以单
  • Swift 错误:“找不到‘SKScene’的接口声明,其超类”

    免责声明 我通读了类似的问题 找不到解决我的问题的方法 我想将 SKScene 的子类添加到以前未使用 SpriteKit 的项目中 该项目是 ObjC 和 Swift 的混合体 子类是用 Swift 编写的 我做了什么 通过转到项目 gt
  • XCode 5 在 AppStore 验证中崩溃

    我是 iOS 开发新手 很可能错过了一些相关的东西 我有一个在 Xcode 中开发的应用程序 并使用开发设备进行了测试 以便我知道它运行正常 我已在 iTunes Connect 中创建了记录 并完成了启用 等待上传 状态的步骤 在构建设置
  • iOS 应用程序在启动时因分发配置文件而崩溃? (libgdx + 机器人)

    我的 iOS 应用程序因同一原因被拒绝提交两次 启动时崩溃 鉴于日志 我猜它来自我的配置文件和签名身份 我正在将 Libgdx 1 5 x 与 RoboVM beta 4 和 Eclipse 一起使用 当我构建没有配置文件的应用程序时 它可
  • React Native 上无法识别的字体系列

    我在使用 React Native 时遇到了一个特殊的错误 在我的里面button js我在做 import Icon from react native vector icons MaterialIcons const icon Icon
  • 更改文本后无法更改 UISearchBar 取消按钮标题颜色。

    我使用此代码来更改 UISearchBar 取消按钮标题 void searchDisplayControllerWillBeginSearch UISearchDisplayController controller self searc
  • 通话期间未调用远程通知回调

    我创建了一个应用程序 其中后台获取代码是在接收推送通知时编写的 我已在 plist 中启用后台模式 推送通知负载中的内容可用键设置为 1 注册推送通知并使用委托 void application UIApplication applicat
  • iOS IAP 无法在纯 ipv6 网络上运行

    我在 Appstore 中有一款 iPhone 游戏 最近尝试使用最新的 Xcode 上传更新版本 但被拒绝 因为应用内购买无法在仅 ipv6 的网络上运行 它在 ipv4 网络上运行良好 ViewController m NSMutabl
  • iOS 检测 UIView 的点击和触摸

    我遇到了确定如何检测 UIView 被按下和 UIView 被点击的问题 当它被触碰时 我希望 UIView 改变它的背景颜色 当它被触摸时 我希望 UIView 执行某些任务 我想知道如何解决这个问题 void viewDidLoad U
  • 为模拟器构建时“重新定义模块...”

    我有一个 iOS xcode 项目 当我有Generic iOS Device选择作为我的目的地 但是 当我选择任何模拟器选项时 构建都会失败 并显示许多Redefinition of module abcde 每个模块中定义的一个错误iO
  • 只需用矩形掩盖 UIView

    我想知道如何简单地屏蔽任何类型的 UIView 的可见区域 到目前为止 我读过的所有答案 教程都描述了使用图像 渐变或创建圆角进行遮罩 这比我所追求的要先进得多 示例 我有一个边界为 0 0 100 100 的 UIView 我想使用蒙版切

随机推荐