Слой geojson с геосервера не отображается (openlayer)

у меня работает этот скрипт:

var map;

  var map = new ol.Map({
  target: 'map',
  renderer: ol.RendererHint.CANVAS,
  view: new ol.View2D({
    center: ol.proj.transform([16.37, 48.21], 'EPSG:4326', 'EPSG:3857'),
    zoom: 11
  }),
  layers: [
    new ol.layer.Tile({
      source: new ol.source.MapQuestOpenAerial()
    }),
    new ol.layer.Vector({
      source: new ol.source.Vector({
        url: 'http://ginyu.at:8080/geoserver/wienbike/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wienbike%3Ainput2&maxfeatures=50&outputformat=json',
        parser: new ol.parser.GeoJSON()
      })
    })
  ]
});

почему слой не отображается. я иногда получаю сообщение об ошибке «недостаточно места для пермгена» от геосервера? это связано с этой проблемой? или мне нужно внести какие-либо коррективы в геосервер для публикации карт? если вы введете только URL-адрес в браузере, вы получите код geojson. Спасибо заранее


person user2975100    schedule 23.11.2013    source источник


Ответы (2)


просто чтобы указать, что в вашем файле geojson нет проблем, но у него есть две точки: одна недалеко от Будапешта, а другая недалеко от Йемена (я использовал http://geojsonlint.com/ для этого)

введите здесь описание изображения

будет ли это проблемой?

person Gery    schedule 23.11.2013
comment
спасибо. это не должно быть проблемой. я просто удалил записи из базы данных. Я думаю, что это что-то с геосервером .. - person user2975100; 25.11.2013

Если вы используете Openlayers, вы можете попробовать использовать слой Openlayers GeoRSS вместо векторного слоя. Существует ряд вещей, которые могут потребовать настройки внутри openlayers при использовании векторных слоев для получения данных.

Попробуйте что-то вроде:

new OpenLayers.Layer.GeoRSS( 'GeoRSS Layer', 'http://ginyu.at:8080/geoserver/wienbike/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wienbike%3Ainput2&maxfeatures=50&outputformat=json');

Если переход по ссылке показывает код GeooRSS, то очень маловероятно, что проблема связана с геосервером, а не с тем, как openlayers пытается обрабатывать данные.

Если вы действительно хотите использовать вектор, попробуйте использовать эти параметры, чтобы Openlayers знал, как обрабатывать данные. Что особенно важно, так это стратегия, поскольку она позволяет Openlayers знать, когда идти и получать данные и т. Д., И формат, поскольку он позволяет узнать, в каком формате находятся данные.

new OpenLayers.Layer.Vector("GeoRSS Layer", {
    strategies: [new OpenLayers.Strategy.Fixed()],
    protocol: new OpenLayers.Protocol.HTTP({
        url: "http://ginyu.at:8080/geoserver/wienbike/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wienbike%3Ainput2&maxfeatures=50&outputformat=jsonl",
        format: new OpenLayers.Format.GeoRSS()
    })
});

И последнее, что нужно проверить, это то, что ваша карта и ваши данные используют одну и ту же проекцию. Линия:

ol.proj.transform([16.37, 48.21], 'EPSG:4326', 'EPSG:3857'),

Предполагается, что вы ожидаете, что ваша карта будет в формате EPSG:3857. Я не вижу, чтобы вы где-нибудь установили карту на эту проекцию. Поскольку вы используете слой MapQuestOpenAriel, вероятно, это правильная проекция. Это может не быть проблемой, если все ваши данные находятся в одном проекте. Однако вы должны убедиться, что ваши данные georss находятся в этой проекции. Глядя на данные, поступающие через ваш канал GeoRSS, кажется, что они имеют формат EPSG: 4326. Это означает, что они не будут правильно проецироваться на вашу карту. Это означает, что вам нужно будет перепроецировать координаты ваших данных GeoRSS. Мы можем сделать это, указав проекцию в слое Openlayers GeoRSS:

new OpenLayers.Layer.GeoRSS( 'GeoRSS Layer', 
                              'http://ginyu.at:8080/geoserver/wienbike/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wienbike%3Ainput2&maxfeatures=50&outputformat=json',
                               {projection: new OpenLayers.Projection("EPSG:4326")}
);

Мне не удалось найти никакой документации по переменной «парсер» для Openlayers. Это может означать, что вы используете другую библиотеку или более старую. Если это так, то то, что я сказал выше, может не помочь.

person Darkcylde    schedule 05.02.2014