来自geoserver的geojson图层未显示(openlayer)

时间:2013-11-23 18:43:14

标签: openlayers geojson geoserver

我正在运行此脚本:

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()
      })
    })
  ]
});

为什么图层没有显示。我有时会从地理服务器中获得“不够的permgen空间”错误?与那个问题有关吗?或者我是否需要对地理服务器进行任何调整才能发布地图?如果您只在浏览器中输入网址,则会获得geojson代码。非常感谢提前

2 个答案:

答案 0 :(得分:0)

只是指出你的geojson文件没有问题,但它有两个点,一个在布达佩斯附近,另一个靠近也门(我使用了http://geojsonlint.com/

enter image description here

那会是问题吗?

答案 1 :(得分:0)

如果您使用的是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代码,那么问题就在于geoserver,而不是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 Feed输入的数据,它似乎位于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的'parser'变量的任何文档。这可能意味着您正在使用不同的库或更旧的库。如果是这种情况,我上面所说的可能是不帮助