У меня есть файл geojson для отображения карты навигации в помещении.Из ответа геойсона я получаю координаты, которые являются 2-мерным массивом.Вот мой ответ 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
]
]
}
}
]
}
Здесь я попытался добавить 2-мерные координаты в массив.Использование массива координат для отображения поли линий в 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:
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 еговыведите один лат длинный вместо массива двухмерного массива.Вот что я получил:
[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]]
Ссылка на эту ссылку Как нарисовать GeoJSON в Apple Maps как оверлей, используя Swift 3 , но не смог сделать это ..