Es allí una manera rápida y eficaz para obtener la altitud (elevación) por la longitud y la latitud en la plataforma Android?

7 Comentarios

  1. 39

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

    Mi enfoque es el uso de USGS Elevación de Consulta de Servicio Web:

    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 HelloMapView clase):

    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;
    }
    });
    }
    • Como algo SIG interesado esto me parece muy interesante
    • Para amplificar en esto: la razón que usted necesita para hacer algo como eso (la utilización de un servicio en la red) es doble: uno, el GPS no es muy buena, en la altura, verticales errores son alrededor de 150 pies, a veces, y dos, razonablemente alta resolución mundo del modelo de elevación es enorme, demasiado grande para instalar en el teléfono. Si se hace esto en su propio servidor como parte de una aplicación web o GIS, en su lugar podría descargar el modelo de elevación (de la NASA) y la consulta directamente; es más rápido, pero utiliza una gran cantidad de almacenamiento.
    • Andrew, gracias por los comentarios, es genial!
    • Para aclarar, esta realidad se agarra a la altura y NO la altitud de la lat/long point.
    • El USGS servicio al parecer sólo funciona con NOSOTROS coordenadas.
    • Para aclarar aún más: la altitud se mide mediante un dispositivo, que podría estar volando en un avión, por ejemplo. La elevación se refiere a la tierra y no cambio. Por supuesto, solo la elevación podría ser recuperados de una base de datos.
    • A menos que ustedes son un mucho más alto que yo, o la unidad en los coches con el ridículo de las suspensiones, la altitud y la elevación son prácticamente lo mismo en este contexto.
    • gisdata.usgs.gov webservice no funciona más. Se le redirige a nationalmap.gov sitio. Pero he encontrado ningún resto de servicios haciendo lo mismo.
    • ARLabs, creo que este es el reemplazo del webservice: ned.usgs.gov/epqs por ejemplo. ned.usgs.gov/epqs/…

  2. 23

    También puede utilizar el Google Elevación de la API. La documentación en línea que se encuentra en:
    https://developers.google.com/maps/documentation/elevation/

    Por favor, tenga en cuenta la siguiente de la API anterior página:

    Límites de uso: el Uso de Google
    Geocodificación de la API está sujeto a una consulta
    límite de 2.500 solicitudes de geolocalización
    por día. (El usuario de la API de Google Maps
    Premier puede realizar hasta 100.000
    solicitudes por día.) Este límite es
    forzada para evitar el abuso y/o
    restructuración de la API de Geocodificación, y
    este límite podrá ser modificado en el
    el futuro sin previo aviso. Además,
    aplicamos una solicitud de límite de velocidad para
    evitar el abuso del servicio. Si
    exceder las 24 horas de límite o de otra manera
    el abuso del servicio, la API de Geocodificación
    puede que deje de funcionar temporalmente.
    Si usted continúa para superar este límite,
    su acceso a la API de Geocodificación de mayo
    ser bloqueado. Nota: la API de Geocodificación
    sólo puede ser usado en conjunción con un
    Mapa de Google; resultados de geocodificación sin
    mostrando en un mapa
    prohibido. Para detalles completos sobre
    permite el uso, consultar el API de google Maps
    Términos de Servicio de las Restricciones de Licencia.

    La alteración de Max Gontar del código anterior para la API de Google da el siguiente, con la devolución de elevación 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;
    }
  3. 3

    Es importante diferenciar la altura de elevación.

    La altitud es la distancia desde un punto a hasta el local de la superficie; ya sea en tierra o en agua. Esta medición se utiliza principalmente para la aviación.

    Altitud puede ser obtenida mediante el uso de la Ubicación.getAltitude() función.

    Elevación es la distancia desde el local de la superficie a nivel del mar; mucho más frecuente, y a menudo se refiere equivocadamente como la altitud.

    Con eso dicho, para los estados unidos, USGS ha proporcionado una más reciente HTTP POST y GET consultas que puede devolver XML o JSON valores de elevación en pies o metros. Para todo el mundo de la elevación, se podría utilizar el Google Elevación de la API.

  4. 1

    Si u está utilizando un dispositivo android que tiene GPS Recever entonces no es un método getAltitude() por el uso que u puede conseguir la altitud por la altitud.

    • Que tipo de objeto es que el método asignado. No se puede simplemente dar a la gente la mitad de la torta.
    • Ubicación de objetos, al usar los Servicios de fusionado de ubicación de la API
    • Se puede utilizar en onLocationChanged(Location location){location.getAltitude()} pero siempre devuelve 0.0
  5. 0

    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;
    }
    • Google maps tiene la altitud, lo que usted necesita es poner este código
  6. 0

    Probar esto que me v construcción: https://algorithmia.com/algorithms/Gaploid/Elevation

    aquí es 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());

Dejar respuesta

Please enter your comment!
Please enter your name here