1

我正在使用带有 Bing 地图的 Openlayers3 来构建我的应用程序。我有一个点 shapefile,想在地图上显示它。我可以使用 OpenLayers.Layer.GML() 构造使用 Openlayers2 来做到这一点,但在尝试使用 Openlayers 3 时遇到了困难。我尝试搜索这个,openlayer示例给了我一个错误:'无法读取属性'ogc'的未定义'。我的 shapefile 在我自己系统的 GeoServer 上。

因此,非常感谢您对此事的任何帮助:)

4

1 回答 1

3

您链接的示例来自 OpenLayers 3 的一个非常旧的 beta 版本。您可以在此处找到上一个版本的示例。

您正在谈论 shapefile,但考虑到您在 OpenLayers 2 中使用过并且已经用andOpenLayers.Layer.GML标记了这篇文章,我假设您已经将 shapefile 上传到 GeoServer 并使用 WFS 访问数据。geoservergml

因此,要查看的相关示例将是http://openlayers.org/en/v3.3.0/examples/vector-wfs.html。该示例使用 JSONP 作为传输。在您的情况下,使用本地 GeoServer,您的矢量源定义会更简单一些,看起来像这样:

var vectorSource = new ol.source.ServerVector({
  format: new ol.format.GeoJSON(),
  loader: function(extent, resolution, projection) {
    var url = 'geoserver/wfs?service=WFS&version=1.1.0&' +
        'request=GetFeature&typename=osm:water_areas&outputFormat=json' +
        '&srsname=EPSG:3857&bbox=' + extent.join(',') + ',EPSG:3857';
    $.ajax(url).then(function(response) {
      vectorSource.addFeatures(vectorSource.readFeatures(response));
    });
  },
  strategy: ol.loadingstrategy.createTile(new ol.tilegrid.XYZ({
    maxZoom: 19
  }))
});

在上面的代码片段中,您必须替换osm:water_areas为您的工作区和图层(要素类型)名称。

要在矢量图层中使用该源,如果您不想要默认的蓝色填充,还可以添加一些样式。下面的一个仅使用 2 像素宽的蓝色轮廓渲染特征:

var vector = new ol.layer.Vector({
  source: vectorSource,
  style: new ol.style.Style({
    stroke: new ol.style.Stroke({
      color: 'rgba(0, 0, 255, 1.0)',
      width: 2
    })
  })
});
于 2015-03-23T22:37:23.560 回答