ubicacion studio obtener longitud latitud gratis geolocalizacion ejemplo crear coordenadas app activar android geolocation gis android-mapview

longitud - obtener ubicacion android studio 2017



Obtén altitud por longitud y latitud en Android (7)

¿Existe una manera rápida y eficiente de obtener altitud (elevación) por longitud y latitud en la plataforma Android?


Es importante diferenciar primero la altitud de la elevación.

La altitud es la distancia desde un punto hacia abajo a la superficie local; ya sea tierra o agua Esta medida se usa principalmente para la aviación.

La altitud se puede obtener utilizando la función Location.getAltitude() .

La elevación es la distancia desde la superficie local hasta el nivel del mar; mucho más a menudo utilizado, y a menudo erróneamente referido como altitud.

Dicho esto, en el caso de EE. UU., USGS ha proporcionado nuevas consultas HTTP POST y GET que pueden devolver valores XML o JSON para la elevación en pies o metros. Para la elevación en todo el mundo, puede usar la API Google Elevation .



Los mapas de Google tienen la altitud, lo que necesitas es este código

altitude=""; var init = function() { var elevator = new google.maps.ElevationService; map.on(''mousemove'', function(event) { getLocationElevation(event.latlng, elevator); document.getElementsByClassName("altitudeClass")[0].innerHTML = "Altitude: "+ getAltitude(); //console.debug(getAltitude()); }); } var getLocationElevation = function (location, elevator){ // Initiate the location request elevator.getElevationForLocations({ ''locations'': [location] }, function(results, status) { if (status === google.maps.ElevationStatus.OK) { // Retrieve the first result if (results[0]) { // Open the infowindow indicating the elevation at the clicked position. setAltitude(parseFloat(results[0].elevation).toFixed(2)); } else { setAltitude(''No results found''); } } else { setAltitude(''Elevation service failed due to: '' + status); } }); } function setAltitude(a){ altitude = a; } function getAltitude(){ return altitude; }


Prueba este que he creado: https://algorithmia.com/algorithms/Gaploid/Elevation

aquí hay un ejemplo para Java:

import com.algorithmia.*; import com.algorithmia.algo.*; String input = "{/"lat/": /"50.2111/", /"lon/": /"18.1233/"}"; AlgorithmiaClient client = Algorithmia.client("YOUR_API_KEY"); Algorithm algo = client.algo("algo://Gaploid/Elevation/0.3.0"); AlgoResponse result = algo.pipeJson(input); System.out.println(result.asJson());


Si estás usando un dispositivo Android que tiene receptor GPS, entonces hay un método getAltitude () usando que puedes obtener la altitud por elevación.


También puedes usar Google Elevation API. La documentación en línea se encuentra en: https://developers.google.com/maps/documentation/elevation/

Tenga en cuenta lo siguiente de la página API anterior:

Límites de uso: el uso de la API de geocodificación de Google está sujeto a un límite de consultas de 2.500 solicitudes de geolocalización por día. (El usuario de Google Maps API Premier puede realizar hasta 100.000 solicitudes por día). Este límite se aplica para evitar el uso indebido y / o la reasignación de la API de codificación geográfica, y este límite puede modificarse en el futuro sin previo aviso. Además, aplicamos un límite de tasa de solicitud para evitar el abuso del servicio. Si excede el límite de 24 horas o si se abusa del servicio, la API de codificación geográfica puede dejar de funcionar temporalmente. Si continúa excediendo este límite, su acceso a la API de geocodificación puede estar bloqueado. Nota: la API de geocodificación solo se puede usar junto con un mapa de Google; Se prohíbe la geocodificación de resultados sin mostrarlos en un mapa. Para obtener detalles completos sobre el uso permitido, consulte las Restricciones de licencia de los Términos de servicio de la API de Maps.

Alterar código de anterior para la API de Google ofrece lo siguiente, con la elevación devuelta en pies:

private double getElevationFromGoogleMaps(double longitude, double latitude) { double result = Double.NaN; HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); String url = "http://maps.googleapis.com/maps/api/elevation/" + "xml?locations=" + String.valueOf(latitude) + "," + String.valueOf(longitude) + "&sensor=true"; HttpGet httpGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(httpGet, localContext); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); int r = -1; StringBuffer respStr = new StringBuffer(); while ((r = instream.read()) != -1) respStr.append((char) r); String tagOpen = "<elevation>"; String tagClose = "</elevation>"; if (respStr.indexOf(tagOpen) != -1) { int start = respStr.indexOf(tagOpen) + tagOpen.length(); int end = respStr.indexOf(tagClose); String value = respStr.substring(start, end); result = (double)(Double.parseDouble(value)*3.2808399); // convert from meters to feet } instream.close(); } } catch (ClientProtocolException e) {} catch (IOException e) {} return result; }


pantalla de la aplicación de elevación http://img509.imageshack.us/img509/4848/elevationc.jpg

Mi enfoque es usar el Servicio web de consulta de elevación de USGS :

private double getAltitude(Double longitude, Double latitude) { double result = Double.NaN; HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); String url = "http://gisdata.usgs.gov/" + "xmlwebservices2/elevation_service.asmx/" + "getElevation?X_Value=" + String.valueOf(longitude) + "&Y_Value=" + String.valueOf(latitude) + "&Elevation_Units=METERS&Source_Layer=-1&Elevation_Only=true"; HttpGet httpGet = new HttpGet(url); try { HttpResponse response = httpClient.execute(httpGet, localContext); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); int r = -1; StringBuffer respStr = new StringBuffer(); while ((r = instream.read()) != -1) respStr.append((char) r); String tagOpen = "<double>"; String tagClose = "</double>"; if (respStr.indexOf(tagOpen) != -1) { int start = respStr.indexOf(tagOpen) + tagOpen.length(); int end = respStr.indexOf(tagClose); String value = respStr.substring(start, end); result = Double.parseDouble(value); } instream.close(); } } catch (ClientProtocolException e) {} catch (IOException e) {} return result; }

Y ejemplo de uso (a la derecha en la clase HelloMapView ):

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); linearLayout = (LinearLayout) findViewById(R.id.zoomview); mapView = (MapView) findViewById(R.id.mapview); mZoom = (ZoomControls) mapView.getZoomControls(); linearLayout.addView(mZoom); mapView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == 1) { final GeoPoint p = mapView.getProjection().fromPixels( (int) event.getX(), (int) event.getY()); final StringBuilder msg = new StringBuilder(); new Thread(new Runnable() { public void run() { final double lon = p.getLongitudeE6() / 1E6; final double lat = p.getLatitudeE6() / 1E6; final double alt = getAltitude(lon, lat); msg.append("Lon: "); msg.append(lon); msg.append(" Lat: "); msg.append(lat); msg.append(" Alt: "); msg.append(alt); } }).run(); Toast.makeText(getBaseContext(), msg, Toast.LENGTH_SHORT) .show(); } return false; } }); }