使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务。一般而言数据量不大的情况使用是不限制的。按照Google官方说法是连续90天请求地理编码服务次数超过2000次就会受到限制,因此可以将这些解析好的地址放在Database中,这样可以避免重复请求同一个地址。
JAVA Code:
/*
* System Abbrev :
* system Name :
* Component No :
* Component Name:
* File name :GoogleGeocoderUtil.java
* Author :Peter.Qiu
* Date :2014-9-18
* Description : <description>
*/
/* Updation record 1:
* Updation date : 2014-9-18
* Updator : Peter.Qiu
* Trace No: <Trace No>
* Updation No: <Updation No>
* Updation Content: <List all contents of updation and all methods updated.>
*/
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;
/**
* <Description functions in a word>
* type :1-->address 2-->latlng
* <Detail description>
*
* @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;
}
/** <Description functions in a word>
* 2014-9-18
* <Detail description>
* @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;
}
/** <Description functions in a word>
* 2014-9-18
* <Detail description>
* @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解析地址,解析经纬度实例
相关推荐
下面我们将详细探讨如何在C#环境中利用高德地图API实现经纬度解析成中文地址。 首先,我们需要了解高德地图API的基本概念。高德地图API是一组接口,允许开发者在其应用程序中嵌入地图、搜索、导航等功能。反地理...
本实例主要演示Android调用google map api 的方法,根据地址获取对应经纬度,定义一个HttpClient用于向指定地址发送请求,向指定地址发送get请求,将服务器返回的字符串转换成JSONObject对象,从JSONObject中提取...
JavaScript调用Google Map API V3是一项常见的Web开发任务,它允许开发者在网页中嵌入交互式地图,并根据需求进行自定义。以下是对这个经典教程的详细解析: 1. **目标** - 整个教程旨在教会读者如何利用...
这个源代码压缩包提供了一种实现Google Map API二次开发的实例,对于想要深入理解和应用这一技术的人来说非常有价值。 首先,我们要理解Google Map API的基本概念。它是一个JavaScript库,通过在网页中引入特定的...
地理编码(Geocoding)服务是谷歌地图API的一个强大功能,它能够将地址转换为经纬度坐标,反之亦然。这在搜索地址或计算距离时非常有用。 路线规划(Directions)API则允许你为用户提供详细的导航信息,包括驾车、...
"Android使用Google Map API创建的一个根据经纬度定位的程序二"这篇博客可能详细介绍了如何在Android项目中实现一个基于用户经纬度的定位功能。以下是一些关键知识点: 1. **Google Maps API Key**: 在使用Google ...
Google Maps API为开发者提供了丰富的功能,如地图展示、定位、路线规划、地理编码(地址转换为经纬度)等。 **一、设置API密钥** 在使用Google Maps API之前,你需要在Google Cloud Console中创建一个项目,并启用...
这一过程涉及到了地址解析、API调用、数据解析以及地图渲染等多个技术点,是构建地理位置相关应用的基础。在实际开发中,还需要考虑错误处理、性能优化、用户体验等多个方面,确保应用的稳定性和可用性。
- **创建地图**:使用`google.maps.Map`对象实例化地图,并指定容器元素和地图选项,如中心点、缩放级别等。 - **交互功能**:添加标记、覆盖物、路径,以及事件监听器,使用户能够与地图进行交互。 4. **地理...
上述代码中,我们调用`getAddress`方法尝试将字符串地址解析为坐标,如果成功,`complete`回调函数会被执行,其中`result`参数包含了地理编码的结果,`location`属性则包含了坐标信息。 4. 显示结果:你可以选择将...
// 使用这些坐标进行后续操作,如调用Google Maps API }, function(error) { // 处理错误情况 switch (error.code) { case error.PERMISSION_DENIED: console.log("用户拒绝提供位置信息"); break; case ...
Google Map API 是一款由谷歌公司提供的开发者工具,它允许开发者在自己的网站或应用中集成谷歌地图功能。通过这个API,用户可以创建自定义的地图服务,包括显示地图、定位、路径规划、标注点以及各种交互式功能。...
本文介绍了Google Maps API的相关基础知识,并且通过两个地图应用的实际开发,总结了Google Maps API 中,设置地图属性,添加地标和信息窗口,获取鼠标点击位置的经纬度以及在地图上添加简单图形等几个常用的功能,...
- 使用API提供的方法如`google.maps.Map()`创建地图实例,`google.maps.Marker()`创建标记,`google.maps.Geocoder()`进行地址解析等。 5. **查询功能实现**: - 用户输入查询地址后,可以使用JavaScript的`...
在VC环境下调用Google Map API是一项常见的开发任务,特别是在构建具有地理位置功能的应用程序时。Google Maps API是一个强大的工具,允许开发者将地图、地理编码、路线规划等功能集成到自己的应用程序中。下面将...
要使用JavaScript API展示地图,首先需要在HTML页面中创建一个div元素作为地图容器,然后通过调用`google.maps.Map()`函数来初始化地图。你需要提供地图容器的ID和一些配置选项,如中心点坐标、地图类型、缩放级别...
使用 Map API 开发时,首先需要在 Google 或 51ditu 的开发者平台上注册并获取 API 密钥,这个密钥是调用 API 的身份凭证。接着,开发者可以在自己的应用中引入 API,通过 JavaScript 代码控制地图的行为,如设置...
在Android开发中,获取地理位置是常见的需求之一,而百度API提供了强大的定位服务,使得开发者能够方便地获取到设备的经纬度信息。本文将详细介绍如何在Android应用中利用百度地图API来实现这一功能。 首先,我们...