在离线Google Map iOS上集成KML

时间:2018-09-28 10:53:11

标签: ios google-maps swift4 kml offline

我想在iOS Swift4中以编程方式创建kml文件。关于离线 GoogleMaps和将数据保存在kml文件中,我冲浪了很多,但是我没有找到与此相关的任何资料。简而言之,我只想将一些POI存储在kml中并在离线 Googlemap中显示它!

1 个答案:

答案 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"

    }

}