`

根据地址查询经纬度

阅读更多
有时候需要根据具体位置查询该地址对应的经纬度,然后将其保存到数据库中......

import android.location.Address;
import android.location.Geocoder;

/**
	 * 根据地址查询经纬度
	 * @param strSearchAddress 查询地址
	 * @return
	 */
	private Address getGeoByAddress(String strSearchAddress) {
		Address address=null;
		try {
			if (strSearchAddress != null&&strSearchAddress.length()>0) {
				Geocoder geocoder = new Geocoder(context,Locale.getDefault());
//				Geocoder geocoder = new Geocoder(context,Locale.US);
				List<Address> addresses = geocoder.getFromLocationName(strSearchAddress, 1);
				if (!addresses.isEmpty()) {
					address = addresses.get(0);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return address;
	}


不是每次都能获取到经纬度的,有时候会抛出unable to parse response from server 异常。
这是google map的bug,详情请见:
http://code.google.com/p/android/issues/detail?id=8816

当抛出异常后需要换一种方法解决,
直接请求url获得json数据,然后解析:
public JSONObject getLocationInfo(String address) {

		HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address="+ address+ "&sensor=false");
		HttpClient client = new DefaultHttpClient();
		HttpResponse response;
		StringBuilder stringBuilder = new StringBuilder();

		try {
			response = client.execute(httpGet);
			HttpEntity entity = response.getEntity();
			InputStream stream = entity.getContent();
			int b;
			while ((b = stream.read()) != -1) {
				stringBuilder.append((char) b);
			}
		} catch (ClientProtocolException e) {
			e.printStackTrace();
			return null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}

		JSONObject jsonObject = new JSONObject();
		try {
			jsonObject = new JSONObject(stringBuilder.toString());
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}

		return jsonObject;
	}
	
	public Address getGeoPoint(JSONObject jsonObject) {
		if(jsonObject==null){
			return null;
		}
		Double lng = new Double(0);
		Double lat = new Double(0);
		try {
			lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
				.getJSONObject("geometry").getJSONObject("location")
				.getDouble("lng");

			lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
				.getJSONObject("geometry").getJSONObject("location")
				.getDouble("lat");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		Address address=new Address(Locale.US);
		address.setLatitude(lat);
		address.setLongitude(lng);
		return address;
	}


在getGeoByAddress()方法的try catch中起一个线程执行getLocationInfo()方法:
}catch (Exception e) {
    strSearchAddress=strSearchAddress.replace(" ", "+").replace(",", ",+");
     DownloadTask task = new DownloadTask(strSearchAddress);//注意同步问题,要先返回,后操作。
     task.execute();
}

最后使用的时候要注意线程同步!
.........
Address latLong=getGeoByAddress(detailAddress);
			try {
//休眠2秒,好让请求url时有足够的时间返回经纬度。虽然是个很馊的主意,但至少有效。
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			if(latLong!=null){
				if(latLong.getLatitude()!=0&&latLong.getLongitude()!=0){
					App.store.setLatitude(latLong.getLatitude());//纬度
					App.store.setLongitude(latLong.getLongitude());//经度
				}
			}
.........


class DownloadTask extends AsyncTask<String, Integer, JSONObject> {
		String strSearchAddress;
		DownloadTask(String strSearchAddress) {
			this.strSearchAddress=strSearchAddress;
		}

		@Override
		protected JSONObject doInBackground(String... params) {
			JSONObject obj=getLocationInfo(strSearchAddress);
			return obj;
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
		}

		@Override
		protected void onPostExecute(JSONObject result) {
			Address address=getGeoPoint(result);
			if(address!=null){//赋值
				if(address.getLatitude()!=0&&address.getLongitude()!=0){
					App.store.setLatitude(address.getLatitude());//纬度
					App.store.setLongitude(address.getLongitude());//经度
				}
			}
		}

		@Override
		protected void onPreExecute() {
			// 预处理
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			// 更新进度
		}
	}




实现Android的不同精度的定位(基于网络和GPS) 
http://lszdb1983.blog.163.com/blog/static/2042634820126221635756/

android Location 过滤最佳的位置
http://lipeng88213.iteye.com/blog/1936338
分享到:
评论

相关推荐

    C#根据地址查询经纬度

    用于C#中根据地址信息查询百度经纬度坐标。在已知地址信息的情况下,可根据地址信息查询出经纬度,用于地理信息展示。

    .net 根据地址获取经纬度;根据经纬度获取地址

    在.NET开发中,有时我们需要处理与地理位置相关的任务,如获取某个地址的经纬度或根据经纬度反查对应的地址。这通常涉及到地理编码(Geocoding)服务,它能够将人类可读的地址转换为坐标(经度和纬度),反之亦然。...

    根据IP地址获取经纬度

    标题中的“根据IP地址获取经纬度”是指在Java编程环境下,通过特定的库或API来实现从IP地址解析出地理位置的经纬度坐标。这通常涉及到网络编程和地理信息系统(GIS)的技术。描述中提到的Java工程是实现这个功能的一...

    使用百度地图api实现根据地址查询经纬度

    根据地址查询经纬度&lt;/title&gt;  &lt;meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″&gt;  [removed][removed] &lt;/head&gt; &lt;body style=”background:#CBE1FF”&gt;  &lt;div ...

    获取经纬度、根据地址获取经纬度

    本文将详细讲解如何根据地址获取经纬度,以及相关技术的应用。 首先,我们要理解经纬度的概念。经纬度是地球表面位置的坐标系统,经度(longitude)是从本初子午线开始,向东西两边测量的角度,而纬度(latitude)...

    JS实现根据详细地址获取经纬度功能示例

    本文实例讲述了JS实现根据详细地址获取经纬度功能。分享给大家供大家参考,具体...根据地址查询经纬度&lt;/title&gt; &lt;meta http-equiv=Content-Type content=text/html; charset=utf-8&gt; [removed]&lt;/scrip

    根据IP或经纬度查询城市-离线版.zip

    本资源“根据IP或经纬度查询城市-离线版.zip”提供了一种无需联网即可实现地理位置查询的方法,这对于那些对实时性要求不高但又需要定位功能的场景非常实用。下面将详细探讨这一离线定位技术及其核心组件。 首先,...

    读取Excel批量获取地址经纬度

    本教程将专注于“读取Excel批量获取地址经纬度”的方法,这是一个高效处理大量地理位置信息的实用技巧。我们将主要讨论如何利用Excel作为数据源,结合特定的技术手段来获取腾讯地图上的经纬度坐标,并处理可能出现的...

    根据地址或经纬度进行查询行政编码.cs

    使用高德api可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等) 反地理编码:根据给定的经纬度,获得具体的位置信息

    高德地图根据经纬度获取详细地址

    高德地图根据经纬度获取详细地址(js)。内无key,请自行使用自己的高德地图key

    使用地址查询经纬度(后台、客户端)

    "使用地址查询经纬度(后台、客户端)"这一主题涉及到的技术主要包括地理编码(Geocoding)和百度地图API的运用。下面将详细阐述这两个关键知识点。 1. 地理编码:地理编码是将人类可读的地址(如“北京市海淀区...

    java地址转换经纬度

    在Java开发中,有时我们需要将地址转换为对应的经纬度,这个过程通常被称为地理编码或反向地理编码。这里的需求是处理几百万条地址数据,并且考虑到百度API的收费问题,决定采用自建爬虫的方式进行地址到经纬度的...

    XGeocoding_v2 大批量地址经纬度解析转换工具,各大地图经纬度相互转换_geocoding 大量,geocoding 批量货物经纬度

    地址解析经纬度,商户名解析经纬度,经纬度解析地址,甚至可以将经纬度再次反解析出地址以便对比。大批量自动化。 各大地图经纬度相互转换 从某一地图坐标转换至另一地图坐标。支持经纬度类型:Google Earth, Google...

    经纬度批量查询工具

    例如,物流公司可能需要根据客户地址的经纬度规划最优路线;房地产开发者则可能利用工具来分析地块的位置价值。 9. **安全与隐私**:在使用工具进行批量查询时,应确保遵守相关法律法规,尊重用户隐私,不滥用个人...

    高德地图集成定位和根据地址搜索经纬度进行定位功能

    通过输入地址字符串,我们可以查询到对应的经纬度坐标。在Android中,使用AMapGeoCode类的searchGeoCode方法,传入地址,获取AMapGeoCodeResult对象。在iOS中,使用AMapGeocoding的...

    根据经纬度位置将其按照行政区域分类代码

    百度地图API提供了一系列服务,包括地理编码(将地址转换为经纬度)和反地理编码(将经纬度转换为地址)。其中,我们可以利用反地理编码服务,输入经纬度,获取对应的行政区域信息。百度地图的API通常需要开发者注册...

    批量从谷歌获取地址的经纬度

    本项目专注于批量获取地址的经纬度,使用了Java编程语言,结合谷歌地图API来实现这一功能。下面将详细阐述相关知识点。 1. **Java编程基础**: Java是一种广泛使用的面向对象的编程语言,具有跨平台性、高效性和...

Global site tag (gtag.js) - Google Analytics