(二)GeoHash转经纬度

简介: GeoHash转经纬度

(一)经纬度转GeoHash

(二)GeoHash转经纬度

importjava.util.ArrayList;
importjava.util.List;
publicclassSpaceCoordinateHelper {
publicfinaldoubleMax_Lat=90;
publicfinaldoubleMin_Lat=-90;
publicfinaldoubleMax_Lng=180;
publicfinaldoubleMin_Lng=-180;
/*** 纬度二值串*/publicstaticListlatList=newArrayList<>();
/*** 经度二值串*/publicstaticListlngList=newArrayList<>();
/*** 纬度估计值*/publicstaticintlat;
/*** 经度估计值*/publicstaticintlng;
privatefinalString[] base32Lookup= {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "b", "c", "d", "e", "f", "g", "h", "j", "k",
"m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"    };
publicdouble[] getSpaceCoordinate(StringgeoHashCode) {
Listlist=base32Decode(geoHashCode);
System.out.println(list);
Stringstr=convertToIndex(list);
System.out.println(str);
splitLatAndLng(str);
System.out.println("latList: "+latList);
System.out.println("lngList: "+lngList);
System.out.println(revert(Min_Lat, Max_Lat, latList));
System.out.println(revert(Min_Lng, Max_Lng, lngList));
returnnewdouble[]{lat, lng};
    }
/*** 将二值串转换为经纬度值** @param min  区间最小值* @param max  区间最大值* @param list 二值串列表*/publicdoublerevert(doublemin, doublemax, Listlist) {
doublevalue=0;
doublemid;
if (list.size() <=0) {
return (max+min) /2.0;
        }
for (Stringflag : list) {
mid= (max+min) /2;
if ("0".equals(flag)) {
max=mid;
            }
if ("1".equals(flag)) {
min=mid;
            }
value= (max+min) /2;
        }
returnDouble.parseDouble(String.format("%.6f", value));
    }
/*** 分离经度与纬度串** @param latAndLngStr 经纬度二值串*/publicvoidsplitLatAndLng(StringlatAndLngStr) {
for (inti=0; i<latAndLngStr.length(); i++) {
//            奇数位,纬度if (i%2==1) {
latList.add(String.valueOf(latAndLngStr.charAt(i)));
            } else {
//                偶数位,经度lngList.add(String.valueOf(latAndLngStr.charAt(i)));
            }
        }
    }
/*** 将十进制数转为五个二进制数** @param nums 十进制数* @return 五个二进制数*/privateStringconvertToIndex(Listnums) {
StringBuilderstr=newStringBuilder();
for (Integernum : nums) {
StringBuildersb=newStringBuilder(Integer.toBinaryString(num));
intlength=sb.length();
if (length<5) {
for (inti=0; i<5-length; i++) {
sb.insert(0, "0");
                }
            }
str.append(sb);
        }
returnstr.toString();
    }
/*** 将base32串转为合并的二值串** @param str base32串* @return 合并的二值串*/privateListbase32Decode(Stringstr) {
Listlist=newArrayList<>();
for (inti=0; i<str.length(); i++) {
Stringch=String.valueOf(str.charAt(i));
for (intj=0; j<base32Lookup.length; j++) {
if (base32Lookup[j].equals(ch)) {
list.add(j);
                }
            }
        }
returnlist;
    }
publicstaticvoidmain(String[] args) {
longstart=System.currentTimeMillis();
SpaceCoordinateHelperspaceCoordinateHelper=newSpaceCoordinateHelper();
spaceCoordinateHelper.getSpaceCoordinate("wx4g0s8");
System.out.println("耗时 "+ (System.currentTimeMillis() -start) +" ms");
    }
}




目录
相关文章
|
机器学习/深度学习 传感器 定位技术
基于WGS84 椭球恒向线距离计算沿纬度_经度路径行驶的距离附matlab代码
基于WGS84 椭球恒向线距离计算沿纬度_经度路径行驶的距离附matlab代码
|
2月前
|
算法 C++
大地经纬度坐标与地心地固坐标的的转换
大地经纬度坐标与地心地固坐标的的转换
54 0
|
定位技术
百度地图开发:字符串经纬度转为经纬度数组的解决方案
百度地图开发:字符串经纬度转为经纬度数组的解决方案
146 0
|
5月前
|
Python
计算两个位置经纬度距离
计算两个位置经纬度距离
108 0
|
存储 NoSQL Go
GeoHash之存储篇
GeoHash之存储篇
139 0
|
Java
java 经纬度处理、计算两地的距离、获取当前一定距离以内的经纬度值
java 经纬度处理、计算两地的距离、获取当前一定距离以内的经纬度值
424 0
根据经纬度计算距离
#region 计算经纬度 private const double EARTH_RADIUS = 6378137; /// /// 计算两点位置的距离,返回两点的距离,单位 米 /// 该公式为GOOGLE提供,误差小于0.
1096 0