Java 调用Google Map Api解析地址,解析经纬度实例
使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务。一般而言数据量不大的情况使用是不限制的。按照Google官方说法是连续90天请求地理编码服务次数超过2000次就会受到限制,因此可以将这些解析好的地址放在Database中,这样可以避免重复请求同一个地址。
JAVA Code:
完整的Demo:Java 调用Google Map Api解析地址,解析经纬度实例
JAVA Code:
/* * 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(); } } }
完整的Demo:Java 调用Google Map Api解析地址,解析经纬度实例