Cómo dibujar GeoJSON en Apple Maps como superposición usando Swift 3

Estoy tratando de dibujar los siguientes datos GeoJSON como un exceso en MKMapView.

El archivo GeoJSON es el siguiente.

{

"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

            ]

        }

    }
]

}

Pero no puedo analizarlo. Por favor ayuda. ¿Hay SDK de terceros disponibles para hacer esto?

He escrito el código en Swift 3 como a continuación

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 {

    }
}

}

Pero esto no está funcionando.

Respuestas a la pregunta(1)

Su respuesta a la pregunta