google map根据地址获取经纬度

最近在做google map 根据地址获取经纬度的时候使用到Geocoder类

 

  
  
  
  
  1. Java 代码复制内容到剪贴板  
  2.       
  3. /**       
  4.      * 将地址转为经纬度       
  5.      * @param address       
  6.      * @return       
  7.      */        
  8.     public GeoPoint getGeoPointByAddress(String address) {        
  9.         GeoPoint geoPoint = null;        
  10.         if (address != "") {        
  11.             Geocoder myGeocoder = new Geocoder(RegisterAccountActivity.this);        
  12.             List<Address> addressList = null;        
  13.             try {        
  14.                 addressList = myGeocoder.getFromLocationName(address, 1);        
  15.                 if (!addressList.isEmpty()) {        
  16.                     Address tempAddress = addressList.get(0);        
  17.                     double myLatitude = tempAddress.getLatitude() * 1E6;        
  18.                     double myLongitude = tempAddress.getLongitude() * 1E6;        
  19.                     geoPoint = new GeoPoint((int) myLatitude, (int) myLongitude);        
  20.                 }        
  21.             } catch (Exception e) {        
  22.                 e.printStackTrace();        
  23.             }        
  24.         }        
  25.         return geoPoint;        
  26.     }    

这段代码对2.2和2.3系统居然不起作用,报java.io.IOException: Service not Available的错误,换用2.1系统却可以。

估计这是个bug。于是在网上找到另一种解决方法:

 

  
  
  
  
  1. Java 代码复制内容到剪贴板  
  2.       
  3. public static JSONObject getLocationInfo(String address) {        
  4.         
  5.         HttpGet httpGet = new HttpGet(        
  6.                 "http://maps.g...ddress="        
  7.                         + address + "ka&sensor=false");        
  8.         HttpClient client = new DefaultHttpClient();        
  9.         HttpResponse response;        
  10.         StringBuilder stringBuilder = new StringBuilder();        
  11.         
  12.         try {        
  13.             response = client.execute(httpGet);        
  14.             HttpEntity entity = response.getEntity();        
  15.             InputStream stream = entity.getContent();        
  16.             int b;        
  17.             while ((b = stream.read()) != -1) {        
  18.                 stringBuilder.append((char) b);        
  19.             }        
  20.         } catch (ClientProtocolException e) {        
  21.         } catch (IOException e) {        
  22.         }        
  23.         
  24.         JSONObject jsonObject = new JSONObject();        
  25.         try {        
  26.             jsonObject = new JSONObject(stringBuilder.toString());        
  27.         } catch (JSONException e) {        
  28.             e.printStackTrace();        
  29.         }        
  30.         return jsonObject;        
  31.     }        
  32.         
  33.     public static GeoPoint getGeoPoint(JSONObject jsonObject) {        
  34.         Double lon = new Double(0);        
  35.         Double lat = new Double(0);        
  36.         try {        
  37.             lon = ((JSONArray) jsonObject.get("results")).getJSONObject(0)        
  38.                     .getJSONObject("geometry").getJSONObject("location")        
  39.                     .getDouble("lng");        
  40.         
  41.             lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0)        
  42.                     .getJSONObject("geometry").getJSONObject("location")        
  43.                     .getDouble("lat");        
  44.         
  45.         } catch (JSONException e) {        
  46.             e.printStackTrace();        
  47.         }        
  48.         return new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6));        
  49.     }    

这样就解决了问题。

你可能感兴趣的:(Google,map,获取经纬度)