我试图在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的源代码)。
我找到了解决方案,但我将其发布在此处以供参考,以防万一将来遇到同样的问题。
那么,到底发生了什么?
答案 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]
] ]);