Получение высотного постукивания по месту на карте
Я использую следующий код, чтобы получить координаты и высоту, просто нажимая на место на карте... например, если я нажимаю на улице Нью-Йорка, приложения возвращают мне координаты Нью-Йорка.
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 в каждом выбранном месте.
Есть ли способ решить эту проблему?
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;
}
}