一个用 Swift 编写的用于读取和写入 KML 文件的库,设计目标是简单易用。
Swift Package Manager
.package(url: "https://github.com/RCCoop/RCKML.git", .upToNextMajor(from: "1.0.0"))
protocol KMLFeature
)protocol KMLContainer
)struct KMLDocument: KMLContainer
)struct KMLFolder: KMLContainer, KMLFeature
)struct KMLPlacemark: KMLFeature
)protocol KMLGeometry
)struct KMLPoint: KMLGeometry
)struct KMLLineString: KMLGeometry
)struct KMLPolygon: KMLGeometry
)struct KMLMultiGeometry: KMLGeometry
)protocol KMLStyleSelector
)struct KMLStyleUrl: KMLStyleSelector
)struct KMLStyle: KMLStyleSelector
)struct KMLStyleMap: KMLStyleSelector
)protocol KMLColorStyle
)struct KMLLineStyle: KMLColorStyle
)struct KMLPolyStyle: KMLColorStyle
)struct KMLPolygon.LinearRing
)struct KMLColor
)struct KMLCoordinate
和 struct KMLCoordinateSequence
)并非所有类型都支持 KML 文件可用的所有选项。 目前,我专注于可以转换为 MapKit 的类型和功能。
KML 文件的根由 KMLDocument
结构体表示,它用作任何数量的特征和任何顶级全局样式的容器。
从头开始创建 KMLDocument 时(而不是从现有文件读取),您可以选择向文档添加名称和描述,然后添加包含的特征数组和全局样式字典。
public struct KMLDocument {
public var name: String?
public var featureDescription: String?
public var features: [KMLFeature]
public var styles: [KMLStyleUrl: KMLStyleSelector]
}
let fileUrl = ...
let fileData = try Data(contentsOf: fileUrl)
let kmlString = try? String(contentsOf: fileUrl, encoding: .utf8)
let kmzFileUrl = ...
let kmzFileData = try Data(contentsOf: kmzFileUrl)
let documentFromData = try? KMLDocument(fileData)
let documentFromFileUrl = try? KMLDocument(fileUrl)
let documentFromString = try? KMLDocument(kmlString)
let documentFromKmzFile = try? KMLDocument(kmzFileUrl) //init(_ url:) works with either KML or KMZ files.
let documentFromKmzData = try? KMLDocument(kmzData: kmzFileData)
let kmlDoc = KMLDocument(...)
let asData = kmlDoc.kmlData()
let asString = kmlDoc.kmlString()
let asKmzData = kmlDoc.kmzData()