使用node.js在ol3中绘制功能

时间:2016-11-24 22:27:23

标签: javascript html node.js openlayers

在选项卡1上绘制功能后尝试发射几何体。然后尝试使用socket.on重绘功能以显示在选项卡2.但是由于某种原因未绘制该功能。

window.onload = function init() {
  var source = new ol.source.Vector({ wrapX: false });
  //create a base vector layer to draw on
  var vector = new ol.layer.Vector({
      source: source,
  });

  var raster = new ol.layer.Tile({
      source: new ol.source.OSM()
  });

  //create map
  map = new ol.Map({
    layers: [raster, vector],
    target: 'map',
    controls: ol.control.defaults({
        attributionOptions: /** @type {olx.control.AttributionOptions} */ ({
            collapsible: false
        })
    }),
    view: new ol.View({
        center: [0,0],
        zoom: 10
    })
  });

  function drawShape(value) {

      var value = value;
      if (value !== 'None') {
          draw = new ol.interaction.Draw({
              source: source,
              type: /** @type {ol.geom.GeometryType} */ (value)
          });
          map.addInteraction(draw);

          draw.on('drawend', function (event) {

            // Get the array of features
            var feature = event.feature

            try {
                map.removeInteraction(draw);
                socket.emit('new polygon', feature.getGeometry().getCoordinates());
                socket.emit('chat message', feature.getGeometry().getCoordinates());
            } catch (err) { }
          });
      }
  }

  var socket = io();
  socket.on('new polygon', function (msg) {

      var thing = new ol.geom.Polygon(msg);

      var featurething = new ol.Feature({
          name: "Thing",
          geometry: thing
      });

      source.addFeature(featurething);

  });
}

运行脚本时,msg包含一个坐标数组。控制台中没有任何内容。

msg value

我是node.js的初学者。任何人都知道我做错了什么

1 个答案:

答案 0 :(得分:1)

发现错误。在您呼叫的socket.on回叫中

source.addFeatures(featurething);

什么时候应该

source.addFeature(featurething); // single feature, no s

source.addFeatures([featurething]); // put it in an array