美文网首页
获取指定矩形内的geoHash

获取指定矩形内的geoHash

作者: 陈小猪_ | 来源:发表于2020-08-27 15:24 被阅读0次

    给定一个栅格,求出栅格里面的所有geoHash。至于什么是geoHash这边不多解释;做法肯定也不止一种,这里利用第三方工具包,引入包。

    <dependency>

    <groupId>ch.hsr</groupId>

    <artifactId>geohash</artifactId>

    <version>1.4.0</version>

    </dependency>

    /**

    * @param maxLat 矩形内纬度的最大值

    * @param minLng 矩形内经度的最小值

    *                              左上角的经纬度

    * @param minLat 矩形内纬度的最小值

    * @param maxLng 矩形内经度的最大值

    *                              右下角的经纬度

    * @param precision geoHash的精度

    * @Description: 获取指定经纬度范围内的geoHash编码

    */

    public static HashSet<String> getGeoHashByFence(double maxLat, double minLng, double minLat, double maxLng, int precision) {

    //通过矩形的左下角 (西南角) 构建一个精度为precision的geoHash值

    GeoHash southWestCorner = GeoHash.withCharacterPrecision(minLat, minLng, precision);

    //通过矩形的右上角 (东北角) 构建一个精度为precision的geoHash值

    GeoHash northEastCorner = GeoHash.withCharacterPrecision(maxLat, maxLng, precision);

    //使用两个geoHash构建一个外接盒型 TwoGeoHashBoundingBox twoGeoHashBoundingBox = new TwoGeoHashBoundingBox(southWestCorner, northEastCorner);

    //盒型geoHash迭代器,获取矩形内的全部geoHash

    BoundingBoxGeoHashIterator iterator = new BoundingBoxGeoHashIterator(twoGeoHashBoundingBox);

    List<Rectangle> list = Lists.newArrayList();

    HashSet<String> set = Sets.newHashSet();

    GeoHash geoHash;

    //循环遍历

    while (iterator.hasNext())

    {

    geoHash = iterator.next();

    list.add(getFence(geoHash));

    //获取geoHash编码 set.add(geoHash.toBase32());

    }

    return set;

    }

    /**

    * @param geoHash 指定的geoHash

    * @Description: 获取指定geoHash的矩形

    */

    public static Rectangle getFence(GeoHash geoHash) {

    //获取geoHash的矩形

    BoundingBox boundingBox = geoHash.getBoundingBox();

    //获取矩形的左下角(西南角)经纬度

    WGS84Point northWestCorner = boundingBox.getSouthWestCorner();

    //获取矩形的右上角(东北角)经纬度

    WGS84Point southEastCorner = boundingBox.getNorthEastCorner();

    //包装成矩形

    return new Rectangle(northWestCorner.getLongitude(), northWestCorner.getLatitude(), southEastCorner.getLongitude(), southEastCorner.getLatitude());

    }

    黑色为指定的矩形。

    geohash范围介绍

    geohash根据字符串的长度代表着生成矩形覆盖的范围,比如当wx4g29代表着宽为1.2km,高为609m的一个矩形,具体的一些范围如下图:

    相关文章

      网友评论

          本文标题:获取指定矩形内的geoHash

          本文链接:https://www.haomeiwen.com/subject/jkicsktx.html