 }
 
 /// A coordinate consisting of latitude and longitude
-public struct Coordinate {
+public struct Coordinate: Equatable, Hashable {
     fileprivate static let earthRadius = Distance(6371e3)
     
     public var latitude: Degrees

        hash = ((hash << 5) &+ hash) &+ self.longitude.hashValue
        return hash
    }
}

extension Coordinate: CustomStringConvertible {

    public init(_ latitude: Degrees, _ longitude: Degrees) {
        self.init(latitude: latitude, longitude: longitude)
    }
    
    #if swift(>=4.1)
    // Use default implementation of Equatable and Hashable
    #else
    public static func ==(lhs: Coordinate, rhs: Coordinate) -> Bool {
        return lhs.latitude == rhs.latitude && lhs.longitude == rhs.longitude
    }
    
    public var hashValue: Int {
        // DJB Hash Function
        var hash = 5381
