code: function normalize (unknown) {
    if (!unknown) throw new Error('Value must not be null or undefined.')
    if (Array.isArray(unknown)) return fromCoordinates(unknown)
    else if (typeof unknown === 'string') return fromString(unknown)
    else if ((unknown.x || unknown.x === 0) && (unknown.y || unknown.y === 0)) return fromPoint(unknown)
    return floatize(unknown)
  }
docs: (exception type)
  
  An error that is thrown upon providing invalid coordinates.
  @typedef {Error} lonlat.types.InvalidCoordinateException
   
  Parse an unknown type of input.
  
  @module conveyal/lonlat
  @param {lonlat.types.input} unknown
  @return {lonlat.types.output}
  @throws {lonlat.types.InvalidCoordinateException}
  @example
  var lonlat = require('@conveyal/lonlat')
  
  Object with lon/lat-ish attributes
  var position = lonlat({ lon: 12, lat: 34 })         // { lon: 12, lat: 34 }
  position = lonlat({ lng: 12, lat: 34 })             // { lon: 12, lat: 34 }
  position = lonlat({ longitude: 12, latitude: 34 })  // { lon: 12, lat: 34 }
  position = lonlat({ lng: 12, latitude: 34 })        // { lon: 12, lat: 34 }
  
  coordinate array
  position = lonlat([12, 34])   // { lon: 12, lat: 34 }
  
  string
  position = lonlat('12,34')   // { lon: 12, lat: 34 }
  
  object with x and y attributes
  position = lonlat({ x: 12, y: 34 })   // { lon: 12, lat: 34 }
  
  the following will throw errors
  position = lonlat({ lon: 999, lat: 34 })   // Error: Invalid longitude value: 999
  position = lonlat({ lon: 12, lat: 999 })   // Error: Invalid latitude value: 999
  position = lonlat({})                      // Error: Invalid latitude value: undefined
  position = lonlat(null)                    // Error: Value must not be null or undefined