[GIS] TopologyException side location conflict reading MapInfo with Sharpmap

cmapinfoogrsharpmap

I'm using SharpMap 0.9 to read various MapInfo (.tab) files.

I have used a number of files without any problem and been able to perform intersection queries on them like so:

var interesectionResults = provider.ExecuteIntersectionQuery(geometry);

where the provider is created like so:

var layerLocation = new FileInfo(_layerDirectory.FullName + "\\" + layerName +FileExtension);

if (!layerLocation.Exists)
    throw new Exception(string.Format("Could not locate the layer data file, {0}", layerLocation));

return new Ogr(layerLocation.FullName);

The geometry used in ExecuteIntersectionQuery is defined as follows:

var cadastreProvider = GetLayerProvider(Settings.Default.PropertyLayerName);

//Query cadastre to get property bounding box
var query = String.Format("SELECT * FROM {0} WHERE {1} = {2}", cadastreProvider.LayerName, Settings.Default.PropertyKeyField, propertyID);

var propertyResults = cadastreProvider.ExecuteQuery(query);
var resultsTable = propertyResults.Tables.First();
var propertyFeatureRow =  resultsTable.Rows[0] as FeatureDataRow
var geometry = propertyFeatureRow.Geometry

For a particular set of new MapInfo files I have recevied for a client everytime I do the intersection query the following error is thrown

System.ApplicationException was caught
  Message=TopologyException: side location conflict 402348 6.9506e+006 1.7e-308
  Source=ogr_csharp
  StackTrace:
       at OSGeo.OGR.Layer.GetNextFeature()
       at SharpMap.Data.Providers.Ogr.ExecuteIntersectionQuery(FeatureDataSet ds) in E:\Investigation\GIS\Sharpmap\Sharpmap src\Trunk\SharpMap.Extensions\Data\Providers\OgrProvider.cs:line 483
       at SharpMap.Data.Providers.Ogr.ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) in E:\Investigation\GIS\Sharpmap\Sharpmap src\Trunk\SharpMap.Extensions\Data\Providers\OgrProvider.cs:line 465
       at SharpMap.Data.Providers.Ogr.ExecuteIntersectionQuery(Geometry geom) in E:\Investigation\GIS\Sharpmap\Sharpmap src\Trunk\SharpMap.Extensions\Data\Providers\OgrProvider.cs:line 735
       at IFMA.Common.GIS.MapInfo.Implementation.GetLandAttributesForLayerByPropertyID(String propertyID, String layerName, Boolean displayLayerDetails, String layerIdentifierField, String layerDescriptionField, Int32 queryType) in E:\Common\Current\01- Trunk\GIS\Implementations\IFMA.Common.GIS.MapInfo\Implementation.cs:line 145
       at IFMA.MasterPlan.BusinessLogic.PropertySystemManager.GetApplicationPropertiesLandAttributes(Application application, Nullable`1 systemVersion) in E:\MP\Current\03- Working\IFMA.MasterPlan.BusinessLogic\PropertySystemManager.cs:line 211
  InnerException: 

I can't seem to find much information about this error but I gather its at least being thrown by the underlying provider (OGR) that Sharpmap uses to read MapInfo files.

Has anyone got an idea what might be causing this?

Best Answer

This -probably- is pretty easy to fix. One or more of your polygons must have self-intersecting rings. This can usually be fixed performing a buffer operation on the dataset with a buffer distance of 0.

Hth FObermaier

Related Question