Получение высоты касанием места на карте

Я использую следующий код, чтобы получить координаты и высоту, просто щелкнув место на карте... например, если я нажму на улицу Нью-Йорка, приложения вернут мне координаты Нью-Йорка.

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

Я использую этот метод для получения данных о положении при касании в месте

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

К сожалению, кажется, что объект GeoPoint не имеет метода, подобного p.getAltitudeE6() аналогу долготы и широты.

Таким образом, получение широты и долготы нажатием на карту работает нормально, но высота возвращает 0 в каждом месте, где щелкнули.

Есть ли способ решить эту проблему?


person AndreaF    schedule 18.10.2012    source источник


Ответы (1)


Картографические данные не включают информацию о высоте. Вы можете использовать API Google Elevation, чтобы получить широту и долготу, которые у вас есть, и получить высоту. . Это онлайн-поиск, поэтому не обязательно очень отзывчивый.

Добавлен пример кода.

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;
}
}
person Ifor    schedule 22.10.2012
comment
Спасибо за ответ. Не могли бы вы дать мне пример кода об использовании этих API в Android? - person AndreaF; 22.10.2012