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};
}
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));
}
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)));
}
}
}
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();
}
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");
}
}