获取指定矩形内的geoHash

给定一个栅格,求出栅格里面的所有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的一个矩形,具体的一些范围如下图:

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值