【问题标题】:ARKit 4.0 – Is it possible to convert ARWorldMap data to JSON file?ARKit 4.0 – 是否可以将 ARWorldMap 数据转换为 JSON 文件?
【发布时间】:2020-08-04 13:01:09
【问题描述】:

我想知道是否可以将 worldMap 二进制数据(存储空间映射状态和 ARAnchors 集)转换为 jsonxml 文件?

func writeWorldMap(_ worldMap: ARWorldMap, to url: URL) throws {

    let data = try NSKeyedArchiver.archivedData(withRootObject: worldMap, 
                                         requiringSecureCoding: true)
    try data.write(to: url)
}

如果可能,我可以使用哪些工具?

【问题讨论】:

    标签: json swift xml augmented-reality arkit


    【解决方案1】:

    恐怕这样做的唯一方法是将ARWorldMap 对象包装成这样的Codable 对象:

    struct ARData {
        var worldMap: ARWorldMap?
    }
    
    extension ARData: Codable {
        enum CodingKeys: String, CodingKey {
            case worldMap
        }
        
        init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
    
            let worldMapData = try container.decode(Data.self, forKey: .worldMap)
            worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: worldMapData)
        }
        
        func encode(to encoder: Encoder) throws {
            var container = encoder.container(keyedBy: CodingKeys.self)
            
            if let worldMap = worldMap {
                let colorData = try NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
                try container.encode(colorData, forKey: .worldMap)
            }
        }
    }
    

    要将该对象的实例编码为 JSON,请使用 JSONEncoderencode(:) 函数:

    let arData = ARData(worldMap: worldMap)
    let encoder = JSONEncoder()
    
    do {
        let jsonData = try encoder.encode(arData)
    } catch {
        print(error)
    }
    

    默认情况下,JSONEncoder 会将ARWorldMap 数据转换为可以使用JSONDecoder 读取的 Base64 字符串:

    let decoder = JSONDecoder()
    
    do {
        let decoded = try decoder.decode(ARData.self, from: jsonData)
    } catch {
        print(error)
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 2014-10-03
      • 2019-02-09
      • 2020-01-27
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2022-01-16
      相关资源
      最近更新 更多