如何从Google地图的经纬度坐标获取城市名称?

如果我有一个城镇或地区的经度和纬度坐标,我如何才能在Google地图中获得城市名称?

我尝试了使用经纬度,我得到了国家,但我不知道如何获得城市名称。

Geocoder对象中,可以调用getFromLocation(double, double, int)方法。 它将返回一个包含getLocality()方法的Address对象的列表。

 Geocoder gcd = new Geocoder(context, Locale.getDefault()); List<Address> addresses = gcd.getFromLocation(lat, lng, 1); if (addresses.size() > 0) { System.out.println(addresses.get(0).getLocality()); } else { // do your stuff } 

我正在使用这个代码。 你也可以这样做,获取城市和其他经纬度的细节:

 public class getReverseGeoCoding { private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = ""; public void getAddress() { Address1 = ""; Address2 = ""; City = ""; State = ""; Country = ""; County = ""; PIN = ""; try { JSONObject jsonObj = parser_Json.getJSONfromURL("http://maps.googleapis.com/maps/api/geocode/json?latlng=" + Global.curLatitude + "," + Global.curLongitude + "&sensor=true"); 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) == false || !long_name.equals(null) || long_name.length() > 0 || long_name != "") { 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")) { // Address2 = Address2 + long_name + ", "; 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; } } // JSONArray mtypes = zero2.getJSONArray("types"); // String Type = mtypes.getString(0); // Log.e(Type,long_name); } } } catch (Exception e) { e.printStackTrace(); } } public String getAddress1() { return Address1; } public String getAddress2() { return Address2; } public String getCity() { return City; } public String getState() { return State; } public String getCountry() { return Country; } public String getCounty() { return County; } public String getPIN() { return PIN; } } 

JSON PARSER CLASS

 public class parser_Json { public static JSONObject getJSONfromURL(String url) { // initialize InputStream is = null; String result = ""; JSONObject jObject = null; // http post try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); } catch (Exception e) { Log.e("log_tag", "Error in http connection " + e.toString()); } // convert response to string try { BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { Log.e("log_tag", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObject = new JSONObject(result); } catch (JSONException e) { Log.e("log_tag", "Error parsing data " + e.toString()); } return jObject; } } 

你可以从这个问题得到更多的信息: 使用经度和纬度获取特定的地址

尝试这个

  List<Address> list = geoCoder.getFromLocation(location .getLatitude(), location.getLongitude(), 1); if (list != null & list.size() > 0) { Address address = list.get(0); result = address.getLocality(); return result; 

尝试下面的代码希望使用完整的你:

 CityAsyncTask cst = new CityAsyncTask(HomeScreenUserLocation.this, latitude, longitude); cst.execute(); String lo = null; try { lo = cst.get().toString(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

AsyncTask

 public class CityAsyncTask extends AsyncTask<String, String, String> { Activity act; double latitude; double longitude; public CityAsyncTask(Activity act, double latitude, double longitude) { // TODO Auto-generated constructor stub this.act = act; this.latitude = latitude; this.longitude = longitude; } @Override protected String doInBackground(String... params) { String result = ""; Geocoder geocoder = new Geocoder(act, Locale.getDefault()); try { List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); Log.e("Addresses", "-->" + addresses); result = addresses.get(0).toString(); } catch (IOException e) { e.printStackTrace(); } return result; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); } } 

请参考下面的代码

  Geocoder geocoder = new Geocoder(this, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1); String cityName = addresses.get(0).getAddressLine(0); String stateName = addresses.get(0).getAddressLine(1); String countryName = addresses.get(0).getAddressLine(2); 

尝试这个

 var geocoder; geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(latitude, longitude); geocoder.geocode( {'latLng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[0]) { var add= results[0].formatted_address ; var value=add.split(","); count=value.length; country=value[count-1]; state=value[count-2]; city=value[count-3]; alert("city name is: " + city); } else { alert("address not found"); } } else { alert("Geocoder failed due to: " + status); } } 

);

只要使用这种方法,并通过你的拉特,长。

 public static void getAddress(Context context, double LATITUDE, double LONGITUDE) { //Set Address try { Geocoder geocoder = new Geocoder(context, Locale.getDefault()); List<Address> addresses = geocoder.getFromLocation(LATITUDE, LONGITUDE, 1); if (addresses != null && addresses.size() > 0) { String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String country = addresses.get(0).getCountryName(); String postalCode = addresses.get(0).getPostalCode(); String knownName = addresses.get(0).getFeatureName(); // Only if available else return NULL Log.d(TAG, "getAddress: address" + address); Log.d(TAG, "getAddress: city" + city); Log.d(TAG, "getAddress: state" + state); Log.d(TAG, "getAddress: postalCode" + postalCode); Log.d(TAG, "getAddress: knownName" + knownName); } } catch (IOException e) { e.printStackTrace(); } return; } 
  private class MatchingNearByLocationTask extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); // Showing progress dialog progressDialog = new ProgressDialog(mContext); progressDialog.setMessage("Loading..."); progressDialog.setCancelable(true); progressDialog.show(); } @Override protected Void doInBackground(Void... arg0) { jsonStr = getLocationInfo(Latitude, Longitude).toString(); if (jsonStr != null) { Log.i("location--??", jsonStr); JSONObject jsonObj; try { jsonObj = new JSONObject(jsonStr); 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 (Type.equalsIgnoreCase("administrative_area_level_2")) { // Address2 = Address2 + long_name + ", "; String City = long_name; Log.d(" CityName --->", City + ""); } } } } catch (JSONException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); // Dismiss the progress dialog if (progressDialog.isShowing()) { progressDialog.dismiss(); } } @Override protected void onCancelled() { super.onCancelled(); progressDialog.dismiss(); } } private JSONObject getLocationInfo(double lat, double lng) { HttpGet httpGet = new HttpGet( "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng + "&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) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); } catch (JSONException e) { e.printStackTrace(); } return jsonObject; } 

如果你有一个列表,你可以使用这个:

 Address address = list.get(0); String cityname = address.getLocality(); 
  com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(data); if("OK".equals(jsonObject.getString("status"))){ String formatted_address; JSONArray results = jsonObject.getJSONArray("results"); if(results != null && results.size() > 0){ com.alibaba.fastjson.JSONObject object = results.getJSONObject(0); String addressComponents = object.getString("address_components"); formatted_address = object.getString("formatted_address"); Log.e("amaya","formatted_address="+formatted_address+"--url="+url); if(findCity){ boolean finded = false; JSONArray ac = JSONArray.parseArray(addressComponents); if(ac != null && ac.size() > 0){ for(int i=0;i<ac.size();i++){ com.alibaba.fastjson.JSONObject jo = ac.getJSONObject(i); JSONArray types = jo.getJSONArray("types"); if(types != null && types.size() > 0){ for(int j=0;j<ac.size();j++){ String string = types.getString(i); if("administrative_area_level_1".equals(string)){ finded = true; break; } } } if(finded) break; } } Log.e("amaya","city="+formatted_address); }else{ Log.e("amaya","poiName="+hotspotPoi.getPoi_name()+"--"+hotspotPoi); } if(hotspotPoi != null) hotspotPoi.setPoi_name(formatted_address); EventBus.getDefault().post(new AmayaEvent.GeoEvent(hotspotPoi)); } } 

这是一个parsing谷歌反馈数据的方法。

我有新的方法来解决这个问题。 在这里,我使用谷歌http服务来获取基于经度和纬度的位置的全部信息。 你只需要在url和你的API密钥中传递经纬度(例如:latlng = 21.1497409,79.08747970000002&key =你的API密钥)。 这是我在ExampleService类中获取服务

  getService(url) { return this.http.get(url).map((data: any) => data.json()) } 

这个你可以放在你想要的任何地方,只需要在需要位置数据的组件的服务下面调用

 this._exampleService.getService("https://maps.googleapis.com/maps/api/geocode/json?latlng=21.1497409, 79.08747970000002&key=YOUR API KEY").subscribe(getplaceData => { var placeDataDest: any; placeDataDest = getplaceData; console.log("i got place id yeee " + placeDataDest['results'][0]['place_id']); console.log("i got place details yeee " + placeDataDest['results']); }); 

同样find城市的名字….希望你会发现这个有用的

尝试使用这个api:

URL“: http ://maps.googleapis.com/maps/api/geocode/json?latlng=”+ String.valueOf(yout_lattitude)+“,”+ String.valueOf(your_longitude)

工作代码:

 addresses = geocoder.getFromLocation(mMap.getCameraPosition().target.latitude, mMap.getCameraPosition().target.longitude, 1); // Here 1 represent max location result to returned, by documents it recommended 1 to 5 String locality = addresses.get(0).getLocality(); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String subLocality = addresses.get(0).getSubLocality(); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() //String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String address1 = addresses.get(0).getAddressLine(1); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String address2 = addresses.get(0).getAddressLine(2); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex() String city = addresses.get(0).getLocality(); String state = addresses.get(0).getAdminArea(); String country = addresses.get(0).getCountryName(); // String postalCode = addresses.get(0).getPostalCode(); String knownName = addresses.get(0).getFeatureName();