2012-04-06 7 views
0

Я проверяю следующее: введите код var point = new g.LatLng (parseFloat (lat), parseFloat (lng)); var bounds = map.getBounds(); , если (bounds.contains (точка)) { точка находится в окне }Проверьте, находится ли точка в окне просмотра

Но когда я изменить уровень масштабирования, thefore координаты окна просмотра, то «невидимая» точка не детектируются как " видимый ", я имею в виду в окне просмотра. Точка не маркер!

ответ

0

Я написал хак, который может работать в вашем сценарии. Насколько я проверял, он работает, когда многого не повторяют. Я знаю, что этот хак ненадежен, если мир отображается дважды и более. Поэтому, если вы можете установить minZoom карты, вы предотвратите такие случаи.

Идея состоит в том, чтобы разделить карту в левой и правой половине и проверить, находится ли маркер в любой половине.

Вот хак, используйте осторожно

http://jsfiddle.net/QeR2D/3/

+0

Это нормально, если точка находится на карте (то есть один маркер), но и в других случаях? – Bertaud

+0

Извините, я не понимаю, что вы подразумеваете под «другими случаями». Вы имеете в виду более одного маркера? –

+0

Нет, только для точки, не установленной на карте. Но я проверил ваш код, и все в порядке. Очень хороший пример. Спасибо. – Bertaud

0

Если у вас есть больше, чем вся окружность Земли в вашем окне просмотра, все может пойти не так.

Левый край может быть далее на восток, чем правый край. map.getBounds() получает неверный результат в этом случае.

Левый край может быть к западу от правого края, но площадь, определяемая долготами обоих, может не включать в себя интересную точку.

Вот image of a map Я разработал для другого ответа, который демонстрирует это. Левый край имеет значение 83 ° E и правый край при 162 ° E. Маркеры имеют значение 54 ° W и 8 ° W, и ни одна из них не находится в пределах map.getBounds() —, они не лежат между 83 ° E и 162 ° E —, хотя они, очевидно, находятся на карте.

Я не знаю ни одного метода в API, который позволяет это обслуживать.

Смежные вопросы