как добраться, реальные границы с Google отображается, когда полностью уменьшено

У меня есть карта, которая показывает точки местоположения на основе gbounds карты. Например, любое время, карта перемещается/масштабируется, я нахожу границы и запрос для местоположений, которые находятся в пределах тех границ. К сожалению, я не могу отобразить все свои местоположения, когда полностью уменьшено. Так как причина, gmaps сообщает о минуте / макс. долго как, независимо от того, что в краю карты, но если Вы уменьшаете масштаб достаточно, можно получить продольный диапазон, который исключает видимые местоположения.

Например, если Вы масштабируете свою карту так, чтобы Вы видели NorthAmerica дважды на крайне левом и крайнем правом. Минуты / макс. длинный вокруг:-36.5625 к 170,15625. Но это почти полностью исключает NorthAmerica, который находится в-180-60 диапазонам. Очевидно, это является надоедливым, поскольку можно на самом деле видеть континент NorthAmerica (дважды), но когда я запрашиваю мой для местоположений в диапазоне от карт Google, NorthAmerica не возвращается.

Мой код для нахождения минуты / макс. длинный:

bounds = gmap.getBounds();
min_lat = bounds.getSouthWest().lat()
max_lat = bounds.getNorthEast().lat()

Кто-либо встретился с этим, и кто-либо может предложить обходное решение? Первое, что пришло на ум я могу только вещь взлома: проверять уровень масштабирования и hardcode минимальный лат / макс. лат к-180/180 при необходимости, который определенно недопустим.

6
задан brad 1 March 2010 в 22:42
поделиться

2 ответа

Это не самое элегантное решение, но я его протестировал, и оно работает. Убедитесь, что текущие границы содержат границы полной карты. Google на самом деле не включает северный и южный полюсы, поэтому мне пришлось настроить его так, чтобы он шел почти полностью на север и юг.

bounds = gmap.getBounds();
var fullEarth = new GLatLngBounds(new GLatLng(-85, 180), new GLatLng(85, -180)))
var isFull = bounds.containsBounds(fullEarth);
min_lat = isFull ? -90 : bounds.getSouthWest().lat()
max_lat = isFull ? 90 : bounds.getNorthEast().lat()

min_lng = isFull ? 180 : bounds.getSouthWest().lng()
max_lng = isFull ? -180 : bounds.getNorthEast().lng()
0
ответ дан 18 December 2019 в 04:52
поделиться

Даже представить себе не могу, как эта ОГРОМНАЯ ошибка все еще существует !!! Функции isFullLng и toSpan содержат ошибки, и вы не можете полагаться на них.
Мой способ обхода этой ошибки:

var zoom = map.getZoom();
var bounds = map.getBounds();    
var span = bounds.toSpan();
var isFull = span.lng() > 277 || zoom < 2;
0
ответ дан 18 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: