如何在 Kotlin 中将 geohash 转换为经纬度

How to convert geohash to Latitude and Longitude in Kotlin

我有一个字符串值作为 geohash,我想在 Kotlin 中将其更改为纬度和经度。我找不到任何图书馆。 如何在 Kotlin 中将 geohash 转换为经纬度?

看起来 geohash-java 支持这个:

An implementation of Geohashes in pure Java. The produced hashes, when using character precision (multiples of 5 bits) are compatible to the reference implementation geohash.org.

You can however also encode Geohashes down to the full available precision of a long i.e. 64 bits.

如果您使用的是 Maven,则可以将以下内容添加到 pom.xml 文件中:

<dependency>
    <groupId>ch.hsr</groupId>
    <artifactId>geohash</artifactId>
    <version>1.4.0</version>
</dependency>

或者如果您使用 Gradle,则将以下实施行添加到您的 build.gradle 文件中:

implementation("ch.hsr:geohash:1.4.0")

用法示例:

import ch.hsr.geohash.GeoHash

fun main(args: Array<String>) {
    val geoHashString = "u4pruydqqvj" // Peninsula of Jutland, Denmark from en.wikipedia.org/wiki/Geohash
    println("geoHashString: $geoHashString")
    val geoHash = GeoHash.fromGeohashString(geoHashString)
    println("geoHash: $geoHash")
    val point = geoHash.originatingPoint
    println("point: $point")
    val lat = point.latitude
    println("lat: $lat")
    val lng = point.longitude
    println("lng: $lng")
}

输出:

geoHashString: u4pruydqqvj
geoHash: 1101000100101011011111010111100110010110101101101110001000000000 -> (57.64911130070686,10.407439023256302) -> (57.649109959602356,10.40744036436081) -> u4pruydqqvj
point: (57.64911063015461,10.407439693808556)
lat: 57.64911063015461
lng: 10.407439693808556