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

AssertionError: Assertion failed: length of coordinate array should match stride

本文关键字:断言 失败 错误 坐标 数组      更新时间:2023-09-26

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

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

我使用的代码如下:

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的源代码)。

我已经找到了解决方案,但我将其发布在这里以供参考,以防将来有人遇到同样的问题。

那么,该怎么办呢?

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

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/

正如文档所述,坐标参数是ol的数组。坐标(也是一个数组)。

同样,多多边形也可以定义为:

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