微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift GeoJson解析

如何解决Swift GeoJson解析

{
  "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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。