Android Geocoder obtener nombre corto del área de administración
Cuando se utiliza la API de google maps, para el área de administración le da el nombre largo y el nombre corto, por ejemplo.
{ "long_name": "Victoria", "short_name": "VIC", "types": [ "administrative_area_level_1", "political" ] }
sin embargo, cuando se utiliza geocoder nativo de android, sólo estoy recibiendo el nombre largo (en este caso "Victoria"). ¿Hay una manera de obtener el nombre corto de un área de administración en android, a falta de integrar el google maps geocoding API?
- Geocoder.getFromLocationName devuelve sólo null
- Geocodificación inversa - Servicio No disponible - Reiniciar el dispositivo que no resuelve definitivamente - criticar mi geocodificación inversa manual
- Android Geocoder.getFromLocationName dejó de funcionar con los límites
- ¿Cuál es la mejor manera de interpretar la ubicación del usuario junto a Geocoder
- Límite API de Google Geocoding
- Android geocoder ubicación inversa - forma fiable para obtener la ciudad?
- ¿Por qué Android Geocoder está lanzando una excepción "Servicio no disponible"?
- ¿Cómo puedo encontrar la latitud y la longitud de la dirección?
- ¿Cómo puedo extrapolar más lejos por un camino?
- Extraer dirección de cadena - Equivalente a NSDataDetector en iOS
- Geocoder.getFromLocation () devuelve direcciones en árabe
- Servicio GeoCoder no disponible
- Servicio no disponible - Geocoder Android
Voy a mantener esto corto y simple, he hecho mi implementación de ubicación un poco diferente. Ya que me tomó un par de horas para hacer esto.
Primero hice una lista del mapa para encontrar el nombre del estado entonces lo convierto al código de 2 letras así:
Map<String, String> states = new HashMap<>(); states.put("Alabama","AL"); states.put("Alaska","AK"); states.put("Alberta","AB"); states.put("American Samoa","AS"); states.put("Arizona","AZ"); states.put("Arkansas","AR"); states.put("Armed Forces (AE)","AE"); states.put("Armed Forces Americas","AA"); states.put("Armed Forces Pacific","AP"); states.put("British Columbia","BC"); states.put("California","CA"); states.put("Colorado","CO"); states.put("Connecticut","CT"); states.put("Delaware","DE"); states.put("District Of Columbia","DC"); states.put("Florida","FL"); states.put("Georgia","GA"); states.put("Guam","GU"); states.put("Hawaii","HI"); states.put("Idaho","ID"); states.put("Illinois","IL"); states.put("Indiana","IN"); states.put("Iowa","IA"); states.put("Kansas","KS"); states.put("Kentucky","KY"); states.put("Louisiana","LA"); states.put("Maine","ME"); states.put("Manitoba","MB"); states.put("Maryland","MD"); states.put("Massachusetts","MA"); states.put("Michigan","MI"); states.put("Minnesota","MN"); states.put("Mississippi","MS"); states.put("Missouri","MO"); states.put("Montana","MT"); states.put("Nebraska","NE"); states.put("Nevada","NV"); states.put("New Brunswick","NB"); states.put("New Hampshire","NH"); states.put("New Jersey","NJ"); states.put("New Mexico","NM"); states.put("New York","NY"); states.put("Newfoundland","NF"); states.put("North Carolina","NC"); states.put("North Dakota","ND"); states.put("Northwest Territories","NT"); states.put("Nova Scotia","NS"); states.put("Nunavut","NU"); states.put("Ohio","OH"); states.put("Oklahoma","OK"); states.put("Ontario","ON"); states.put("Oregon","OR"); states.put("Pennsylvania","PA"); states.put("Prince Edward Island","PE"); states.put("Puerto Rico","PR"); states.put("Quebec","PQ"); states.put("Rhode Island","RI"); states.put("Saskatchewan","SK"); states.put("South Carolina","SC"); states.put("South Dakota","SD"); states.put("Tennessee","TN"); states.put("Texas","TX"); states.put("Utah","UT"); states.put("Vermont","VT"); states.put("Virgin Islands","VI"); states.put("Virginia","VA"); states.put("Washington","WA"); states.put("West Virginia","WV"); states.put("Wisconsin","WI"); states.put("Wyoming","WY"); states.put("Yukon Territory","YT");
Luego lo añadí al resultado de String de ubicación después de hacer todo el hocus pocus para obtener la dirección como
Address address = addressList.get(0); String state = states.get(address.getAdminArea()); result = address.getLocality() + ", " + state;
Espero que hayas conseguido esto antes que yo, pero decidí poner esto para cualquier otra persona que lo necesite. Estaba en esta página cuando lo arreglé.
NOTA: La lista de Mapa (no es realmente un Mapa de Ubicación) tiene "estados" de Canadá y algunos otros lugares que usan abreviaturas.
Después de algunas búsquedas, encontré una solución para eso
String url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + latitude + "," + longitude + "&sensor=true";
RequestQueue mVolleyQueue = Volley.newRequestQueue(this); StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { try { Log.i("response ", response); JSONObject jsonObject = new JSONObject(response); JSONArray arrayResult = jsonObject.getJSONArray("results"); JSONArray arrComponent = arrayResult.getJSONObject(0).getJSONArray("address_components"); for (int i = 0; i < arrComponent.length(); i++) { JSONArray arrType = arrComponent.getJSONObject(i).getJSONArray("types"); for (int j = 0; j < arrType.length(); j++) { if (arrType.getString(j).equals("administrative_area_level_1")) { longname = arrComponent.getJSONObject(i).getString("long_name"); shortname = arrComponent.getJSONObject(i).getString("short_name"); Log.i("longname", longname); Log.i("shortname", shortname); } } } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); stringRequest.setShouldCache(false); stringRequest.setTag("Volley"); mVolleyQueue.add(stringRequest);
Codding feliz 🙂