How to get city name from latitude and longitude coordinates in Google Maps?

匿名 (未验证) 提交于 2019-12-03 02:11:02

问题:

How might I obtain the city name in Google Maps if I have latitude and longitude coordinates of a town or area?

I tried using the latitude, longitude and I got country but I don't know how to get city name.

回答1:

From a Geocoder object, you can call the getFromLocation(double, double, int) method. It will return a list of Address objects that have a method getLocality().

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 } 


回答2:

I am using this code. You can also your this for getting city and other details about a Latitude and longitude :

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;     }  } 

You can get more info from this question : Get the particular address using latitude and longitude



回答3:

Try this

  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; 


回答4:

try below code hope use full for you:-

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();         } 

and 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);      } } 


回答5:

Please refer below code

 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); 


回答6:

Try this

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);     } } 

);



回答7:

Just Use this method and pass your lat, long.

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; } 


回答8:

 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; } 


回答9:

You can use this if you have a list:

Address address = list.get(0); String cityname = address.getLocality(); 


回答10:

 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));             }         } 

this is a method to parse google feedback data.



回答11:

I got new way to resolve this issue. Here I have used google http service to get total information of location based on longitude and latitude. You just need to pass latitude and longitude in url and your api key (ex : latlng=21.1497409, 79.08747970000002 & key=YOUR API KEY). Here is my get service in ExampleServiceClass

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

this you can put anywhere you want and just call below service from component where you need location data

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']);         }); 

similarly find city name....hope you will find this useful



回答12:

try using this api :

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



回答13:

Working code:

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(); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!