OpenLayers: zoom для отображения всех объектов на карте

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
Star-IK
Новоприбывший
Сообщения: 12
Зарегистрирован: 12 май 2012, 16:03
Репутация: 0

OpenLayers: zoom для отображения всех объектов на карте

Сообщение Star-IK » 29 май 2012, 15:49

Есть несколько объектов (точек с координатами ) на карте.
Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?

daler
Интересующийся
Сообщения: 39
Зарегистрирован: 14 ноя 2011, 17:15
Репутация: 0
Контактная информация:

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение daler » 29 май 2012, 16:23

Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.

или же в openlayers прописать для каждого zoom какие слои подключать

Аватара пользователя
Star-IK
Новоприбывший
Сообщения: 12
Зарегистрирован: 12 май 2012, 16:03
Репутация: 0

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Star-IK » 29 май 2012, 20:17

daler писал(а):Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.

или же в openlayers прописать для каждого zoom какие слои подключать
Уважаемый Daler!
Я четко указал: OpenLayers: zoom для отображения всех объектов на карте.
Все объекты (точки с координатами) в одном слое, так что "прописать для каждого zoom какие слои подключать" не имеет смысла. Необходимо, что бы квадрат в котором расположены все объекты был виден при определенном zoom.

Если кто-нибудь знает, как это сделать, подскажите.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Denis Rykov » 29 май 2012, 20:39

Честно говоря я не совсем понял вопрос, мб OpenLayers.Map.getZoomForExtent или OpenLayers.Map.zoomToMaxExtent то что вы ищите? Слой то у вас какой, векторный или растровый?
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Star-IK
Новоприбывший
Сообщения: 12
Зарегистрирован: 12 май 2012, 16:03
Репутация: 0

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Star-IK » 29 май 2012, 22:26

Denis Rykov писал(а):Честно говоря я не совсем понял вопрос, мб OpenLayers.Map.getZoomForExtent или OpenLayers.Map.zoomToMaxExtent то что вы ищите? Слой то у вас какой, векторный или растровый?
Denis, хочу уточнить вопрос.
В статье
, пункт
4. Получение географического охвата данных
Приведен пример для API MAP.Google

Код: Выделить всё

var points2 = points.slice();
points2.sort(function(p1, p2) {
return p1.lng() - p2.lng();
});
var west = points2[0].x;
var east = points2[numpoints].x;
points2.sort(function(p1, p2) {
return p1.lat() - p2.lat();
});
var north = points2[numpoints].y;
var south = points2[0].y;
var sw = new GLatLng(south,west);
var ne = new GLatLng(north,east);
var bounds = new GLatLngBounds(sw, ne);
var centerpoint = new GLatLng((north + south)/2, (east + west)/2);
var zoomlevel = map.getBoundsZoomLevel(bounds);
Определяется квадрат для охвата всех точек:
var bounds = new GLatLngBounds(sw, ne);
Затем максимальный zoom для отображения этого квадрата:
var zoomlevel = map.getBoundsZoomLevel(bounds);

Необходимо сделать тоже самое в OpenLayers.
Вероятно нужно использовать OpenLayers.Map.getZoomForExtent для данного квадрата (для охвата всех точек).
Но не могу сообразить, как это сделать.
Слой векторный.
Помогите,пожалуйста

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Denis Rykov » 30 май 2012, 04:33

Код: Выделить всё

map.getZoomForExtent(layer.getDataExtent())
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Star-IK
Новоприбывший
Сообщения: 12
Зарегистрирован: 12 май 2012, 16:03
Репутация: 0

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Star-IK » 30 май 2012, 08:52

Denis Rykov писал(а):

Код: Выделить всё

map.getZoomForExtent(layer.getDataExtent())
Огромное спасибо!
Все работает!

Avastor
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 авг 2012, 12:30
Репутация: 0

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Avastor » 03 авг 2012, 12:34

Вопрос тот же но как сделать для точек на разные слоях, одна точка - один слой.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Denis Rykov » 03 авг 2012, 13:21

Пробежаться по всем фичам всех слоёв и вычислить общий охват, затем на него зазумиться.

Код: Выделить всё


var features = [];
for (var i=0, len_l=map.layers.length; i < len_l; i++) {
for (var j=0, len_f=map.layers.features.length; j<len_f; j++) {
features.push(map.layers.features[j]);
}
}

var geometry = null;
for(var i=0, len=features.length; i<len; i++) {
geometry = features.geometry;
if (geometry) {
if (maxExtent === null) {
maxExtent = new OpenLayers.Bounds();
}
maxExtent.extend(geometry.getBounds());
}
}
features - предварительно сформированный массив объектов всех слоёв.
Spatial is now, more than ever, just another column- The Geometry Column.

Avastor
Новоприбывший
Сообщения: 2
Зарегистрирован: 03 авг 2012, 12:30
Репутация: 0

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Avastor » 03 авг 2012, 14:29

Добавил небольшие правки.

Код: Выделить всё

var map = OpenLayersMap;
var features = [];
for (var i=0, len_l=map.layers.length; i < len_l; i++) {
    if (map.layers[i].isBaseLayer === false) {
        for (var j=0, len_f=map.layers[i].features.length; j<len_f; j++) {
            features.push(map.layers[i].features[j]);
        }
    }
}
      
var geometry = null;
for(var i=0, len=features.length; i<len; i++) {
    geometry = features[i].geometry;
    if (geometry) {
        if (map.maxExtent === null) {
            map.maxExtent = new OpenLayers.Bounds();
        }
        map.maxExtent.extend(geometry.getBounds());
    }
}

console.log( OpenLayersMap.getZoomForExtent(map.maxExtent) )
получаю 0;

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: OpenLayers: zoom для отображения всех объектов на карте

Сообщение Denis Rykov » 05 авг 2012, 18:34

Это что такое?

Код: Выделить всё

var map = OpenLayersMap;
Очевидно же, что это не верно и должно быть:

Код: Выделить всё

var map = new OpenLayers.Map();
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя