我想在iOS Swift4中以编程方式创建kml文件。关于离线 GoogleMaps和将数据保存在kml文件中,我冲浪了很多,但是我没有找到与此相关的任何资料。简而言之,我只想将一些POI存储在kml中并在离线 Googlemap中显示它!
答案 0 :(得分:0)
KML是XML文档方案。您可以按照自己认为合适的任何方式编写它。使用专用的XML编码器或使用字符串的蛮力。
完整规范记录在https://developers.google.com/kml/documentation/kmlreference
您可能会发现检查现有的KML文件有助于显示示例结构。
这是示例蛮力编码器,用于编码一组标记的地标…
原始字符串在写入文件之前需要进行XML转义。
您可能会在这里发现Google Toolbox for Mac有用。
class KMLWriter {
func createKMLFormat(_ logs:[DDBLogEntry])->String {
var kml = preamble()
for log in logs {
kml += placemarkForLog(log)
}
terminate(&kml)
return kml
}
func placemarkForLog(_ log:DDBLogEntry)->String {
let name = log.userContent ?? "empty"
let time = log.dateCreated ?? Date()
let timeStamp = Date.UTCDateFormatter.string(from: time)
return "<Placemark>\n<name>\(name)</name>\n<Point><coordinates>\(log.longitude ?? 0),\(log.latitude ?? 0),\(log.elevation ?? 0)</coordinates></Point>\n<TimeStamp><when>\(timeStamp)</when></TimeStamp>\n</Placemark>\n"
}
func preamble()->String {
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n<Document>\n"
}
func terminate(_ kml:inout String) {
kml += "</Document>\n</kml>\n"
}
}