2016-02-03 2 views
1

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

Так, например, если я хочу уменьшить масштаб до уровня воды, например. В моем случае это может быть океан, поэтому я мог бы уменьшить масштаб до высоты 0, или я мог бы перевернуть это на голове и показать океан, но уменьшить масштаб, пока не увижу береговую линию (высота +1)

Да, я могу видеть проблемы с использованием высоты ... например, если на карте показано озеро на высоте 2 000 футов над уровнем моря, но я подумал, что это достаточно интересное упражнение, чтобы поместить его туда и посмотреть, что вернется.

+0

Во-первых, вам может потребоваться немного уточнить ваш вопрос, прежде чем люди смогут дать вам хороший ответ. Вы хотите отрегулировать представление до тех пор, пока не будет видна определенная функция? Пока это не будет показано в деталях? Во-вторых, плитки веб-карт не содержат метаданных о том, какие функции лежат в них, поэтому для вычисления необходимых уровней масштабирования вам потребуются дополнительные данные (векторные данные океанов, скажем). В-третьих, проекции карт (по крайней мере, те, которые используются в веб-картографии) не являются перспективными видами, при этом глазная точка смотрит вниз на поверхность, поэтому нет эквивалентной «высоты» для данного уровня масштабирования. – nathansnider

ответ

1
var marker = L.circle([lat,lon], 1, { 
    color: '#fff', 
    fillColor: '#fff', 
    opacity: 0, 
    fillOpacity: 0, 
    }).addTo(map); 

map.on('move', function() { 
    bounds = map.getBounds(); 

    if (bounds.contains(marker.getLatLng())) { 
     return; 
    }else{ 
     console.log('can not find marker.'); 
    } 
}); 

Это создаст невидимый маркер с пользовательской долготы/широты (так что, если вы хотите его в океане, получить координаты для этой позиции океана и установить широта/долгота параметра в маркер).

Затем, когда карта перемещается (когда сдвиг границ), она проведет проверку, чтобы увидеть, отображается ли ваш маркер в настоящий момент. Если это видно, то никаких проблем, никакого поведения не требуется. Если не? Он может делать все, что вам нужно, вам просто нужно заменить консольный журнал в состоянии else фактическим желаемым поведением.

Вид хакерского способа сделать это, но должен достичь того, что вы ищете.

+0

Нет, действительно, используя этот метод, мне нужно поместить маркер на край земли. Было бы смешно, если бы у меня был, например, флаг «isWater», чтобы я мог проверить, распространяются ли текущие границы над любой точкой на карте, где был кусок воды. – Greg

+0

Не уверен, что вы подразумеваете под «фанки» ... Но вы могли бы просто использовать несколько маркеров. Это решение масштабируется до такого количества маркеров, которое вы можете создать. Если вы хотите, чтобы иметь возможность проверить, есть ли вода конкретно, тогда вам нужно будет собрать дополнительные геологические данные для отображения переменной воды, которую можно проверить. ex: 'if (bounds.contain()) {}' –