Java应用:经纬度匹配(geohash加密)
本文采用http://gc.ditu.aliyun.com地址进行经纬度匹配,无数量限制
如果给定经纬度进行geohash加密操作,先解密得到相应gps坐标,具体程序如下所示:
import java.text.DecimalFormat;
import java.util.BitSet;
import java.util.HashMap; public class Lon_Lat { public static String location;
public static String strlatlon[]; private static int numbits=5*7;
final static char[] digits = { '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' };
final static HashMap<Character,Integer> lookup=new HashMap<Character,Integer>();
static {
int i = 0;
for (char c : digits) {
lookup.put(c, i++);
}
} public static void main(String ages) {
double[] latlon=new Lon_Lat().decode(ages);
Location loc=new Location();
strlatlon=new String[2]; strlatlon[0]=String.valueOf(latlon[0]);
strlatlon[1]=String.valueOf(latlon[1]);
loc.main(strlatlon); location=loc.location; //System.out.println("纬度:"+latlon[0]+"\n经度:"+latlon[1]+"\n地址:"+location);
}
/*
* 将GeoHash字串解码成经纬度
*/
public double[] decode(String geohash) {
StringBuffer buffer=new StringBuffer();
for(char c:geohash.toCharArray()) {
int i=lookup.get(c);
String _buffer=Integer.toBinaryString(i);
//_buffer=String.format("%05d",_buffer);
if(_buffer.length()==1)
_buffer="0000"+_buffer;
else if(_buffer.length()==2)
_buffer="000"+_buffer;
else if(_buffer.length()==3)
_buffer="00"+_buffer;
else if(_buffer.length()==4)
_buffer="0"+_buffer;
//System.out.println("i:"+i+" "+_buffer);
buffer.append(_buffer); }
//System.out.println(buffer); BitSet lonset=new BitSet();
BitSet latset=new BitSet(); int j=0;
for(int i=0;i<numbits*2;i+=2) {
boolean isSet=false;
if(i<buffer.length())
isSet=buffer.charAt(i)=='1';
lonset.set(j++, isSet);
} j=0;
for(int i=1;i<numbits*2;i+=2) {
boolean isSet=false;
if(i<buffer.length())
isSet=buffer.charAt(i)=='1';
latset.set(j++, isSet);
} double lat=decode(latset,-90,90);
double lon=decode(lonset,-180,180); DecimalFormat df=new DecimalFormat("0.000000");
return new double[] {Double.parseDouble(df.format(lat)),Double.parseDouble(df.format(lon))};
} /*
* 根据二进制编码串和指定的数值变化范围计算得到经纬值
*/
private double decode(BitSet bs,double floor,double ceiling) {
double mid=0;
for(int i=0;i<bs.length();i++) {
mid=(floor+ceiling)/2;
if(bs.get(i))
floor=mid;
else
ceiling=mid;
}
return mid;
} }
根据上述得到的地址进行地址匹配,具体程序如下:
import java.net.URL;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject; public class Location {
public static String location;
public static void main(String ags[]) { String add=getAdd("40.072632","116.424866");
//System.out.println(add.substring(0,1)); JSONObject jsonObject=JSONObject.fromObject(add);
JSONArray jsonArray=JSONArray.fromObject(jsonObject.getString("addrList"));
JSONObject j_2=JSONObject.fromObject(jsonArray.get(1));
String allAdd=j_2.getString("admName");
String addr=j_2.getString("addr");
String name=j_2.getString("name"); //String loc=allAdd+addr+name;
String arr[]=allAdd.split(",");
if(arr.length==3) {
if(arr[0]==arr[1])
location=arr[0]+arr[2]+addr+name;
else
location=arr[0]+arr[1]+arr[2]+addr+name;
}else {
if(arr[0]==arr[1])
location=arr[0]+addr+name;
else
location=arr[0]+arr[1]+addr+name;
} System.out.println(allAdd+addr+name);
System.out.println("省:"+arr[0]+"\n市:"+arr[1]+"\n区:"+arr[2]+"\n"+name);
}
public static String getAdd(String lat,String lon) {
String urlString="http://gc.ditu.aliyun.com/regeocoding?l="+lat+","+lon+"type=010";
String res="";
try {
URL url=new URL(urlString);
java.net.HttpURLConnection conn=(java.net.HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
java.io.BufferedReader in=new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
String line;
while((line=in.readLine())!=null) {
res+=line+"\n";
}
in.close();
}catch(Exception e) {
System.out.println("error in wapaction,and e is"+e.getMessage());
}
//System.out.println(res);
return res;
} }
地址匹配信息如下,可按名称提取相应信息:
Java应用:经纬度匹配(geohash加密)的更多相关文章
- (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题
我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...
- Java 环境下使用 AES 加密的特殊问题处理
在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...
- Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较
参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...
- java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全
前言 在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...
- [转]JAVA 根据经纬度算出附近的正方形的四个角的经纬度
csv文件转化为geojson文件中,涉及到路测图的打点生成,打点是由一个个正方形组成,而正方形是由四个点组成的,这四个点根据经纬度和范围生成,具体的实现代码是从网上找来的: /** * * @par ...
- java中使用MD5进行加密 BASE64Encoder 编码
原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密 在各种应用系统的开发中,经常需 ...
- java sm4国密算法加密、解密
java sm4国密算法加密.解密 CreationTime--2018年7月5日09点20分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59. ...
- C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...
- python应用:经纬度匹配
需要安装第三方包:requests 本次经纬度匹配采用高德地图api,首先将gps坐标转化为高德地图的经纬度坐标,然后再根据转化后的坐标进行匹配. 本次匹配主要是获取距离给定经纬度最近的poi点地址信 ...
随机推荐
- 任务二:零基础HTML及CSS编码练习
任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基本的 ...
- HTML 5网页设计入门必读(书)
今天看了一本由人民邮电出版社出版.邢薇薇 郭俊飞 王雪翻译的<HTML 5网页设计入门必读>,在此整理一下知识点,以及写一些自己的读后感. 本书的开章还是和大部分HTML 5书籍一样,用极 ...
- 解析angularjs中的绑定策略
一.首先回顾一下有哪些绑定策略? 看这个实在是有点抽象了,我们来看具体的实例分析吧! 二.简单的Demo实例 @绑定:传递一个字符串作为属性的值.比如 str : ‘@string’ 控制器中代码部分 ...
- Dynamics CRM GBK编码
Dynamics CRM用文本汉字为条件去请求数据时,传过去的竟然是GBK编码⊙_⊙ 下面这段代码解决了我的问题,这是拷贝自网上一位大神的博客: http://qq100002656.blog.163 ...
- 【Spring实战】—— 8 自动装配
本篇介绍一下自动装配的知识,Spring为了简化配置文件的编写.采用自动装配方式,自动的装载需要的bean. 自动装配 有以下几种方式: 1 byName 通过id的名字与属性的名字进行判断,要保证B ...
- python入门20 导入模块(引包)
1 引包: import module 或 import module.module1 或 from module import module1,module2...等 2 import xx ...
- 一、OSI模型
OSI/RM协议是由ISO(国际标准化组织)制定的,它有三个基本的功能:提供给开发者一个必须的.通用的概念以便开发完善.可以用来解释连接不同系统的框架.OSI将计算机网络体系结构(architectu ...
- 【甘道夫】NN HA 对于 Client 透明的实验
之前转载过一篇[伊利丹]写的NN HA实验记录.该博客描写叙述了主备NN透明切换的过程,也就是说,当主NN挂掉后,自己主动将备NN切换为主NN了,Hadoop集群正常执行. 今天我继续做了一个实验.目 ...
- python:验证客户端链接的合法性与socketserver
一.验证客户端链接的合法性 from socket import * import hmac,os secret_key=b'linhaifeng bang bang bang' def conn_a ...
- ZJOI2019Day2余姚中学游记(4.23~4.26)
前言 \(Day2\),又是一场噩梦. 前段时间去做了挺多十二省联考和\(HNOI2019\)的题目,还订正掉了\(Day1\)的\(T1\)和\(T2\)(\(T3\)动态\(DP\)完全不想订正啊 ...