【问题标题】: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 集)转换为 json 或 xml 文件?
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,请使用 JSONEncoder 的 encode(:) 函数:
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)
}