OpenLayers: zoom для отображения всех объектов на карте
- Star-IK
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 12 май 2012, 16:03
- Репутация: 0
OpenLayers: zoom для отображения всех объектов на карте
Есть несколько объектов (точек с координатами ) на карте.
Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?
			
									
									
						Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?
- 
				daler
- Интересующийся
- Сообщения: 39
- Зарегистрирован: 14 ноя 2011, 17:15
- Репутация: 0
- Контактная информация:
Re: OpenLayers: zoom для отображения всех объектов на карте
Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.
или же в openlayers прописать для каждого zoom какие слои подключать
			
									
									
						или же в openlayers прописать для каждого zoom какие слои подключать
- Star-IK
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 12 май 2012, 16:03
- Репутация: 0
Re: OpenLayers: zoom для отображения всех объектов на карте
Уважаемый Daler!daler писал(а):Если используется wms mapserver можно использовать параметры maxscaledenom, minscaledenom.
или же в openlayers прописать для каждого zoom какие слои подключать
Я четко указал: OpenLayers: zoom для отображения всех объектов на карте.
Все объекты (точки с координатами) в одном слое, так что "прописать для каждого zoom какие слои подключать" не имеет смысла. Необходимо, что бы квадрат в котором расположены все объекты был виден при определенном zoom.
Если кто-нибудь знает, как это сделать, подскажите.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers: zoom для отображения всех объектов на карте
Честно говоря я не совсем понял вопрос, мб 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 для отображения всех объектов на карте
Denis, хочу уточнить вопрос.Denis Rykov писал(а):Честно говоря я не совсем понял вопрос, мб OpenLayers.Map.getZoomForExtent или OpenLayers.Map.zoomToMaxExtent то что вы ищите? Слой то у вас какой, векторный или растровый?
В статье
, пункт
Приведен пример для API MAP.Google4. Получение географического охвата данных
Код: Выделить всё
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 для отображения всех объектов на карте
Код: Выделить всё
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 для отображения всех объектов на карте
Огромное спасибо!Denis Rykov писал(а):Код: Выделить всё
map.getZoomForExtent(layer.getDataExtent())
Все работает!
- 
				Avastor
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 03 авг 2012, 12:30
- Репутация: 0
Re: OpenLayers: zoom для отображения всех объектов на карте
Вопрос тот же но как сделать для точек на разные слоях, одна точка - один слой.
			
									
									
						- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers: zoom для отображения всех объектов на карте
Пробежаться по всем фичам всех слоёв и вычислить общий охват, затем на него зазумиться.
features - предварительно сформированный массив объектов всех слоёв.
			
									
									Код: Выделить всё
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());
    }
}Spatial is now, more than ever, just another column- The Geometry Column.
						- 
				Avastor
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 03 авг 2012, 12:30
- Репутация: 0
Re: OpenLayers: zoom для отображения всех объектов на карте
Добавил небольшие правки.
получаю 0;
			
									
									
						Код: Выделить всё
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) )- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: OpenLayers: zoom для отображения всех объектов на карте
Это что такое?
Очевидно же, что это не верно и должно быть:
			
									
									Код: Выделить всё
var map = OpenLayersMap;Код: Выделить всё
var map = new OpenLayers.Map();Spatial is now, more than ever, just another column- The Geometry Column.
						Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя

