OpenLayers: zoom для отображения всех объектов на карте
- Star-IK
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 12 май 2012, 16:03
- Репутация: 0
OpenLayers: zoom для отображения всех объектов на карте
Есть несколько объектов (точек с координатами ) на карте.
Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?
Центр карты определяется по максимальным и минимальным координатам.
Подскажите, как определить zoom для отображения этих объектов?
-
- Интересующийся
- Сообщения: 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())
Все работает!
-
- Новоприбывший
- Сообщения: 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.
-
- Новоприбывший
- Сообщения: 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.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя