Вариант #1
OpenLayers
Для этого предусмотрены пары атрибутов minResolution/maxResolution и minScale/maxScale. Первый используется при работе с разрешениями (resolutions), второй - масштабами (scales). Про их соотношение см. ниже.
Scales
Для начала рассмотрим работу с масштабами.
Код: Выделить всё
var t1_wms = new OpenLayers.Layer.WMS(
"Tatarstan bounds",
"http://localhost:8080/geoserver/wms",
{layers: 'Tatarstan:tatar_region'},
{isBaseLayer: false, maxScale: 200000, minScale: 2000000}
);
Атрибуты можно использовать отдельно, только верхнюю или только нижнюю границу.
Если будете ориентироваться на показания контроллера OpenLayers.Control.Scale, то можете столкнуться с несоответствием. Контроллер показывает масштаб при котором слой должен быть отключен, а он тем не менее включён. Дело в том, что этот контроллер рассчитан на географические СК (epsg:4326 и иже с ним). Масштаб вычисляется через длину дуги на элипсе.
Следовательно, заданные min- и maxScale работают правильно. А контроллер для проекций использовать нельзя (или переопределить функцию расчетов в нем).
Resolutions
Термин "разрешения" употребляется не в значении "кому что можно и нельзя", а как понятие аналогичное разрешению принтера или сканера (300-600 dpi).
Сперва потребуется пересчитать масштаб в разрешение. Формула для метров имеет вид (подробнее):
Код: Выделить всё
resolution = scale / 39.3701 / 72
Код: Выделить всё
resolution = 2000000 / 39.3701 / 72 = 705.5551745558
Границы разрешений и масштабов имеют обратные названия. Для интервала 1:500-1:1М аналогии будут:
- maxScale ~ minResolution (1:500)
- minScale ~ maxResolution (1:1000000)
Код: Выделить всё
var t1_wms = new OpenLayers.Layer.WMS(
"Tatarstan bounds",
"http://localhost:8080/geoserver/wms",
{layers: 'Tatarstan:tatar_region'},
{isBaseLayer: false, visibility: false, minResolution: 705.5551745558}
);