有没有人成功地使用 GPX 路线或轨迹来测试依赖于 Xcode 4.2 中移动的位置感知应用程序?我已经能够让它在 GPX 文件中使用单个航路点,甚至可以让它遍历一系列航路点,但我无法让它以能够提供速度和路线信息的方式跟随轨道. 我尝试过记录驾驶轨迹、手工制作的路线和轨迹,以及使用 Trailrunner 制作的路线。
可能是此功能不可用,但 Apple 确实在模拟器中提供了高速公路驱动器。我希望能够在设备上和我可以指定的位置做类似的事情。有人有什么想法吗?
有没有人成功地使用 GPX 路线或轨迹来测试依赖于 Xcode 4.2 中移动的位置感知应用程序?我已经能够让它在 GPX 文件中使用单个航路点,甚至可以让它遍历一系列航路点,但我无法让它以能够提供速度和路线信息的方式跟随轨道. 我尝试过记录驾驶轨迹、手工制作的路线和轨迹,以及使用 Trailrunner 制作的路线。
可能是此功能不可用,但 Apple 确实在模拟器中提供了高速公路驱动器。我希望能够在设备上和我可以指定的位置做类似的事情。有人有什么想法吗?
Freeway Drive 似乎是由/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/System/Library/Frameworks/CoreLocation.framework/Support/SimulationScenarios/Freeway Drive.plist
. 这是一个有两个键的字典,Options
并且Locations
. Options
本身是一个有两个键的字典,可能可以进行逆向工程。Locations
另一方面, 是 的大数组(2240 项)NSData
,每一项大约 724 字节。前八个字节解码为“bplist00”,因此每个字节都是一个 plist。我将一个写入磁盘,但 Xcode 的属性列表编辑器声称它已损坏。
该文件所在的目录也是其他固定位置和路线所在的目录。我复制了其中一个文件并重新启动了模拟器,新文件出现在 Debug 菜单中。
添加您自己的文件的最大问题是未来的 Xcode 更新可能会删除它们,但如果您将原始文件保存在某个地方,这并不是什么大问题。
最好的方法是创建自己的模拟器类来读取文件并生成 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 中得到了解决。
您可以使用 Google 地图绘制复杂的路线,然后使用https://mapstogpx.com/mobiledev.php将它们转换为兼容的 GPX 文件