【问题标题】:Using GPX route or track for testing in Xcode 4.2在 Xcode 4.2 中使用 GPX 路由或轨道进行测试
【发布时间】:2011-12-09 13:18:22
【问题描述】:

在 Xcode 4.2 中,有没有人成功地使用 GPX 路线或轨迹来测试依赖于移动的位置感知应用程序?我已经能够让它使用 GPX 文件中的单个航路点,甚至让它遍历一系列航路点,但我无法让它以能够提供速度和路线信息的方式跟随轨道.我尝试过记录驾驶轨迹、手工制作的路线和轨迹,以及使用 Trailrunner 制作的路线。

可能是这个功能不可用,但 Apple 确实在模拟器中提供了高速公路驱动器。我希望能够在设备上和我可以指定的位置做类似的事情。有人有什么想法吗?

【问题讨论】:

  • 我不确定是否有速度和课程信息。如果我说对了,您是否已经按照 WWDC 开发人员工具启动视频 (17:44) 中显示的方式进行操作?这对我来说很适合记录路线(例如从everytrial.com 下载)。您指的是哪条高速公路?
  • 模拟器本身有一个菜单,可让您从 Apple 提供的一些预定义曲目中进行选择。速度和课程信息是我想要的。在模拟器中使用预定义曲目时会显示,但如果我使用自己的曲目,它将无法在设备或模拟器上运行。

标签: iphone ios core-location xcode4.2


【解决方案1】:

最好的方法是创建自己的模拟器类来读取文件并生成 CLLocation 事件,从而让您完全控制。 GPX 文件不包含速度和航向,因此您必须自己计算它们。我使用的基本模拟循环是:

Simulate{
  if (!eof) {
    Read the next waypoint
    Calculate distance, dt (delta time), bearing and speed (distance/dt) from the previous waypoint

    Generate a CLLocation object and call the didUpdateToLocation delegate method
    Peek at the next waypoint and calculate next_dt
    Scale next_dt   // as desired for faster playback (e.g. dt/2 would be 2x)
    Start an NSTimer with next_dt as the duration
  }
}

When the timer fires, call Simulate again

注意:直到最近,由于 CLLocation 是不可变的并且 init 方法无法设置速度和航向,因此合成 CLLocation 还存在一些问题。这在 iOS 4.2 中得到了解决。

【讨论】:

  • 我认为 GPX 扩展可能支持速度和航向,但我发现的唯一(来自 Garmin 和 Humminbird)不支持。如果有人知道不同,我会纠正的。
  • 这似乎是让它在设备本身上发生的唯一方法。 GPX 格式确实允许使用路线和速度标签,但正如您所观察到的,它们并不总是由 GPS 记录。不过,某些应用程序会记录此信息。对于模拟器,我认为可以使用类似的方法来生成 Steve Madsen 所讨论的模拟文件。
【解决方案2】:

高速公路似乎是由/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/CoreLocation.framework/Support/SimulationScenarios/Freeway Drive.plist 中的一个 1.6 MB 文件定义的。这是一个有两个键的字典,OptionsLocationsOptions 本身是一个有两个键的字典,可能可以进行逆向工程。另一方面,LocationsNSData 的一个大数组(2240 项),每个数组大约 724 字节。前八个字节解码为“bplist00”,因此每个字节都是一个 plist。我将一个写入磁盘,但 Xcode 的属性列表编辑器声称它已损坏。

该文件所在的目录也是其他固定位置和路线所在的目录。我复制了其中一个文件并重新启动了模拟器,新文件出现在 Debug 菜单中。

添加您自己的文件的最大问题是,未来的 Xcode 更新可能会删除它们,但如果您将原始文件保存在某个地方,这并不是什么大问题。

【讨论】:

  • 我还没有发现这个。看起来这些 bplist00 行中的每一行都是 CLLocation 对象的存档。我可能会编写一个工具来从 GPX 轨道生成类似的文件,但它只能在模拟器上使用。我真的很希望能够在设备上执行此操作。
  • 我怀疑 Apple 会提供一种在设备上模拟位置变化的方法,因为它本身就支持通过 Wi-Fi、手机信号塔和 GPS 的某种组合来确定位置。您需要使用自己的代码来伪造位置更新。
  • Apple 确实支持单个位置并在设备上的 gpx 文件中循环遍历一系列点。似乎不支持以课程和速度移动数据。
  • 听起来很有趣。有链接吗?
  • 我有什么链接吗?我已将 gpx 文件放入项目中(录制、生成和手工制作的版本)。调试器上的位置按钮可让您选择用于模拟位置的文件。它只会使用航路点,而不是跟踪点。如果您提供航点列表,它将按顺序访问每个航点。我无法让它使用附加到航点的任何速度或路线信息。
【解决方案3】:

您可以使用 Google 地图绘制复杂的路线,然后使用 https://mapstogpx.com/mobiledev.php 将它们转换为兼容的 GPX 文件

【讨论】:

  • 它要我粘贴我的 API 密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2020-01-17
相关资源
最近更新 更多