Intereting Posts
Разница между cocos2d-android и cocos2d-android-1 Android Drawable Shape Ring на более низком уровне API Упаковка "скрытых" файлов активов Okhttp игнорирует настройку Диспетчера при использовании с Retrofit RxJavaCallAdapterFactory Ошибка: выполнение выполнено для задачи: ExecException: Process 'command' C: \ Program Files \ Java \ jdk1.7.0_79 \ bin \ java.exe '' завершен с ненулевым значением выхода 2 Android Offline Speech Recognition показывает только один результат? Android QuickContactBadge с буквами, такими как Android Lollipop Возможно ли поддерживать функцию setScrollY () (ScrollView API 14), подобную функции для более старых уровней API? Приложение Android не запускается с Eclipse Как остановить обнаружение peer в WifiDirect Android Как конвертировать исходные данные PCM в mp3-файл? AlertDialog с пользовательским представлением: изменить размер, чтобы обернуть содержимое представления Предварительный просмотр Honeycomb – не удается установить мое приложение на эмулятор под Eclipse Обнаруживать только скриншот с FileObserver Android Как отправить намерение с помощью телеграммы

Получите радиус видимой карты в Android

Есть ли какой-либо возможный способ нахождения радиуса видимой карты из средней точки?

Google Map

Я хочу получить близкие места против центральной точки карты от API, и для этого API требуется lat, lng и radius. Я могу получить lat и lng из центральной точки, но не смог найти способ получить радиус.

благодаря

Для Android API Google Maps вы можете получить границы …

С помощью ссылки на карту вы получите Projection методом getProjection () . А также,

Проекция используется для перевода между местоположением экрана и географическими координатами.

Поэтому из проекции мы можем использовать getVisibleRegion () и получить VisibleRegion карты, которая содержит LatLngBounds , который является классом, который содержит 2 переменных LatLng , один для северо-восточного угла границы и один для юго-запада угол.

Поэтому код должен выглядеть примерно так:

  googleMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition position) { LatLngBounds bounds = googleMap.getProjection().getVisibleRegion().latLngBounds; LatLng northeast = bounds.northeast; LatLng southwest = bounds.southwest; Context context = getApplicationContext(); CharSequence text = "ne:"+northeast+" sw:"+southwest; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show(); } }); 

= – = – = – = – = – = редактировать:

Возможно, я был слишком наивен, учитывая, что только NE и SW могут решить эту проблему, но только в специальном случае, когда пользователь не поворачивал карту или не наклонялся для 3D-карты.

Таким образом, вместо этого вы можете просто захватить VisibleRegion , который предоставил 4 переменные, farRight, farLeft, nearRight, nearLeft, каждый из которых представляет 4 соединения этой области.

Затем мы можем вычислить ширину и высоту области для этих 4 точек и выбрать меньшую (ну, иногда ширина может быть больше высоты, я думаю).

И для расчета мы можем просто использовать функцию Location.distanceBetween(x1,y1,x2,y2,result)

Что делает код выглядит следующим образом:

  VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion(); LatLng farRight = visibleRegion.farRight; LatLng farLeft = visibleRegion.farLeft; LatLng nearRight = visibleRegion.nearRight; LatLng nearLeft = visibleRegion.nearLeft; float[] distanceWidth = new float[2]; Location.distanceBetween( (farRight.latitude+nearRight.latitude)/2, (farRight.longitude+nearRight.longitude)/2, (farLeft.latitude+nearLeft.latitude)/2, (farLeft.longitude+nearLeft.longitude)/2, distanceWidth ); float[] distanceHeight = new float[2]; Location.distanceBetween( (farRight.latitude+nearRight.latitude)/2, (farRight.longitude+nearRight.longitude)/2, (farLeft.latitude+nearLeft.latitude)/2, (farLeft.longitude+nearLeft.longitude)/2, distanceHeight ); float distance; if (distanceWidth[0]>distanceHeight[0]){ distance = distanceWidth[0]; } else { distance = distanceHeight[0]; } 

Большое вам спасибо за ваш ответ @kaho , это очень помогло мне (даже вы рассчитали расстояниеWidth и distanceHeight таким же образом).

Тем не менее, я просто хочу немного уточнить и улучшить. (Пожалуйста, расслабьтесь, он может легко повредить вам: 3).

Потому как:

  • FarLeft LatLng, который определяет дальний левый угол камеры.

  • FarRight LatLng, который определяет крайний правый угол камеры.

  • NearLeft LatLng объект, который определяет нижний левый угол камеры.

  • NearRight LatLng, который определяет нижний правый угол камеры.

Есть несколько полей VisibleRegion, которые содержат одинаковые значения:

  • FarLeft.longitude == nearLeft.longitude
  • FarRight.longitude == nearRight.longitude
  • FarLeft.latitude == farRight.latitude
  • NearLeft.latitude == nearRight.latitude

Итак, мы можем уменьшить некоторые вычисления:

 private double calculateVisibleRadius(VisibleRegion visibleRegion) { float[] distanceWidth = new float[1]; float[] distanceHeight = new float[1]; LatLng farRight = visibleRegion.farRight; LatLng farLeft = visibleRegion.farLeft; LatLng nearRight = visibleRegion.nearRight; LatLng nearLeft = visibleRegion.nearLeft; //calculate the distance width (left <-> right of map on screen) Location.distanceBetween( (farLeft.latitude + nearLeft.latitude) / 2, farLeft.longitude, (farRight.latitude + nearRight.latitude) / 2, farRight.longitude, distanceWidth ); //calculate the distance height (top <-> bottom of map on screen) Location.distanceBetween( farRight.latitude, (farRight.longitude + farLeft.longitude) / 2, nearRight.latitude, (nearRight.longitude + nearLeft.longitude) / 2, distanceHeight ); //visible radius is (smaller distance) / 2: return (distanceWidth[0] < distanceHeight[0]) ? distanceWidth[0] / 2 : distanceHeight[0] / 2; } 

Затем:

 VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion(); double visibleRadius = calculateVisibleRadius(visibleRegion); 

Введите описание изображения здесь

Edit: Следующий ответ для Google Maps JavaScript API v3
= – = – = – = – = – = – =

Я думаю, что ответ будет: Да, вы можете.

Согласно документации , вы можете рассчитать расстояние между двумя точками: computeDistanceBetween(LatLngFrom, LatLngTo)

Также вы можете получить границу карты с помощью getBounds() , который находится в классе google.maps.Map .