Skip to content

Commit

Permalink
Problem when invalid geometries were found. Calls now MakeValid and a…
Browse files Browse the repository at this point in the history
…dd proper trace warning.
  • Loading branch information
xfischer committed Apr 18, 2018
1 parent f8cc08e commit 8377b8a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 23 deletions.
46 changes: 27 additions & 19 deletions MapBind.IO/ShapeFile/ShapeFileImporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public void ImportShapeFile(string connectionString,
enSpatialType spatialType,
int SRID,
string tableName,
string schema,
string schema,
string IdColName,
string geomcolName,
List<string> fieldsToImport)
Expand All @@ -126,7 +126,7 @@ public void ImportShapeFile(string connectionString,
_worker.WorkerReportsProgress = true;
_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
_worker.ProgressChanged += new ProgressChangedEventHandler(_worker_ProgressChanged);
_worker.DoWork += new DoWorkEventHandler(delegate(object sender, DoWorkEventArgs e)
_worker.DoWork += new DoWorkEventHandler(delegate (object sender, DoWorkEventArgs e)
{
try
{
Expand Down Expand Up @@ -285,7 +285,7 @@ where fieldsToImport.Contains(field.Name)
}

break;
#endregion
#endregion

}

Expand Down Expand Up @@ -413,9 +413,9 @@ public void ImportShapeFile_Direct(string connectionString,
bool recreateTable,
enSpatialType spatialType,
int SRID,
string tableName,
string schema,
string IdColName,
string tableName,
string schema,
string IdColName,
string geomcolName,
List<string> fieldsToImport)
{
Expand All @@ -427,7 +427,7 @@ public void ImportShapeFile_Direct(string connectionString,
_worker.WorkerReportsProgress = true;
_worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker_RunWorkerCompleted);
_worker.ProgressChanged += new ProgressChangedEventHandler(_worker_ProgressChanged);
_worker.DoWork += new DoWorkEventHandler(delegate(object sender, DoWorkEventArgs e)
_worker.DoWork += new DoWorkEventHandler(delegate (object sender, DoWorkEventArgs e)
{
try
{
Expand Down Expand Up @@ -616,12 +616,20 @@ private bool Raise_Error(ShapeImportExceptionEventArgs args)
bool ret = false;
try
{
MapBindTrace.Source.TraceEvent(TraceEventType.Error, 1, string.Format("{0} Index={1}, Attributes={2}, \r\nGeom={3}, \r\nReversedGeom={4}"
, ((Exception)args.ExceptionObject).Message
, args.ShapeIndex
, args.ShapeInfo.Replace("\n", ", ")
, args.ShapeGeom.ToString()
, args.ShapeGeom.Reverse().ToString()));
if (args.ShapeInfo == null)
{
MapBindTrace.Source.TraceEvent(TraceEventType.Error, 1, string.Format("{0}"
, ((Exception)args.ExceptionObject).Message));
}
else
{
MapBindTrace.Source.TraceEvent(TraceEventType.Error, 1, string.Format("{0} Index={1}, Attributes={2}, \r\nGeom={3}, \r\nReversedGeom={4}"
, ((Exception)args.ExceptionObject).Message
, args.ShapeIndex
, args.ShapeInfo.Replace("\n", ", ")
, args.ShapeGeom.ToString()
, args.ShapeGeom.Reverse().ToString()));
}

if (Error != null)
Error(this, args);
Expand Down Expand Up @@ -664,12 +672,12 @@ private void Init()

// REVERSE
SqlServerHelper.REVERSE_GEOMETRIES = null;

// construct Sql table name
_tableName = SqlServerModel.CleanSQLName(Path.GetFileNameWithoutExtension(_shapeFile));

// Init reader
using (ShapefileDataReader reader = new ShapefileDataReader(_shapeFile, GeometryFactory.Default))
// construct Sql table name
_tableName = SqlServerModel.CleanSQLName(Path.GetFileNameWithoutExtension(_shapeFile));

// Init reader
using (ShapefileDataReader reader = new ShapefileDataReader(_shapeFile, GeometryFactory.Default))
{
// Get Shape info
_bounds = reader.ShapeHeader.Bounds;
Expand All @@ -686,7 +694,7 @@ private void Init()
_geomField = SqlServerModel.GenerateUniqueColName("geom", ShapeFileHelper.TranslateDbfTypesToSql(reader.DbaseHeader.Fields), _tableName);
}



}

Expand Down
20 changes: 16 additions & 4 deletions MapBind.IO/SqlServer/SqlServerHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,17 @@ internal static object ConvertToSqlType(IGeometry geom, int SRID, bool useGeogra
}

MsSql2008GeographyWriter geoWriter = new MsSql2008GeographyWriter();
SqlGeography v_geog = null;
if (REVERSE_GEOMETRIES.GetValueOrDefault(false))
v_ret = geoWriter.WriteGeography(geom.Reverse());
v_geog = geoWriter.WriteGeography(geom.Reverse());
else
v_ret = geoWriter.WriteGeography(geom);

v_geog = geoWriter.WriteGeography(geom);
if (!v_geog.STIsValid().Value)
{
Trace.TraceWarning(string.Format("Invalid geometry. Must call make valid : {0}", v_geog.IsValidDetailed()));
v_geog = v_geog.MakeValid();
}
v_ret = v_geog;
}
catch (OutOfMemoryException exMemory)
{
Expand Down Expand Up @@ -115,7 +121,13 @@ internal static object ConvertToSqlType(IGeometry geom, int SRID, bool useGeogra
else
{
MsSql2008GeometryWriter geoWriter = new MsSql2008GeometryWriter();
v_ret = geoWriter.WriteGeometry(geom);
SqlGeometry v_retGeom = geoWriter.WriteGeometry(geom);
if (!v_retGeom.STIsValid().Value)
{
Trace.TraceWarning(string.Format("Invalid geometry. Must call make valid : {0}", v_retGeom.IsValidDetailed()));
v_retGeom = v_retGeom.MakeValid();
}
v_ret = v_retGeom;
//feature.geomWKT = geoWriter.WriteGeometry(geomOut).ToString();
}
}
Expand Down

0 comments on commit 8377b8a

Please sign in to comment.