     /**
     - returns: An Array of geometries in this GeometryCollection.
      */
-    public convenience init?(geometries: Array<Geometry>) {
+    public convenience init?(geometries: [T]) {
         let geometriesPointer = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: geometries.count)
         defer { geometriesPointer.deallocate(capacity: geometries.count) }
         for (i, geom) in geometries.enumerated() {

/**
A `MultiPoint` is a `GeometryCollection` of `Point`s.
*/
open class MultiPoint<T: Waypoint> : GeometryCollection<Waypoint> {
    open override class func geometryTypeId() -> Int32 {
        return 4 // GEOS_MULTIPOINT
    }
    public convenience init?(points: Array<Waypoint>) {
        let coordsPointer = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: points.count)
        defer { coordsPointer.deallocate(capacity: points.count) }
        for (i, geom) in points.enumerated() {

/**
A `MultiPolygon` is a `GeometryCollection` of `Polygon`s.
*/
open class MultiPolygon<T: Polygon> : GeometryCollection<T> {
    open override class func geometryTypeId() -> Int32 {
        return 6 // GEOS_MULTIPOLYGON
    }
    public convenience init?(polygons: [T]) {
        let coordsPointer = UnsafeMutablePointer<OpaquePointer?>.allocate(capacity: polygons.count)
        defer { coordsPointer.deallocate(capacity: polygons.count) }
        for (i, geom) in polygons.enumerated() {
