使用 Struct 的 Encodable 协议解码 2D 多边形坐标

阿尼鲁达·马哈勒

我正在尝试使用 Swift Struct 的 Encodable 协议解析以下 json。如果我制作坐标AnyAnyObject它给出错误,说不符合协议。

我知道这可以使用数组和字典来实现,但我不想那样做。

{
    "coordinates": [
        [
            [
                0.148271,
                51.6723432
            ],
            [
                0.148271,
                51.3849401
            ],
            [
                -0.3514683,
                51.3849401
            ],
            [
                -0.3514683,
                51.6723432
            ],
            [
                0.148271,
                51.6723432
            ]
        ]
    ]
} 

struct Geometry: Codable {
    let coordinates: [[[Double]]]

    init(from decoder: Decoder) throws {
        let data = try decoder.container(keyedBy: CodingKeys.self)
        coordinates = try data.decode([[[Double]]].self, forKey: .coordinates)
    }
}

do {
    let decoded = try JSONDecoder().decode(Geometry.self, from: data!)
    print(decoded)
    completionHandler(statusCode, decoded)
} catch {
    print("Failed to encode data.")
    completionHandler(statusCode, nil)
}

我该如何解决这个问题?

瓦迪安

我的建议是使CLLocationCoordinate2D符合Codable解码的数组Double

import CoreLocation

extension CLLocationCoordinate2D : Codable {
    public init(from decoder: Decoder) throws {
        var arrayContainer = try decoder.unkeyedContainer()
        if arrayContainer.count == 2 {
            let lat = try arrayContainer.decode(CLLocationDegrees.self)
            let lng = try arrayContainer.decode(CLLocationDegrees.self)
            self.init(latitude: lat, longitude: lng)
        } else {
            throw DecodingError.dataCorruptedError(in: arrayContainer, debugDescription: "Coordinate array must contain two items")
        }
    }

    public func encode(to encoder: Encoder) throws {
        var arrayContainer = encoder.unkeyedContainer()
        try arrayContainer.encode(contentsOf: [latitude, longitude])
    }
}

然后你可以Geometry简单地声明

struct Geometry: Codable {
    let coordinates: [[CLLocationCoordinate2D]]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用CGPattern填充MKPolygon时,多边形叠加层会相互干扰(使用Quartz 2D)

来自分类Dev

如何使用D3.js限制Voronoi图中的多边形文本?

来自分类Dev

使用2D多边形而不是航点的AI寻路-是否有推荐的算法?

来自分类Dev

获取3D空间中平面多边形的顶点的局部2D坐标

来自分类Dev

使用多边形包含

来自分类Dev

使用光线投射算法进行经度/纬度坐标的多边形点测试

来自分类Dev

解决2D游戏碰撞(多边形)

来自分类Dev

使用OpenCV从图像中提取多边形的给定坐标

来自分类Dev

使用D3.js SVG的2D多边形布尔运算

来自分类Dev

如何使用坐标通过辛普森规则计算多边形的面积?

来自分类Dev

如何在Google Map API中使用坐标数组绘制多边形?

来自分类Dev

使用Newell算法计算3d多边形的面法线的问题

来自分类Dev

如何计算任何2D多边形的重力?

来自分类Dev

使用leaflet-pip和d3.geo包含多边形中的点

来自分类Dev

如何使用react-google-maps在React.JS中获取多边形的坐标

来自分类Dev

使用google_maps_flutter检查坐标是否在抖动中的多边形内

来自分类Dev

使用C ++在OpenGL中纹理3d多边形

来自分类Dev

VTK:使用vtkDelaunay2D创建多边形和孔不起作用

来自分类Dev

如何在d3中使用带有多多边形的投影来获得屏幕坐标

来自分类Dev

使用VB.NET从KML提取多边形名称和坐标

来自分类Dev

ggplot2通过坐标填充shapefile中的多边形

来自分类Dev

使用多边形包含

来自分类Dev

在openGL中绘制2D多边形

来自分类Dev

通过矢量扩展2D多边形

来自分类Dev

使用ggplot stat_density_2d在levelplot中破碎的多边形

来自分类Dev

Unity 2D 多边形碰撞器

来自分类Dev

使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错

来自分类Dev

使用来自 Swift 4 的 Encodable/Decodeable 编码/解码结构

来自分类Dev

如何从 geojson 文件中获取多边形的坐标并从中挤出 3D 多边形?

Related 相关文章

  1. 1

    用CGPattern填充MKPolygon时,多边形叠加层会相互干扰(使用Quartz 2D)

  2. 2

    如何使用D3.js限制Voronoi图中的多边形文本?

  3. 3

    使用2D多边形而不是航点的AI寻路-是否有推荐的算法?

  4. 4

    获取3D空间中平面多边形的顶点的局部2D坐标

  5. 5

    使用多边形包含

  6. 6

    使用光线投射算法进行经度/纬度坐标的多边形点测试

  7. 7

    解决2D游戏碰撞(多边形)

  8. 8

    使用OpenCV从图像中提取多边形的给定坐标

  9. 9

    使用D3.js SVG的2D多边形布尔运算

  10. 10

    如何使用坐标通过辛普森规则计算多边形的面积?

  11. 11

    如何在Google Map API中使用坐标数组绘制多边形?

  12. 12

    使用Newell算法计算3d多边形的面法线的问题

  13. 13

    如何计算任何2D多边形的重力?

  14. 14

    使用leaflet-pip和d3.geo包含多边形中的点

  15. 15

    如何使用react-google-maps在React.JS中获取多边形的坐标

  16. 16

    使用google_maps_flutter检查坐标是否在抖动中的多边形内

  17. 17

    使用C ++在OpenGL中纹理3d多边形

  18. 18

    VTK:使用vtkDelaunay2D创建多边形和孔不起作用

  19. 19

    如何在d3中使用带有多多边形的投影来获得屏幕坐标

  20. 20

    使用VB.NET从KML提取多边形名称和坐标

  21. 21

    ggplot2通过坐标填充shapefile中的多边形

  22. 22

    使用多边形包含

  23. 23

    在openGL中绘制2D多边形

  24. 24

    通过矢量扩展2D多边形

  25. 25

    使用ggplot stat_density_2d在levelplot中破碎的多边形

  26. 26

    Unity 2D 多边形碰撞器

  27. 27

    使用 geojson 和 mongoose 将多边形坐标插入 Mongo DB 时出错

  28. 28

    使用来自 Swift 4 的 Encodable/Decodeable 编码/解码结构

  29. 29

    如何从 geojson 文件中获取多边形的坐标并从中挤出 3D 多边形?

热门标签

归档