我试图在MKMapView中过度绘制以下Geo
JSON数据.
GeoJSON文件如下.
{ "type": "FeatureCollection","features": [ { "type": "Feature","properties": { "Name": "line1" },"geometry": { "type": "LineString","coordinates": [ [ 76.35498046875,25.145284610685064 ],[ 81.36474609375,25.06569718553588 ],[ 83.91357421875,23.301901124188877 ],[ 82.001953125,22.004174972902003 ],[ 78.33251953125,21.248422235627014 ],[ 76.31103515625,21.268899719967695 ] ] } },{ "type": "Feature","properties": { "Name": "point8" },"geometry": { "type": "Point","coordinates": [ 74.50927734375,20.076570104545173 ] } } ]
}
但我无法解析它.请帮忙.是否有任何第三方SDK可用于执行此操作.
我已经在Swift 3中编写了如下代码
func loadJSON() { var features = [Feature]() guard let url = Bundle.main.url(forResource: "Geo",withExtension: "json") else { return } do { let data = try Data(contentsOf: url) guard let rootObject = try JSONSerialization.jsonObject(with: data,options: .allowFragments) as? [String : Any] else { return } guard let featureObjects = rootObject["features"] as? [[String: AnyObject]] else { return } for feature in featureObjects { if let type = feature["type"] as? String,let propertyObject = feature["properties"] as? [String : String],let geometryObject = feature["geometry"] as? [String : AnyObject] { var properties: PropertyVal? for property in propertyObject.values { properties = PropertyVal(name: property) } var geometries: Geometry? var coordData: [Coordinates]? var coord: Coordinates var typeData: String = "" for obj in geometryObject.values { print(obj) if let type = obj as? String { typeData = type } else { //return } if let coordObj = obj as? [Double] { coord = Coordinates(latitude: coordObj[0],longitude: coordObj[1]) coordData?.append(coord) } else { //return } geometries = Geometry(type: typeData,coordinates: coordData!) } let feature = Feature(type: type,properties: properties!,geometry: geometries!) features.append(feature) print("Feature is \(features)") } } } catch { } }
}
但这不起作用.
解决方法
在第一个特征字典中,您的坐标键具有2D数组,因此您还需要在geometryObject.values for循环中添加一个if条件.
for obj in geometryObject.values { print(obj) if let type = obj as? String { typeData = type } if let coordObj = obj as? [Double] { coord = Coordinates(latitude: coordObj[0],longitude: coordObj[1]) coordData?.append(coord) } //Add one more if let condition if let coordObj = obj as? [[Double]] { for coordinate in coordObj { let coord = Coordinates(latitude: coordinate[0],longitude: coordinate[1]) coordData?.append(coord) } } geometries = Geometry(type: typeData,coordinates: coordData!) } let feature = Feature(type: type,geometry: geometries!) features.append(feature)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。