Prendi l'altitudine per longitudine e latitudine in Android

C'è un modo rapido ed efficiente per get l'altitudine (elevazione) per longitudine e latitudine sulla piattaforma Android?

  • Runtime.exec (): riavvia in Android?
  • Come posso visualizzare un documento pdf in una videata?
  • Parametro Android setOnclicklistener
  • Pubblicare la stessa applicazione con nomi diversi nell'archivio Play
  • Come mascherare correttamente Bitmap con lo shader di LinearGradient?
  • Come aggiornare / aggiornare il tuo Android APK durante la Stagione di stage in Google Play
  • Personalizzazione dell'indicatore TabLayout
  • Immagine su canvas su file JPEG
  • Servizi di sistema non disponibili per Attività prima di onCreate () con Fragment e ListActivity
  • ADB non riconosce il mio Galaxy Nexus - Win7
  • Tabella Android SQLite non creata
  • java.net.socketexception: L'operazione ha interrotto il problema in android?
  • 7 Solutions collect form web for “Prendi l'altitudine per longitudine e latitudine in Android”

    schermo delle applicazioni elevazione http://img509.imageshack.us/img509/4848/elevationc.jpg

    Il mio approccio è quello di utilizzare il servizio Web di query Elevation Quiz di 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; } 

    E esempio di utilizzo (proprio nella class 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; } }); } 

    Puoi anche utilizzare l'API Google Elevation. La documentazione in linea è disponibile presso: https://developers.google.com/maps/documentation/elevation/

    Si prega di notare quanto segue dalla pagina API precedente:

    Limiti di utilizzo: l'utilizzo dell'API di Google Geocoding è sobject a un limite di query di 2.500 domande di geolocalizzazione al giorno. (L'API Premier di Google Maps può eseguire fino a 100.000 richieste al giorno.) Questo limite viene applicato per prevenire abusi e / o repurposing dell'API di Geocoding e questo limite può essere modificato in futuro senza preavviso. Inoltre, imponiamo un limite di tasso di richiesta per prevenire l'abuso del servizio. Se si supera il limite di 24 ore o abuso il servizio, l'API Geocoding può smettere di lavorare temporaneamente. Se continui a superare questo limite, il tuo accesso all'API di Geocoding può essere bloccato. Nota: l'API Geocoding può essere utilizzata solo in combinazione con una mappa di Google; i risultati di geocodifica senza visualizzarli su una mappa sono proibiti. Per informazioni dettagliate sull'utilizzo consentito, consulta le Condizioni di servizio delle API di Maps API.

    Modificare il codice di Max Gontar sopra per l'API di Google fornisce quanto segue, con l'elevazione restituita in piedi:

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

    Se u usa un dispositivo android che dispone di GPS Receiver allora c'è un metodo getAltitude () usando che u può get l'altitudine per elevazione.

    È importnte distinguere l'altitudine dall'altezza.

    L'altitudine è la distanza da un punto fino alla superficie locale; sia che sia terra o acqua. Questa misura viene utilizzata principalmente per l'aviazione.

    L'altitudine può essere ottenuta utilizzando la function Location.getAltitude () .

    L'altitudine è la distanza dalla superficie locale al livello del mare; molto più spesso utilizzati, e spesso erroneamente indicati come altitudine.

    Con quello detto, per gli Stati Uniti, USGS ha fornito una nuova query HTTP POST e GET che possono restituire valori XML o JSON per l'elevazione in piedi o metri. Per l'elevazione a livello mondiale, è ansible utilizzare l' API Google Elevation .

    Le mappe di Google hanno l'altitudine, ciò che ti serve è questo codice

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

    Prova questo che ho costruito: https://algorithmia.com/algorithms/Gaploid/Elevation

    qui è esempio per 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()); 

    L'idea di utilizzare l'API di Elevazione di Google è buona, ma non è ansible analizzare XML utilizzando le funzioni di string. Inoltre, HttpClient è ormai obsoleto, come utilizzando connessioni non sicure.

    Vedere qui per una soluzione migliore: https://github.com/M66B/BackPackTrackII/blob/master/app/src/main/java/eu/faircode/backpacktrack2/GoogleElevationApi.java

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.