Java 调用Google Map Api解析地址,解析经纬度实例
立即下载
资源介绍:
使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务。一般而言数据量不大的情况使用是不限制的。按照Google官方说法是连续90天请求地理编码服务次数超过2000次就会受到限制,因此可以将这些解析好的地址放在Database中,这样可以避免重复请求同一个地址。
/*
* System Abbrev £º
* system Name :
* Component No £º
* Component Name£º
* File name £ºGoogleGeocoderUtil.java
* Author £ºPeter.Qiu
* Date £º2014-9-18
* Description :
*/
/* Updation record 1£º
* Updation date : 2014-9-18
* Updator : Peter.Qiu
* Trace No:
* Updation No:
* Updation Content:
*/
package com.qiuzhping.google;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import com.qiuzhping.google.beans.GoogleGeocodeJSONBean;
/**
*
* type :1-->address 2-->latlng
*
*
* @author Peter.Qiu
* @version [Version NO, 2014-9-18]
* @see [Related classes/methods]
* @since [product/module version]
*/
public final class GoogleGeocoderUtil {
public static final int ADDRESS = 1;
public static final int LATLNG = 2;
private final String GOOGLEAPIURL="http://maps.googleapis.com/maps/api/geocode/json?language=en&sensor=true";
private Logger log = Logger.getLogger(GoogleGeocoderUtil.class.getName());
private int type ;//1-->address 2-->latlng
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
private static GoogleGeocoderUtil instance;
public static GoogleGeocoderUtil getInstance() {
if(instance == null){
instance = new GoogleGeocoderUtil();
}
return instance;
}
/**
* 2014-9-18
*
* @author Peter.Qiu
* @param address
* @return
* @return GoogleGeocodeJSONBean [Return type description]
* @throws Exception
* @exception throws [Exception] [Exception description]
* @see [Related classes#Related methods#Related properties]
*/
public GoogleGeocodeJSONBean geocodeByAddress(String address) throws Exception{
if(address == null || address.equals("")){
return null;
}
log.info("geocode By Address : "+address);
log.info("Start geocode");
GoogleGeocodeJSONBean bean = null;
BufferedReader in= null;
HttpURLConnection httpConn = null;
try {
log.info("Start open url");
String urlPath = GOOGLEAPIURL+"&address="+URLEncoder.encode(address,"UTF-8");;
if(this.getType() == LATLNG){
urlPath = GOOGLEAPIURL+"&latlng="+address;
}
log.info("url : "+urlPath);
URL url = new URL(urlPath);
httpConn = (HttpURLConnection) url.openConnection();
log.info("End open url");
httpConn.setDoInput(true);
in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
String line;
String result="";
while ((line = in.readLine()) != null) {
result += line;
}
in.close();
//httpConn.disconnect();
JSONObject jsonObject = JSONObject.fromObject( result );
bean = (GoogleGeocodeJSONBean) JSONObject.toBean( jsonObject, GoogleGeocodeJSONBean.class );
if(bean != null && bean.status.equalsIgnoreCase("ok") && bean.results != null && bean.results[0].geometry.getLocation() != null){
log.info("Start display Geocode info");
log.info("Formatted Address :" + bean.results[0].getFormatted_address());
log.info("geometry Location : " + bean.results[0].geometry.getLocation().getLat() + ","+bean.results[0].geometry.getLocation().getLng());
log.info("End display Geocode info");
}
log.info("End geocode");
return bean;
} catch (MalformedURLException e) {
log.error(e);
throw e;
} catch (IOException e) {
log.error(e);
throw e;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
log.error(e);
throw e;
}
}
if (httpConn != null) {
httpConn.disconnect();
}
}
}
public String getGoogleLongitudeDimensions(GoogleGeocodeJSONBean googleBean) throws IOException{
if (googleBean != null && googleBean.status.equalsIgnoreCase("ok")
&& googleBean.results[0] != null
&& googleBean.results[0].formatted_address != null
&& googleBean.results[0].getGeometry().location != null
&& googleBean.results[0].getGeometry().location.getLat() != null
&& googleBean.results[0].getGeometry().location.getLng() != null) {
String formatted_Address = googleBean.results[0].formatted_address;
String location = googleBean.results[0].getGeometry().location.getLat()+","+googleBean.results[0].getGeometry().location.getLng();
return formatted_Address.trim()+"|"+location;
}
return null;
}
/**
* 2014-9-18
*
* @author Peter.Qiu
* @param args [Parameters description]
* @return void [Return type description]
* @throws Exception
* @exception throws [Exception] [Exception description]
* @see [Related classes#Related methods#Related properties]
*/
public static void main(String[] args) throws Exception {
try {
getInstance().setType(2);
GoogleGeocodeJSONBean bean = getInstance().geocodeByAddress("39.90403,116.407526");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}