Geohash: Difference between revisions

m
→‎{{header|Swift}}: code improvement
(Minor tidying of task description.)
m (→‎{{header|Swift}}: code improvement)
Line 107:
=={{header|Swift}}==
 
<lang Swift>extension String {
<lang Swift>let gBase32 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "b", "c", "d", "e", "f", "g", "h", "j", "k", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
subscript(i: Int) -> String {
String(self[index(startIndex, offsetBy: i)])
}
}
 
struct Coordinate {
func encodeGeohash (for location: Array<Double>, withPrecision precision: Int = 9) -> String {
var latitude: Double
var longitude: Double
}
 
let base32 = "0123456789bcdefghjkmnpqrstuvwxyz" // no "a", "i", "l", or "o"
 
func encodeGeohash (for location: Array<Double>Coordinate, withPrecision precision: Int = 9) -> String {
var latitudeRange = -90.0...90.0
var longitudeRange = -180...180.0
Line 119 ⟶ 130:
 
while (hash.count < precision) {
let val = even ? location[1].longitude: location[0].latitude
var range = even ? longitudeRange : latitudeRange
let mid = (range.lowerBound + range.upperBound) / 2
Line 141 ⟶ 152:
} else {
bits = 0
hash += gBase32base32[hashVal]
hashVal = 0
}
Anonymous user