使用地理编码器和Android Google Maps API v2获取经度和纬度

【使用地理编码器和Android Google Maps API v2获取经度和纬度】少年乘勇气,百战过乌孙。这篇文章主要讲述使用地理编码器和Android Google Maps API v2获取经度和纬度相关的知识,希望能为你提供帮助。
我正在使用Google Maps API v2 for android并且正常运行。但是,我正在尝试使用地理编码器来获取地址的经度和纬度,但没有成功。
它改变了从v2做到这一点的方式?
我正在使用传统的代码

Geocoder gc = new Geocoder(context); //... List< Address> list = gc.getFromLocationName("1600 Amphitheatre Parkway, Mountain View, CA", 1); Address address = list.get(0); double lat = address.getLatitude(); double lng = address.getLongitude(); //...

始终返回强制关闭,Log不解决任何问题。当使用try / catch块时,打开地图但总是使用相同的位置使用Internet权限,我已经包含在项目中COARSE_LOCATION我已经使用了位于此处和其他站点的各种代码,但没有成功。
先感谢您。
答案使用此示例url尝试此解决方案:
http://maps.google.com/maps/api/geocode/json?address=mumbai& sensor=false
它使用jsonlat/lngaddress格式返回数据。
private class DataLongOperationAsynchTask extends AsyncTask< String, Void, String[]> { ProgressDialog dialog = new ProgressDialog(MainActivity.this); @Override protected void onPreExecute() { super.onPreExecute(); dialog.setMessage("Please wait..."); dialog.setCanceledOnTouchOutside(false); dialog.show(); }@Override protected String[] doInBackground(String... params) { String response; try { response = getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address=mumbai& sensor=false"); Log.d("response",""+response); return new String[]{response}; } catch (Exception e) { return new String[]{"error"}; } }@Override protected void onPostExecute(String... result) { try { JSONObject jsonObject = new JSONObject(result[0]); double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); Log.d("latitude", "" + lat); Log.d("longitude", "" + lng); } catch (JSONException e) { e.printStackTrace(); } if (dialog.isShowing()) { dialog.dismiss(); } } }public String getLatLongByURL(String requestURL) { URL url; String response = ""; try { url = new URL(requestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(15000); conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); int responseCode = conn.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { String line; BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((line = br.readLine()) != null) { response += line; } } else { response = ""; }} catch (Exception e) { e.printStackTrace(); } return response; }

希望这会对你有所帮助。
另一答案试试吧。
private void getLatLongFromAddress(String address) { double lat= 0.0, lng= 0.0; Geocoder geoCoder = new Geocoder(this, Locale.getDefault()); try { List< Address> addresses = geoCoder.getFromLocationName(address , 1); if (addresses.size() > 0) { GeoPoint p = new GeoPoint( (int) (addresses.get(0).getLatitude() * 1E6), (int) (addresses.get(0).getLongitude() * 1E6)); lat=p.getLatitudeE6()/1E6; lng=p.getLongitudeE6()/1E6; Log.d("Latitude", ""+lat); Log.d("Longitude", ""+lng); } } catch(Exception e) { e.printStackTrace(); } }

另一答案由于HttpClient已被折旧,您可以使用Asynctask尝试以下代码(另请注意,我们需要将地址编码为URL):
public class GeoCoding extends AsyncTask< Void, Void, Void> { private String address; private static final String TAG = GeoCoding.class.getSimpleName(); JSONObject jsonObj; String URL; private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = "", Area=""; privatedouble latitude, longitude; HttpURLConnection connection; BufferedReader br; StringBuilder sb ; public GeoCoding(String address){ this.address = address; }public String getArea(){ return Area; }public void getAddress() { Address1 = ""; Address2 = ""; City = ""; State = ""; Country = ""; County = ""; PIN = ""; Area =""; try {String Status = jsonObj.getString("status"); if (Status.equalsIgnoreCase("OK")) { JSONArray Results = jsonObj.getJSONArray("results"); JSONObject zero = Results.getJSONObject(0); JSONArray address_components = zero.getJSONArray("address_components"); for (int i = 0; i < address_components.length(); i++) { JSONObject zero2 = address_components.getJSONObject(i); String long_name = zero2.getString("long_name"); JSONArray mtypes = zero2.getJSONArray("types"); String Type = mtypes.getString(0); if (! TextUtils.isEmpty(long_name) || !long_name.equals(null) || long_name.length() > 0 || !long_name.equals("")) { if (Type.equalsIgnoreCase("street_number")) { Address1 = long_name + " "; } else if (Type.equalsIgnoreCase("route")) { Address1 = Address1 + long_name; } else if (Type.equalsIgnoreCase("sublocality")) { Address2 = long_name; } else if (Type.equalsIgnoreCase("locality")) { City = long_name; } else if (Type.equalsIgnoreCase("administrative_area_level_2")) { County = long_name; } else if (Type.equalsIgnoreCase("administrative_area_level_1")) { State = long_name; } else if (Type.equalsIgnoreCase("country")) { Country = long_name; } else if (Type.equalsIgnoreCase("postal_code")) { PIN = long_name; }else if( Type.equalsIgnoreCase("neighborhood")){ Area = long_name; } } } }} catch (Exception e) { e.printStackTrace(); }}public void getGeoPoint(){ try{ longitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lng"); latitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0) .getJSONObject("geometry").getJSONObject("location") .getDouble("lat"); }catch (Exception e){ e.printStackTrace(); }}@Override protected Void doInBackground(Void... params){ try { StringBuilder urlStringBuilder = new StringBuilder("http://maps.google.com/maps/api/geocode/json"); urlStringBuilder.append("?address=" + URLEncoder.encode(address, "utf8")); urlStringBuilder.append("& sensor=false"); URL = urlStringBuilder.toString(); Log.d(TAG, "URL: " + URL); URL url = new URL(URL); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoInput(true); connection.connect(); br = new BufferedReader(new InputStreamReader(connection.getInputStream())); sb

    推荐阅读