2016-04-27 3 views
0

Ich habe versucht, einige Polygone in meinem Openlayers 3 Karte zu erstellen, wurde aber immer folgende Fehlermeldung:AssertionError: Assertion failed: Länge Array von Koordinaten sollten übereinstimmen Schritt

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

Der Code, den ich verwendet wurde, ist wie folgt :

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

ich die Lösung zu finden, zu kämpfen habe, und im Internet jeden Hinweis auf den Fehler selbst nicht (anders als der Quellcode von Openlayers) finden kann.

Ich habe die Lösung gefunden, aber ich poste es hier als Referenz, für den Fall, dass jemand in das gleiche Problem in der Zukunft stolpert.

Also, was war es fällig?

Antwort

2

Nach viel Graben Ich habe die Definition des Polygons realisiert einen zusätzlichen Satz von Klammern benötigt:

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

Und das funktioniert!

Dies ist der jsfiddle die mich schließlich aufgeklärt wurde: http://jsfiddle.net/q8s2z/111/

Als documentation Zustände, die Koordinaten Parameter ein Array von Array of ol.Coordinate ist (das auch ein Array ist).

Ebenso ein MultiPolygon würden wie folgt definiert:

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