獲取指定矩形內的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;

//循環(huán)遍歷

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的一個矩形,具體的一些范圍如下圖:


?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容