Geohash第三方库示例

关于什么是Geohash可以参考这篇文章Java实现空间索引编码(GeoHash),个人觉得写得不错。

Github上有一个Geohash的开源库geohash-java,这篇文章主要通过一个示例说说geohash-java这个库怎么用。
好了,开门,放代码!

package cn.tzy.geohash;

import java.util.ArrayList;
import java.util.List;

import ch.hsr.geohash.GeoHash;

public class GeoHashEx {

    public static void main(String[] args) {
        double lat = 30.549608; // 纬度坐标
        double lon = 114.376971; // 经度坐标

        int precision = 8; // Geohash编码字符的长度(最大为12)
        GeoHash geoHash = GeoHash.withCharacterPrecision(lat, lon, precision);
        String binaryCode = geoHash.toBinaryString(); // 使用给定的经纬度坐标生成的二进制编码
        System.out.println("经纬度坐标: (" + lat + ", " + lon + ")");
        System.out.println("二进制编码:" + binaryCode);
        String hashCode = geoHash.toBase32(); // 使用给定的经纬度坐标生成的Geohash字符编码
        System.out.println("Geohash编码:" + hashCode);

        // 从二进制的编码中分离出经度和纬度分别对应的二进制编码
        char[] binaryCodes = binaryCode.toCharArray();
        List latCodes = new ArrayList();
        List lonCodes = new ArrayList();
        for (int i = 0; i < binaryCodes.length; i++) {
            if (i % 2 == 0) {
                lonCodes.add(binaryCodes[i]);
            } else {
                latCodes.add(binaryCodes[i]);
            }
        }
        StringBuilder latCode = new StringBuilder(); // 纬度对应的二进制编码
        StringBuilder lonCode = new StringBuilder(); // 经度对应的二进制编码
        for (Character ch : latCodes) {
            latCode.append(ch);
        }
        for (Character ch : lonCodes) {
            lonCode.append(ch);
        }

        System.out.println("纬度二进制编码:" + latCode.toString());
        System.out.println("经度二进制编码:" + lonCode.toString());
    }
}

输出结果:

经纬度坐标: (30.549608, 114.376971)
二进制编码:1110011001000111001101110010011011011010
Geohash编码:wt3mf9qu
纬度二进制编码:10101011011100101100
经度二进制编码:11010001010101011011

你可能感兴趣的:(#,Linux,Java)