Страница 1 из 1
OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 29 май 2012, 15:49
Star-IK
Есть несколько объектов (точек с координатами ) на карте.
Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 29 май 2012, 16:23
daler
Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.
или же в openlayers прописать для каждого zoom какие слои подключать
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 29 май 2012, 20:17
Star-IK
daler писал(а):Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.
или же в openlayers прописать для каждого zoom какие слои подключать
Уважаемый Daler!
Я четко указал:
OpenLayers: zoom для отображения всех объектов на карте.
Все объекты (точки с координатами) в одном слое, так что "
прописать для каждого zoom какие слои подключать" не имеет смысла. Необходимо, что бы квадрат в котором расположены все объекты был виден при определенном zoom.
Если кто-нибудь знает, как это сделать, подскажите.
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 29 май 2012, 20:39
Denis Rykov
Честно говоря я не совсем понял вопрос, мб
OpenLayers.Map.getZoomForExtent или
OpenLayers.Map.zoomToMaxExtent то что вы ищите? Слой то у вас какой, векторный или растровый?
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 29 май 2012, 22:26
Star-IK
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 для данного квадрата (для охвата всех точек).
Но не могу сообразить, как это сделать.
Слой векторный.
Помогите,пожалуйста
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 30 май 2012, 04:33
Denis Rykov
Код: Выделить всё
map.getZoomForExtent(layer.getDataExtent())
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 30 май 2012, 08:52
Star-IK
Denis Rykov писал(а):Код: Выделить всё
map.getZoomForExtent(layer.getDataExtent())
Огромное спасибо!
Все работает!
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 03 авг 2012, 12:34
Avastor
Вопрос тот же но как сделать для точек на разные слоях, одна точка - один слой.
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 03 авг 2012, 13:21
Denis Rykov
Пробежаться по всем фичам всех слоёв и вычислить общий охват, затем на него зазумиться.
Код: Выделить всё
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 - предварительно сформированный массив объектов всех слоёв.
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 03 авг 2012, 14:29
Avastor
Добавил небольшие правки.
Код: Выделить всё
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;
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавлено: 05 авг 2012, 18:34
Denis Rykov
Это что такое?
Очевидно же, что это не верно и должно быть: