Beanshell:Create linestring from points with id attribute
Jump to navigation
Jump to search
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);
}