Beanshell:Create linestring from points with id attribute

From OpenJUMP Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

BeanTools with user interface to create a LineString from points with an attribute containing the order of points


{

import com.vividsolutions.jump.workbench.ui.*;

// User interface
dialog = new MultiInputDialog(wc.workbench.frame, "Input box", true);
dialog.addLayerComboBox("LAYER", wc.createPlugInContext().getCandidateLayer(0), "", wc.layerManager);
dialog.addAttributeComboBox("SEQUENCE", "LAYER", AttributeTypeFilter.NUMSTRING_FILTER, "Select the attribute containing the sequence");
GUIUtil.centreOnWindow(dialog);
dialog.setVisible(true);
if (!dialog.wasOKPressed()) {return;}

// get parameters
lyr = dialog.getLayer("LAYER");
att = dialog.getComboBox("SEQUENCE").selectedItem;

// Create new dataset
schema = new FeatureSchema();
schema.addAttribute("GEOMETRY",AttributeType.GEOMETRY);
dataset = new FeatureDataset(schema);

// Processing input data
map = new TreeMap();
int i = 0;
for (feature : lyr.featureCollectionWrapper.features) {
    if (feature.schema.hasAttribute(att)) {
         map.put(feature.getAttribute(att), feature.geometry.coordinate);
    }
    else map.put(i++, feature.geometry.coordinate);
}
geometry = new GeometryFactory().createLineString(map.values().toArray(new Coordinate[map.size()]));
f = new BasicFeature(schema);
f.setGeometry(geometry);
dataset.add(f);
wc.layerManager.addLayer("Result",lyr.name+"-line",dataset);
 
}