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




目录
相关文章
|
XML 人工智能 缓存
使用 Higress 快速构建 AI 应用
Higress 基于企业内外的丰富场景沉淀了众多面向 AI 的功能,推出了 AI 原生的 API 网关形态并且全部开源。
765 89
|
JSON 安全 Java
security跨域配置
security跨域配置
362 3
|
JavaScript Java 数据挖掘
如何成为一名独立开发者
【1月更文挑战第10天】如何成为一名独立开发者
|
SQL Oracle 关系型数据库
MySQL之如何将字符串分隔为列表结果集
MySQL之如何将字符串分隔为列表结果集
825 1
|
安全 Linux 应用服务中间件
[笔记]CentOS7 vsftpd安装及配置使用
[笔记]CentOS7 vsftpd安装及配置使用
1263 0
|
缓存 前端开发 JavaScript
【面试题】金九银十,你准备好面试了吗? (30w字前端面试题总结)( React)
【面试题】金九银十,你准备好面试了吗? (30w字前端面试题总结)( React)
394 0
|
Oracle Java 关系型数据库
CentOS7 下rpm安装jdk1.8
CentOS7 下rpm安装jdk1.8
713 0
|
3月前
|
人工智能 监控 搜索推荐
国庆假期倒数第2天!用这个AI指令"温和重启"工作状态,告别节后综合征
国庆假期倒数第二天,你是否正陷入节后焦虑?本文以“系统重启”为喻,剖析生物钟紊乱、心理落差等四大“故障”,并提供AI驱动的渐进式恢复方案。通过个性化指令,生成分阶段行动清单,助你科学调适,平稳过渡到工作状态,实现高效开工。
234 8
|
4月前
|
传感器 算法 机器人
【IMU数据与GPS融合的预积分方法】基于流形的IMU预积分,用于高效的视觉惯性最大后验估计、SE3姿势区分为IMU(Matlab代码实现)
【IMU数据与GPS融合的预积分方法】基于流形的IMU预积分,用于高效的视觉惯性最大后验估计、SE3姿势区分为IMU(Matlab代码实现)
242 4
|
6月前
|
人工智能 数据库 开发工具
通过阿里云 Milvus 和 Dify 平台构建RAG系统
本文介绍了如何结合阿里云 Milvus 向量数据库与低代码 AI 平台 Dify,快速构建企业级检索增强生成(RAG)应用。通过该方案,可有效解决大语言模型的知识局限与“幻觉”问题,提升 AI 应用的回答准确性与可靠性。