我的应用程序需要使用application共享设备中的CLLocations(Route)数组。我没有在此之前使用GPX的经验。 GPX是最好的格式吗?如何从给定的CLLocations数组创建GPX文件? Objective C中是否有标准的GPX解析器?从我在网上搜索的内容和SO分别回答这些问题
1.cant say
2. I have seen some webpages converting data of points in GPX format but could not find how they are doing it.
3. No
如果我得到其他答案/意见,我会很高兴。我知道这些都是很多问题。任何帮助或建议将非常感激。
Watanabe Toshinori刚刚成为你最好的朋友(我也是),代码在这里:
http://github.com/FLCLjp/iOS-GPX-Framework
回答您的具体问题:
GPX示例:
<gpx xmlns="http://www.topografix.com/GPX/1/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
version="1.1"
creator="YourCompanyName">
<wpt lat="Your latitude" lon="Your longitude">
<time>Your Time</time>
<name>Your Location name.</name>
</wpt>
</gpx>
gpx(GPS交换格式)文件以.gpx扩展名结尾
您所要做的就是迭代CLLocations数组并创建标记(wpx)并将文件另存为.gpx
我希望这有帮助
这里是swift 4,万一有人需要用UIAlert来输入文件名
func handleCancel(alertView: UIAlertAction!)
{
print("Cancelled !!")
}
let alert = UIAlertController(title: "Export GPX", message: "Enter a name for the file", preferredStyle: .alert)
alert.addTextField { (textField) in
textField.text = ""
}
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:handleCancel))
alert.addAction(UIAlertAction(title: "Done", style: .default, handler:{ (UIAlertAction) in
if alert.textFields?[0].text != nil {
let fileName = "\(String(describing: alert.textFields![0].text!)).GPX"
let path = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName)
var gpxText : String = String("<?xml version=\"1.0\" encoding=\"UTF-8\"?><gpx version=\"1.1\" creator=\"yourAppNameHere\" xmlns=\"http://www.topografix.com/GPX/1/1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:gte=\"http://www.gpstrackeditor.com/xmlschemas/General/1\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">")
gpxText.append("<trk><trkseg>")
for locations in self.locationsArray{
let newLine : String = String("<trkpt lat=\"\(String(format:"%.6f", locations.locLatitude))\" lon=\"\(String(format:"%.6f", locations.locLongitude))\"><ele>\(locations.locAltitude)</ele><time>\(String(describing: locations.locTimestamp!))</time></trkpt>")
gpxText.append(contentsOf: newLine)
}
gpxText.append("</trkseg></trk></gpx>")
do {
try gpxText.write(to: path!, atomically: true, encoding: String.Encoding.utf8)
let vc = UIActivityViewController(activityItems: [path!], applicationActivities: [])
self.present(vc, animated: true, completion: nil)
} catch {
print("Failed to create file")
print("\(error)")
}
} else {
print("There is no data to export")
}
}))
self.present(alert, animated: true, completion: {
print("completion block")
})
}
func textFieldHandler(textField: UITextField!)
{
if (textField) != nil {
textField.text = ""
}
}
使用Xcode 5,添加新文件 - >资源 - > GPX文件。