本文采用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加密)的更多相关文章

  1. (iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

    我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Bas ...

  2. Java 环境下使用 AES 加密的特殊问题处理

    在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 ...

  3. Java字符串的匹配问题,String类的matches方法与Matcher类的matches方法的使用比较,Matcher类的matches()、find()和lookingAt()方法的使用比较

    参考网上相关blog,对Java字符串的匹配问题进行了简单的比较和总结,主要对String类的matches方法与Matcher类的matches方法进行了比较. 对Matcher类的matches( ...

  4. java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  5. [转]JAVA 根据经纬度算出附近的正方形的四个角的经纬度

    csv文件转化为geojson文件中,涉及到路测图的打点生成,打点是由一个个正方形组成,而正方形是由四个点组成的,这四个点根据经纬度和范围生成,具体的实现代码是从网上找来的: /** * * @par ...

  6. java中使用MD5进行加密 BASE64Encoder 编码

    原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密     在各种应用系统的开发中,经常需 ...

  7. java sm4国密算法加密、解密

      java sm4国密算法加密.解密 CreationTime--2018年7月5日09点20分 Author:Marydon 1.准备工作 所需jar包: bcprov-jdk15on-1.59. ...

  8. C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密

    public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...

  9. python应用:经纬度匹配

    需要安装第三方包:requests 本次经纬度匹配采用高德地图api,首先将gps坐标转化为高德地图的经纬度坐标,然后再根据转化后的坐标进行匹配. 本次匹配主要是获取距离给定经纬度最近的poi点地址信 ...

随机推荐

  1. requireJS基本配置相关

    requireJS: (1)实现js文件的异步加载,避免页面失去响应: (2)管理模块之间的依赖性,便于代码的编写和维护. 加载: <script src="js/require.js ...

  2. 使用版本 1.0.0 的 Azure ARM SDK for Java 创建虚拟机时报错

    问题描述 我们可以通过使用 Azure ARM SDK 来管理 Azure 上的资源,因此我们也可以通过 SDK 来创建 ARM 类型的虚拟机,当我们使用 1.0.0 版本的 Azure SDK fo ...

  3. solidity语言4

    引用类型(Reference Types) memory 不支持持久保存 storage 保留为变量 复杂类型如arrays和structs,有附加信息,'data location',提示存储在'm ...

  4. patch 修改有问题的

    diff --git a/include/net/tcp.h b/include/net/tcp.h@@ -1013,8 +1048,13 @@ static inline u32 keepalive ...

  5. Java传引用问题

            Java传引用问题  使用Java调用方法时,可以传值,也可以传引用.下面说说两者的区别: 1.传值 传值中的"值"类型是指java的8大基本类型(基础知识,不知道 ...

  6. 设计模式——工厂模式(Factory Method)

    工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类.工厂方法使一个类的实例化延迟到其子类. UML图: 运算基类: package com.cnblog.clarck; /** * 数据 ...

  7. CF449C Jzzhu and Apples

    嘟嘟嘟 这道题正解是怎么对的其实我也不清楚,总之靠感性理解吧. 首先当然要把1到n / 2的素数都筛出来,因为两两能配对的数一定都是这些素数的倍数.这也就说明对于(n / 2, n]的素数,他们一定不 ...

  8. POJ Air Raid 【DAG的最小不相交路径覆盖】

    传送门:http://poj.org/problem?id=1422 Air Raid Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  9. [18/11/11] java标识符及变量

    一.标识符规范 1.必须以字母.下划线 .美元符号开头. 即数字不能作为开头,其它位随便 2.不可以是java关键字(即保留字),  如static .class.new 等 .    注:int 年 ...

  10. 2018.11.26 struts2流程源码

    struts2的架构图 从最上面的类开始,也就是i 我们的核心过滤器strutsPrepareAndExecuteFilter 判断当前请求是否由struts2来处理,如果是就往else走,不由它来处 ...