var reader = new jsts.io.WKTReader();
var a = reader.read('POLYGON((10 10, 100 10, 100 100, 10 100, 10 10))');
var b = reader.read('LINESTRING(-5 15, 50 50, 55 60, 50 40, 130 50)');
var union = a.getExteriorRing().union(b);
var polygonizer = new jsts.operation.polygonize.Polygonizer();
polygonizer.add(union);
var map = new OpenLayers.Map('map', {
maxExtent: new OpenLayers.Bounds(0, 0, 200, 200),
maxResolution: 100,
units: 'm',
controls: [new OpenLayers.Control.MousePosition(), new OpenLayers.Control.Navigation()]
});
var layer = new OpenLayers.Layer.Vector('test', {
isBaseLayer: true
});
map.addLayer(layer);
var parser = new jsts.io.OpenLayersParser();
var polygons = polygonizer.getPolygons();
for (var i = polygons.iterator(); i.hasNext();) {
var polygon = i.next();
var feature = new OpenLayers.Feature.Vector(parser.write(polygon), null, { strokeColor: 'gray', strokeWidth: 5, fillColor: 'white'});
layer.addFeatures([feature]);
}
var feature = new OpenLayers.Feature.Vector(parser.write(b), null, { strokeColor: 'black', strokeWidth: 1, fillColor: 'red'});
layer.addFeatures([feature]);
map.zoomToMaxExtent();
var control = new OpenLayers.Control.ModifyFeature(layer);
map.addControl(control);
control.activate();
Note that I'm creating a union of the linework. This is because Polygonizer needs "noded" input to create expected output. For more complex cases you might need to use a noder implementation instead of union.
/Björn