AssertionError:断言失败:坐标数组的长度应与步幅匹配

时间:2016-04-27 18:22:16

标签: javascript openlayers-3

我试图在OpenLayers 3地图中创建一些多边形,但收到以下错误:

  

AssertionError:断言失败:坐标数组的长度应该是   匹配步幅

我使用的代码如下:

var geometry = new ol.geom.Polygon([
  [10.689697265625, -25.0927734375],
  [34.595947265625, -20.1708984375],
  [38.814697265625, -35.6396484375],
  [13.502197265625, -39.1552734375],
  [10.689697265625, -25.0927734375]
], "XY");

geometry.transform('EPSG:4326', 'EPSG:3857');

var vectorLayer = new ol.layer.Vector({
    map: this.map,
    source: new ol.source.Vector({
        features: [new ol.Feature({
            geometry: geometry
        })]
    })
});

我一直在努力寻找解决方案,并且在互联网上找不到任何对错误本身的引用(除了OpenLayers的源代码)。

我找到了解决方案,但我将其发布在此处以供参考,以防万一将来遇到同样的问题。

那么,到底发生了什么?

1 个答案:

答案 0 :(得分:2)

经过多次挖掘后,我意识到多边形的定义需要一组额外的括号:

var geometry = new ol.geom.Polygon([ [
  [10.689697265625, -25.0927734375],
  [34.595947265625, -20.1708984375],
  [38.814697265625, -35.6396484375],
  [13.502197265625, -39.1552734375],
  [10.689697265625, -25.0927734375]
] ]);

geometry.transform('EPSG:4326', 'EPSG:3857');

var vectorLayer = new ol.layer.Vector({
    map: this.map,
    source: new ol.source.Vector({
        features: [new ol.Feature({
            geometry: geometry
        })]
    })
});

这很有效!

这是最终启发我的jsfiddle:http://jsfiddle.net/q8s2z/111/

作为documentation状态,坐标参数是一个ol.Coordinate数组的数组(也是一个数组)。

同样,MultiPolygon定义为:

var geometry = new ol.geom.MultiPolygon([ [
  [10.689697265625, -25.0927734375],
  [34.595947265625, -20.1708984375],
  [38.814697265625, -35.6396484375],
  [13.502197265625, -39.1552734375],
  [10.689697265625, -25.0927734375]
], [
  [10.689697265625, -25.0927734375],
  [34.595947265625, -20.1708984375],
  [38.814697265625, -35.6396484375],
  [13.502197265625, -39.1552734375],
  [10.689697265625, -25.0927734375]
] ]);