Установить степень обзора в OpenLayers 3

Я только начал смотреть на OpenLayers 3 и пытаюсь увеличить масштаб до одной функции, размер которой должен быть объектом geoJSON, отправленным сервером (который будет меняться при каждом обновлении, поэтому я не могу жестко закодировать масштаб/ центральная точка). Я бы хотел, чтобы это произошло, как только страница загрузится, но я изо всех сил пытаюсь заставить ее работать.

Я продолжаю получать сообщение об ошибке «Uncaught TypeError: undefined is not a function» в строке, где я пытаюсь прочитать геометрию из объекта geoJSON, и я не совсем уверен, как это исправить. Строка geoJSON выглядит нормально (я также пытался проанализировать ее перед передачей в readGeometry, но это дало те же результаты).

Если есть более простой/быстрый способ сделать это, чем я сейчас, мне было бы интересно это услышать! Любая помощь приветствуется.

var feature = new ol.Feature({
});

var view = new ol.View({
  center: [0, 0],
  zoom: 1
});


var client = new XMLHttpRequest();
client.open('GET', 'http://localhost:3000/extent');
client.send();
client.onreadystatechange=function(){
    if (client.readyState==4 && client.status==200){
        var geomstring = client.responseText;
        console.log(geomstring)
        var geojson = new ol.format.GeoJSON();
        var geom = geojson.readGeometry(geomstring);
        var size = (map.getSize());
        feature.setGeometry(geom);
        view.fitGeometry(
        geom,
        size,
        {
            padding: [170, 50, 30, 150],
            constrainResolution: false
        });
    }
}

var map = new ol.Map({
  layers: [raster, vector, feature],
  target: 'map',
  });    

person hansolo    schedule 27.07.2014    source источник
comment
Можете ли вы опубликовать пример GeoJSON? Вероятно, вам придется использовать readFeature() вместо readGeometry(), но это зависит от того, что возвращает ваш веб-сервис.   -  person tsauerwein    schedule 28.07.2014
comment
{st_asgeojson:{\type\:\Polygon\,\coordinates\:[[[-2416.91312435933,6700304.87650272],[-2416.91312435933,6700339.02584392],[-2255.97853651961,6700339.02584392],[-2255.97853651961,6700304.87650272],[-2416.91312435933, 6700304.87650272]]]}} Похоже, бит GeoJSON не работает должным образом, поскольку объект кажется пустым, когда я вывожу его в консоль   -  person hansolo    schedule 29.07.2014


Ответы (1)


Чтение геометрии должно работать следующим образом:

var geojson = new ol.format.GeoJSON();    
var json = {"st_asgeojson":"{\"type\":\"Polygon\",\"coordinates\":[[[-2416.91312435933,6700304.87650272],[-2416.91312435933,6700339.02584392],[-2255.97853651961,6700339.02584392],[-2255.97853651961,6700304.87650272],[-2416.91312435933,6700304.87650272]]]}"};
var geom = geojson.readGeometry(json['st_asgeojson']);
console.log(geom.getArea());
person tsauerwein    schedule 29.07.2014
comment
Большое спасибо! Я не догадывался, что это сам словарь. Наконец-то разобрались: var geojson = new ol.format.GeoJSON(); var json = JSON.parse(client.responseText); var geom = geojson.readGeometry(json['st_asgeojson']); var feature = new ol.Feature({}); feature.setGeometry(геометрия); console.log(feature.getGeometry()); степень.getSource().addFeature (функция); - person hansolo; 30.07.2014