Geohash: Difference between revisions

Content added Content deleted
(Added Go)
(Added Wren)
Line 140: Line 140:
}
}
return hash
return hash
}</lang>

=={{header|Wren}}==
{{trans|Swift}}
{{libheader|Wren-fmt}}
<lang ecmascript>import "/fmt" for Fmt

var gBase32 = "0123456789bcdefghjkmnpqrstuvwxyz"

var encodeGeohash = Fn.new { |location, prec|
var latRange = -90..90
var lngRange = -180..180
var hash = ""
var hashVal = 0
var bits = 0
var even = true
while (hash.count < prec) {
var val = even ? location[1] : location[0]
var rng = even ? lngRange : latRange
var mid = (rng.from + rng.to) / 2
if (val > mid) {
hashVal = hashVal*2 + 1
rng = mid..rng.to
if (even) lngRange = mid..lngRange.to else latRange = mid..latRange.to
} else {
hashVal = hashVal * 2
if (even) lngRange = lngRange.from..mid else latRange = latRange.from..mid
}
even = !even
if (bits < 4) {
bits = bits + 1
} else {
bits = 0
hash = hash + gBase32[hashVal]
hashVal = 0
}
}
return hash
}
}

var data = [
[[51.433718, -0.214126], 2],
[[51.433718, -0.214126], 9],
[[57.64911, 10.40744 ], 11]
]

for (d in data) {
var geohash = encodeGeohash.call(d[0], d[1])
var loc = "[%(Fmt.f(9, d[0][0], 6)), %(Fmt.f(9, d[0][1], 6))]"
System.print("geohash for %(loc), precision %(Fmt.d(-2, d[1])) = %(geohash)")
}</lang>

{{out}}
<pre>
geohash for [51.433718, -0.214126], precision 2 = gc
geohash for [51.433718, -0.214126], precision 9 = gcpue5hp4
geohash for [57.649110, 10.407440], precision 11 = u4pruydqqvj
</pre>