1

我一直在尝试 Open Layers 的新版本 (3)。我稍微修改了图标功能示例,所以它会显示一个多边形。我一直在搜索,阅读和尝试几个小时,但无法弄清楚我做错了什么。

我不想使用 geoJSON,因为我想动态添加和删除功能。

这是我到目前为止的代码:

<script type="text/javascript"> 
  var point1 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857');
  var point2 = ol.proj.transform([35.41, 9.82], 'EPSG:4326', 'EPSG:3857');
  var point3 = ol.proj.transform([33.41, 11.82], 'EPSG:4326', 'EPSG:3857');
  var polyFeat = new ol.Feature({
    geometry: new ol.geom.Polygon([point1, point2, point3])
  });

  var polyStyle = new ol.style.Style({
    fill: new ol.style.Fill({
      color: 'blue'
    }),
    stroke: new ol.style.Stroke({
      color: 'red',
      width: 2
    })
  });

  polyFeat.setStyle(polyStyle);

  var vectorSource = new ol.source.Vector({
    features: [polyFeat]
  });

  var vectorLayer = new ol.layer.Vector({
    source: vectorSource
  });

  var rasterLayer = new ol.layer.Tile({
    source: new ol.source.TileJSON({
      url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp'
    })
  });

  var map = new ol.Map({
    layers: [rasterLayer, vectorLayer],
    target: document.getElementById('map'),
    view: new ol.View({
      center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'),
      zoom: 3
    })
  });
</script>

为什么多边形不显示?

4

1 回答 1

2

解决您的问题的两件小事:

首先,建议关闭多边形,因此声明第四个点,其坐标与第一个点相同。

var point4 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857');

然后,您的几何图形new ol.geom.Polygon([point1, point2, point3])应该是new ol.geom.Polygon([[point1, point2, point3, point4]])

这里重要的事实不是 point4 加法,而是将数组点转换为点数组。请参阅说明 OpenLayers 3构造函数期望预期的 APIol.geom.PolygonArray.<Array.<ol.Coordinate>>

于 2014-11-01T01:55:49.790 回答