WKBFeatureSetsCS - sindizzy/DSW GitHub Wiki
FeatureSets exist in two basic "Modes". In one mode, they are "indexed" which implies there is a single large vertex array and a series of "ShapeIndices" that let you cycle through those vertices. The second mode is to simply have multiple Features in a Feature list, and it becomes necessary to cycle through the coordinates of the geometries in order to do anything with the shapes. Opening a shapefile automatically opens it into the indexed mode, while creating a new shapefile automatically assumes that you want to work with the features list. For importing from WKB there are two strategies.
{{ ///
// Open the featureset using standard shapefile format
IFeatureSet fs = FeatureSet.Open(layer.DataSet.Filename);
// The output featureset to be created from wkb
FeatureSet result = new FeatureSet(fs.FeatureType);
// Store the WKB representation in a list of arrays, each shape has one array.
List<byte[]()()> binaryShapes = new List<byte[]()()>();
// This forces the creation of features, and uses the old WKB converter
// which was the NTS implementation of the standard OGC WKB.
foreach (IFeature feature in fs.Features)
{
binaryShapes.Add(feature.ToBinary());
}
// Start by setting up a list of shapes
List<Shape> shapes = new List<Shape>();
// Loop through the binary arrays
foreach (byte[]() rawBytes in binaryShapes)
{
// read each
MemoryStream ms = new MemoryStream(rawBytes);
shapes.Add(WkbFeatureReader.ReadShape(ms));
}
// As of the most recent source commit, this also works if it is false.
result.IndexMode = true;
// Adds the shapes to the result in one pass, so that there is less array re-dimensioning
result.AddShapes(shapes);
// opens the result as a new layer on the map
App.Map.Layers.Add(result);
} }}