Getting altitude tapping on a place of the map

1.8k views Asked by At

I use the follow code to get coordinates and altitude simple clicking in a place on the map... for example if I click on a New York Street the apps returns to me the New York coordinates

public void onLocationChanged(Location location) {
    double lat = (double) (location.getLatitude());
    double lng = (double) (location.getLongitude());
    double alt = (double) (location.getAltitude());
}

I use this method to retrieve the data about position on touch in a place

@Override
public boolean onTap(GeoPoint p, MapView map) {     

    List<Overlay> overlays = map.getOverlays();

    Message message = new Message();

    Bundle data = new Bundle();

    data.putInt("latitude", p.getLatitudeE6());

    data.putInt("longitude", p.getLongitudeE6());

    message.setData(data);

    handler.sendMessage(message);       

    return super.onTap(p, map);
}   

Unfortunately seems that GeoPoint object has no method like p.getAltitudeE6() analogue to longitude and latitude.

So, getting latitude and longitude tapping the map works fine, but altitude returns 0 in every clicked place.

Is there a way to solve this problem?

1

There are 1 answers

1
Ifor On BEST ANSWER

The mapping data dose not include altitude information. You can use the Google Elevation API to take the latitude and longitude you have and get elevation. It's an online lookup so not necessarily very responsive.

Added code example.

public double getAltitudeFromNet(double def, Location loc) {
Log.v(TAG, "Looking up net altitude");
double result = -100000.0;
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 5000);

HttpClient httpClient = new DefaultHttpClient(httpParameters);
HttpContext localContext = new BasicHttpContext();
String url = "http://maps.googleapis.com/maps/api/elevation/" + "xml?locations="
    + String.valueOf(loc.getLatitude()) + "," + String.valueOf(loc.getLongitude()) + "&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));

    }
    instream.close();
  }
} catch (ClientProtocolException e) {
  Log.w(TAG, "Looking up net altitude ClientProtocolException", e);
} catch (IOException e) {
  Log.w(TAG, "Looking up net altitude IOException", e);
}

Log.i(TAG, "got net altitude " + (int) result);
if (result > -1000) {
  return result;
} else {
  return def;
}
}