bool Shapefile.HasInvalidShapes ()
 Checks whether there are invalid shapes within shapefile. More...


ShapeValidationInfo Shapefile.LastInputValidation [get]
 Gets results of input data validation for geoprocessing methods. More...
ShapeValidationInfo Shapefile.LastOutputValidation [get]
 Gets results of output data validation for geoprocessing methods. More...

Detailed Description

Here is a list of properties and methods for shapefile validation. This module is a part of the documentation of Shapefile class.


Graph description

Shapefile validation

Starting from version 4.9.1 built-in validation for input and output shapefiles passed to geoprocessing methods is used. During validation each shape within a shapefile is checked for validity with Shape.IsValid property and optionally an attempt is made to fix invalid shapes with Shape.FixUp. If the fixing wasn't successful, various actions may be taken:

Validation behaviors are specified in GlobalSettings.ShapeInputValidationMode and GlobalSettings.ShapeOutputValidationMode. See tkShapeValidationMode enumeration for possible behaviours. By default no validation is performed (tkShapeValidationMode.NoValidation), to preserve compatibility with previous versions of library.

The results of validation can be viewed via Shapefile.LastInputValidation and Shapefile.LastOutputValidation properties. Both return instance of ShapeValidationInfo class (see description for list of properties).
There is slight difference between input and output validation:

In this example a shapefile with invalid shape is created and then validated as input to Shapefile.AggregateShapes methods and as output in Shapefile.Save method.

// creating invalid shapefile
Extents ext = new Extents();
ext.SetBounds(100, 100, 0, 200, 200, 0);
Extents ext2 = new Extents();
ext2.SetBounds(200, 100, 0, 300, 200, 0);
// polygons will touch along the border after aggregation
var shp = ext.ToShape();
var shp2 = ext2.ToShape();
// make invalid by reversing order of points
var sf = new Shapefile();
sf.CreateNew("", ShpfileType.SHP_POLYGON);
int fieldIndex = sf.EditAddField("Id", FieldType.INTEGER_FIELD, 10, 10);
sf.EditCellValue(fieldIndex, 0, 1);
sf.EditCellValue(fieldIndex, 1, 1);
// doing operation & validating
var gs = new GlobalSettings();
gs.ShapeInputValidationMode = tkShapeValidationMode.TryFixProceedOnFailure;
gs.ShapeOutputValidationMode = tkShapeValidationMode.TryFixProceedOnFailure;
var result = sf.AggregateShapes(false, fieldIndex);
if (sf.LastInputValidation != null)
Debug.Print("Input validation: " + sf.LastInputValidation.Status.ToString());
if (sf.LastOutputValidation != null)
Debug.Print("Output validation: " + sf.LastOutputValidation.Status.ToString());
Debug.Print("Input still has invalid shapes: " + sf.HasInvalidShapes());
Debug.Print("Output has invalid shapes: " + result.HasInvalidShapes());
sf.SaveAs(@"d:\validated.shp", null);
if (sf.LastInputValidation != null)
Debug.Print("Output validation (for Shapefile.Save): " + sf.LastInputValidation.Status.ToString());
Debug.Print("Shapefile still has invalid shapes: " + sf.HasInvalidShapes());

Output of the sample:

// Input validation: InvalidFixed
// Output validation: InvalidFixed
// Input still has invalid shapes: True
// Output has invalid shapes: False
// Output validation (for Shapefile.Save): InvalidFixed
// Shapefile still has invalid shapes: False

Here is list of methods with built-in shapefile validation: Shapefile.Clip, Shapefile.GetIntersection, Shapefile.Difference, Shapefile.SymmDifference, Shapefile.Union, Shapefile.ExplodeShapes, Shapefile.AggregateShapes, Shapefile.ExportSelection, Shapefile.Sort, Shapefile.Dissolve, Shapefile.BufferByDistance, Shapefile.Merge, Shapefile.Segmentize, Shapefile.SimplifyLines, Shapefile.Reproject, Shapefile.ReprojectInPlace (input validation only), Shapefile.Save (output validation), Shapefile.SaveAs (output validation), Shapefile.Dump (output validation), Utils.ReprojectShapefile, Utils.GridToShapefile, Utils.TinToShapefile, Utils.OgrLayerToShapefile, Utils.RemoveColinearPoints, Utils.ShapefileToGrid.

Function Documentation

◆ HasInvalidShapes()

bool Shapefile.HasInvalidShapes ( )

Checks whether there are invalid shapes within shapefile.

True if there invalid shapes and false otherwise.
New API 4.9.0:
Added in version 4.9.0


◆ LastInputValidation

ShapeValidationInfo Shapefile.LastInputValidation

Gets results of input data validation for geoprocessing methods.

Use GlobalSettings.ShapeInputValidationMode to change the settings.

New API 4.9.1:
Added in version 4.9.1

◆ LastOutputValidation

ShapeValidationInfo Shapefile.LastOutputValidation

Gets results of output data validation for geoprocessing methods.

Use GlobalSettings.ShapeOutputValidationMode to change the settings.

New API 4.9.1:
Added in version 4.9.1