根据地址查询经纬度
来源:互联网 发布:php编程思想 编辑:程序博客网 时间:2024/05/01 05:22
有时候需要根据具体位置查询该地址对应的经纬度,然后将其保存到数据库中......
不是每次都能获取到经纬度的,有时候会抛出unable to parse response from server 异常。
这是google map的bug,详情请见:
http://code.google.com/p/android/issues/detail?id=8816
当抛出异常后需要换一种方法解决,
直接请求url获得json数据,然后解析:
在getGeoByAddress()方法的try catch中起一个线程执行getLocationInfo()方法:
最后使用的时候要注意线程同步!
实现Android的不同精度的定位(基于网络和GPS)
http://lszdb1983.blog.163.com/blog/static/2042634820126221635756/
android Location 过滤最佳的位置
http://lipeng88213.iteye.com/blog/1936338
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 blocke.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 blocke.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 blocke.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;}@Overrideprotected JSONObject doInBackground(String... params) {JSONObject obj=getLocationInfo(strSearchAddress);return obj;}@Overrideprotected void onCancelled() {super.onCancelled();}@Overrideprotected 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());//经度}}}@Overrideprotected void onPreExecute() {// 预处理}@Overrideprotected void onProgressUpdate(Integer... values) {// 更新进度}}
实现Android的不同精度的定位(基于网络和GPS)
http://lszdb1983.blog.163.com/blog/static/2042634820126221635756/
android Location 过滤最佳的位置
http://lipeng88213.iteye.com/blog/1936338
0 0
- 根据经纬度查询地址
- 根据地址查询经纬度
- 根据地址查询经纬度
- 根据地址查询经纬度
- 根据地址查询经纬度
- 根据地址获取经纬度
- 根据地址获取经纬度
- 根据经纬度获取地址
- 百度地图API之根据经纬度查询地址信息(Android)
- 百度地图API之根据经纬度查询地址信息(Android)
- 根据地址的经纬度查询周围的城市
- 百度地图API之根据经纬度查询地址信息(Android)
- 百度地图5之根据经纬度查询地址信息(Android) .
- 百度地图API之根据经纬度查询地址信息(Android)
- 百度地图API之根据经纬度查询地址信息(Android)
- 百度地图API之根据经纬度查询地址信息(Android)
- 百度地图API之根据经纬度查询地址信息(Android)
- 根据地址查询经纬度IP(百度地图)
- 采用Scroller实现任意布局的上下左右弹性效果
- 华为手机在开发Android调试时logcat不显示输出信息的解决办法
- 异常
- hdu4815(01背包)
- 刮刮卡效果
- 根据地址查询经纬度
- Android下集成FacebookSDk到项目并发表评论
- Android 单选队列 RadioGroup与RadioButton详解
- 在ListView上滑动显示Delete按钮
- Postman使用手册4——API test
- POJ1004
- GreenDao教程(1):配置流程
- Android 让多个Fragment 切换时不重新实例化
- 周报5