问题描述
{
"type": "Feature","geometry": {
"type": "Point","coordinates": [
126.9823439963945,37.56461982743129
]
}
},{
"type": "Feature","geometry": {
"type": "Linestring","coordinates": [
[
126.9823439963945,37.56461982743129
],[
126.98230789017299,37.564453179812105
],[
126.98210513804034,37.563703265276516
],[
126.98207180945346,37.56352550784786
],[
126.9817857308457,37.56284502921221
],[
126.98166907678578,37.562633941789535
],[
126.98157186492477,37.56247284870586
],[
126.98128300624569,37.56205345097403
],[
126.98124689891416,37.56200067907546
]
],"traffic": [0,8,4,12]
}}
这就是我得到的。 而且我不知道解析关键的“坐标”。 此类型取决于几何类型。 如果类型为“ Point”,则类型变为[String]。 如果类型为“ Linestring”,则类型变为[[String]]。 我该怎么解决?
解决方法
您可以使用以下可可豆荚:CodableGeoJSON。
它已为您编写了Codable
结构。您似乎在这里具有一个未知几何的特征,因此可以执行以下操作:
let geoJSON = try JSONDecoder().decode(GeoJSON.self,from: geoJSONData)
guard case .feature(let feature) = geoJSON else {
// the GeoJSON does not contain a feature!
}
// handle each kind of geometry...
switch feature.geometry {
case .point(let coordinates): // coordinates is a GeoJSONPosition
// ...
case .multiPoint(let coordinates): // coordinates is a [GeoJSONPosition]
// ...
case .lineString(let coordinates): // coordinates is a [GeoJSONPosition]
// ...
case .multiLineString(let coordinates): // coordinates is a [[GeoJSONPosition]]
// ...
case .polygon(let coordinates): // coordinates is a [[GeoJSONPosition]]
// ...
case .multiPolygon(let coordinates): // coordinates is a [[[GeoJSONPosition]]]
// ...
case .geometryCollection(let geometries):
// ...
}
如果您不只是为此目的而使用库,请查看其源代码并尝试从中学习,特别是GeoJSON.swift。