Here I am using geojson file to get a 2D array for drawing lines. I could not able to append 2D dimensional, when appending it converts into a single dimensional array.
here is the output, which I have got:
coordArray==[[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]]
Here is a structure, which I have used:
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?
}
Here is the variable which I have declared for tableview. Here I have declared two called
nameArrayand
coordinatesArraywhich I need to use in
tableview`.
var nameArray = [String]()
var coordinatesArray = [[Double]]()
Here is the code for extract geojson value:
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()
}
here is my geojson file:
{
"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
]
]
}
}
]
}