使用GPX路由或跟踪在Xcode 4.2中进行测试

时间:2011-10-17 19:22:45

标签: iphone ios core-location xcode4.2

有没有人使用GPX路线或轨道来测试依赖于Xcode 4.2移动的位置感知应用程序?我已经能够让它在GPX文件中使用单个航点,或者甚至让它在一系列航路点上进行迭代,但是我无法让它按照提供速度和航线信息的方式跟踪航迹。我尝试过驾驶,手工制作的路线和轨道以及使用Trailrunner制作的路线。

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

3 个答案:

答案 0 :(得分:4)

Freeway Drive似乎由/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更新可能会删除它们,但如果你把原件放在某个地方那就不是什么大问题了。

答案 1 :(得分:4)

最好的方法是创建自己的模拟器类来读取文件并生成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

注意:直到最近,合成CLLocations有点问题,因为CLLocation是不可变的,并且init方法无法设置速度和标题。这在iOS 4.2中得到了补救。

答案 2 :(得分:0)

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