【发布时间】:2018-10-10 03:36:33
【问题描述】:
我有显示室内导航地图的 geojson 文件。从 geojson 响应中,我得到了二维数组的坐标。这是我的 JSON 响应:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"name": "Dot2Globe - CZSM"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
80.2226534485817,
12.871137160770251
],
[
80.22263333201408,
12.871145658917484
],
[
80.22264339029789,
12.871184881131773
],
[
80.2225998044014,
12.871194686684378
],
[
80.22260718047619,
12.87121625889878
]
]
}
},
{
"type": "Feature",
"properties": {
"name": "Entrance - CZSM"
},
"geometry": {
"type": "LineString",
"coordinates": [
[
80.22256962954998,
12.87123848481471
],
[
80.22255957126617,
12.871204819088353
],
[
80.22259946912527,
12.871195013536129
],
[
80.22264305502176,
12.871184881131773
],
[
80.22263266146183,
12.871145658917484
],
[
80.22265445441008,
12.871135526511145
]
]
}
}
]
}
在这里,我尝试将二维坐标附加到数组。使用坐标数组在 AR(增强现实)中显示折线。这是我到目前为止尝试过的代码:
func loadGeoJson() {
guard let jsonUrl = Bundle.main.url(forResource: "map1", withExtension: "geojson") else { return }
guard let jsonData = try? Data(contentsOf: jsonUrl) else { return }
self.drawPolyline(geoJson: jsonData)
URLSession.shared.dataTask(with: jsonUrl) { (data, response, error) in
if error != nil {
print(error!.localizedDescription)
}
guard let data = data else { return }
do {
//Decode retrived data with JSONDecoder and assing type of Article object
let baseData = try JSONDecoder().decode(Geodata.self, from: data)
for featu in baseData.features {
self.nameArray.append(featu.properties.name!)
print("nameArray==\(self.nameArray)")
}
for coor in baseData.features {
self.coordinatesArray.append(contentsOf: coor.geometry.coordinates)
print("new coor::\(coor.geometry.coordinates)")
print("coordArray==\(self.coordinatesArray)")
}
} catch let jsonError {
print(jsonError)
}
DispatchQueue.main.async {
self.tableView.reloadData()
}
}.resume()
}
这是我的结构类:
struct Geodata: Codable {
let type: String
let features: [Feature]
}
struct Feature: Codable {
let type: String
let properties: Properties
let geometry: Geometry
}
struct Geometry: Codable {
let type: String
let coordinates: [[Double]]
}
struct Properties: Codable {
let name: String?
}
我的问题是在附加数组之后,当我指定数组索引为 0 时,它会打印一个 lat long 而不是二维数组的数组。这是我得到的:
[80.2226534485817,
12.871137160770251]
但我想要的是
[[[80.2226534485817,
12.871137160770251], [80.22263333201408,
12.871145658917484], [80.22264339029789, 12.871184881131773],
[80.2225998044014,
12.871194686684378], [80.22260718047619, 12.87121625889878]],
[[80.22256962954998, 12.87123848481471], [80.22255957126617,
12.871204819088353], [80.22259946912527, 12.871195013536129],
[80.22264305502176, 12.871184881131773], [80.22263266146183,
12.871145658917484], [80.22265445441008, 12.871135526511145]]]
当打印数组索引 0 时,预期的结果是
[[80.2226534485817, 12.871137160770251], [80.22263333201408,
12.871145658917484], [80.22264339029789, 12.871184881131773], [80.2225998044014,
12.871194686684378], [80.22260718047619, 12.87121625889878]]
参考了这个链接How to draw GeoJSON in Apple Maps as overlay using Swift 3,但没能成功..
【问题讨论】:
-
附加数组看起来不错,有什么问题?
-
你还没说是什么问题。如果您可以编辑您的问题,我相信有人可以提供帮助。
-
@Kamran 我也更新了结果和预期结果。你能看一下吗
标签: ios arrays json swift struct