From 29c9c29018e636f26eb6cfe7707e7cfa34e5a5d0 Mon Sep 17 00:00:00 2001 From: Joe Amenta Date: Sat, 22 Aug 2020 09:39:18 -0400 Subject: [PATCH 01/17] WIP: the start of shapefile NG --- NetTopologySuite.IO.ShapeFile.sln | 6 ++ .../GeneralIOHelpers.cs | 36 ++++++++++ .../NetTopologySuite.IO.ShapefileNG.csproj | 31 ++++++++ .../ShapeTypeNG.cs | 33 +++++++++ .../ShapefileFormatForwardOnlyReader.cs | 49 +++++++++++++ .../ShapefileFormatSeekableReader.cs | 71 +++++++++++++++++++ .../ShapefileHeaderNG.cs | 53 ++++++++++++++ .../ShapefileIndexFileRecordHeaderNG.cs | 24 +++++++ .../ShapefileMainFileRecordHeaderNG.cs | 25 +++++++ .../ShapefilePrimitiveHelpers.cs | 46 ++++++++++++ 10 files changed, 374 insertions(+) create mode 100644 src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapeTypeNG.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs diff --git a/NetTopologySuite.IO.ShapeFile.sln b/NetTopologySuite.IO.ShapeFile.sln index 3b72122..705285b 100644 --- a/NetTopologySuite.IO.ShapeFile.sln +++ b/NetTopologySuite.IO.ShapeFile.sln @@ -16,6 +16,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.GDB", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile.Test", "test\NetTopologySuite.IO.ShapeFile.Test\NetTopologySuite.IO.ShapeFile.Test.csproj", "{89254B6E-F130-41F3-8956-2F790E99C6F0}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG", "src\NetTopologySuite.IO.ShapefileNG\NetTopologySuite.IO.ShapefileNG.csproj", "{54244379-0702-40E8-8773-0973B3485293}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -34,6 +36,10 @@ Global {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.Build.0 = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs b/src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs new file mode 100644 index 0000000..7f7f8b5 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs @@ -0,0 +1,36 @@ +using System; +using System.IO; +using System.Runtime.CompilerServices; + +namespace NetTopologySuite.IO +{ + internal static class GeneralIOHelpers + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void FillBufferOrThrow(Stream stream, byte[] buffer, int offset, int count) + { + // optimize for the overwhelmingly most likely path: one read does the trick. + int rd = stream.Read(buffer, offset, count); + if (rd != count) + { + FillBufferOrThrowRare(stream, buffer, offset, count, rd); + } + } + + private static void FillBufferOrThrowRare(Stream stream, byte[] buffer, int offset, int count, int prevRead) + { + while (prevRead != 0) + { + offset += prevRead; + count -= prevRead; + prevRead = stream.Read(buffer, offset, count); + if (prevRead == count) + { + return; + } + } + + throw new EndOfStreamException(); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj b/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj new file mode 100644 index 0000000..d4ffb1c --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj @@ -0,0 +1,31 @@ + + + + $(ProjectDir)..\ + netstandard2.0 + NetTopologySuite.IO + true + + + + NetTopologySuite.IO.ShapefileNG + + + + NetTopologySuite.IO.ShapefileNG + NTS - Topology Suite - Shapefile IO Libraries - Next Generation + NetTopologySuite - Team + NetTopologySuite - Team + BSD-3-Clause + This package contains several IO libraries to cope with spatial data from various sources. + NTS;Shapefile + + + + + + + + + + diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapeTypeNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapeTypeNG.cs new file mode 100644 index 0000000..f320764 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapeTypeNG.cs @@ -0,0 +1,33 @@ +namespace NetTopologySuite.IO +{ + public enum ShapeTypeNG + { + NullShape = 0, + + Point = 1, + + PolyLine = 3, + + Polygon = 5, + + MultiPoint = 8, + + PointZ = 11, + + PolyLineZ = 13, + + PolygonZ = 15, + + MultiPointZ = 18, + + PointM = 21, + + PolyLineM = 23, + + PolygonM = 25, + + MultiPointM = 28, + + MultiPatch = 31, + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs new file mode 100644 index 0000000..997f5f4 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs @@ -0,0 +1,49 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO +{ + internal class ShapefileFormatForwardOnlyReader + { + private readonly Stream _forwardOnlyReadableStream; + + private readonly byte[] _oneHundredByteBuffer = new byte[100]; + + public ShapefileFormatForwardOnlyReader(Stream forwardOnlyReadableStream) + { + _forwardOnlyReadableStream = forwardOnlyReadableStream; + } + + public ShapefileHeaderNG ReadHeader() + { + byte[] scratchBuffer = _oneHundredByteBuffer; + GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, scratchBuffer, 0, 100); + + ReadOnlySpan headerBytes = scratchBuffer; + int bigEndianFileLengthInWords = MemoryMarshal.Read(headerBytes.Slice(24, 4)); + var shapeType = MemoryMarshal.Read(headerBytes.Slice(32, 4)); + var boundingBox = MemoryMarshal.Cast(headerBytes.Slice(36)); + return new ShapefileHeaderNG(bigEndianFileLengthInWords, shapeType, boundingBox[0], boundingBox[1], boundingBox[2], boundingBox[3], boundingBox[4], boundingBox[5], boundingBox[6], boundingBox[7]); + } + + public ShapefileIndexFileRecordHeaderNG ReadIndexFileRecordHeader() + { + byte[] scratchBuffer = _oneHundredByteBuffer; + GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, scratchBuffer, 0, 8); + return MemoryMarshal.Read(scratchBuffer); + } + + public ShapefileMainFileRecordHeaderNG ReadMainFileRecordHeader() + { + byte[] scratchBuffer = _oneHundredByteBuffer; + GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, scratchBuffer, 0, 8); + return MemoryMarshal.Read(scratchBuffer); + } + + public void FillNextRecordContents(byte[] buffer, int offset, int count) + { + GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, buffer, offset, count); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs new file mode 100644 index 0000000..c627a2d --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs @@ -0,0 +1,71 @@ +using System.IO; + +namespace NetTopologySuite.IO +{ + internal sealed class ShapefileFormatSeekableReader + { + private readonly ShapefileFormatForwardOnlyReader _mainFileReader; + + private readonly Stream _seekableMainFileStream; + + private readonly ShapefileFormatForwardOnlyReader _indexFileReader; + + private readonly Stream _seekableIndexFileStream; + + private int _lastRecordIndex = -1; + + private ShapefileMainFileRecordHeaderNG _lastMainFileRecordHeader; + + public ShapefileFormatSeekableReader(Stream seekableMainFileStream, Stream seekableIndexFileStream) + { + _mainFileReader = new ShapefileFormatForwardOnlyReader(seekableMainFileStream); + _indexFileReader = new ShapefileFormatForwardOnlyReader(seekableIndexFileStream); + + _seekableMainFileStream = seekableMainFileStream; + _seekableIndexFileStream = seekableIndexFileStream; + + seekableMainFileStream.Position = 0; + MainFileHeader = _mainFileReader.ReadHeader(); + if (seekableMainFileStream.Length != MainFileHeader.FileLengthInBytes) + { + throw new InvalidDataException($"Main file stream is {seekableMainFileStream.Length} bytes long, but the header indicates that it should be {MainFileHeader.FileLengthInBytes} bytes long."); + } + + seekableIndexFileStream.Position = 0; + IndexFileHeader = _indexFileReader.ReadHeader(); + if (seekableIndexFileStream.Length != IndexFileHeader.FileLengthInBytes) + { + throw new InvalidDataException($"Index file stream is {seekableIndexFileStream.Length} bytes long, but the header indicates that it should be {IndexFileHeader.FileLengthInBytes} bytes long."); + } + + RecordCount = (int)((IndexFileHeader.FileLengthInBytes - 100) / 8); + } + + public ShapefileHeaderNG MainFileHeader { get; } + + public ShapefileHeaderNG IndexFileHeader { get; } + + public int RecordCount { get; } + + public ShapefileMainFileRecordHeaderNG GetMainFileRecordHeaderNG(int index) + { + if (index == _lastRecordIndex) + { + return _lastMainFileRecordHeader; + } + + _seekableIndexFileStream.Position = 100 + ((uint)index * 8); + var indexFileRecordHeader = _indexFileReader.ReadIndexFileRecordHeader(); + + _seekableMainFileStream.Position = indexFileRecordHeader.RecordHeaderOffsetInBytes; + var result = _mainFileReader.ReadMainFileRecordHeader(); + if (result.RecordNumber != index + 1) + { + throw new InvalidDataException($"Index file is inconsistent with the main file: index record #{index + 1} points to main file record #{result.RecordNumber}."); + } + + _lastRecordIndex = index; + return _lastMainFileRecordHeader = result; + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs new file mode 100644 index 0000000..d997727 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs @@ -0,0 +1,53 @@ +using NetTopologySuite.Geometries; + +namespace NetTopologySuite.IO +{ + public sealed class ShapefileHeaderNG + { + public ShapefileHeaderNG(uint fileLengthInBytes, ShapeTypeNG shapeType, Envelope boundingBox) + : this(fileLengthInBytes, shapeType, boundingBox.MinX, boundingBox.MinY, boundingBox.MaxX, boundingBox.MaxY, double.NaN, double.NaN, double.NaN, double.NaN) + { + } + + public ShapefileHeaderNG(uint fileLengthInBytes, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) + : this(ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(fileLengthInBytes), shapeType, minX, minY, maxX, maxY, minZ, maxZ, minM, maxM) + { + } + + internal ShapefileHeaderNG(int bigEndianFileLengthInWords, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) + { + BigEndianFileLengthInWords = bigEndianFileLengthInWords; + ShapeType = shapeType; + MinX = minX; + MinY = minY; + MaxX = maxX; + MaxY = maxY; + MinZ = minZ; + MaxZ = maxZ; + MinM = minM; + MaxM = maxM; + } + + public int BigEndianFileLengthInWords { get; } + + public uint FileLengthInBytes => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianFileLengthInWords); + + public ShapeTypeNG ShapeType { get; } + + public double MinX { get; } + + public double MinY { get; } + + public double MaxX { get; } + + public double MaxY { get; } + + public double MinZ { get; } + + public double MaxZ { get; } + + public double MinM { get; } + + public double MaxM { get; } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs new file mode 100644 index 0000000..7768a37 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs @@ -0,0 +1,24 @@ +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO +{ + [StructLayout(LayoutKind.Sequential)] + public struct ShapefileIndexFileRecordHeaderNG + { + public int BigEndianRecordHeaderOffsetInWords; + + public int BigEndianRecordContentLengthInWords; + + public uint RecordHeaderOffsetInBytes + { + get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordHeaderOffsetInWords); + set => BigEndianRecordHeaderOffsetInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); + } + + public uint RecordContentLengthInBytes + { + get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordContentLengthInWords); + set => BigEndianRecordContentLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs new file mode 100644 index 0000000..c972f1c --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs @@ -0,0 +1,25 @@ +using System.Buffers.Binary; +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO +{ + [StructLayout(LayoutKind.Sequential)] + public struct ShapefileMainFileRecordHeaderNG + { + public int BigEndianRecordNumber; + + public int BigEndianRecordContentLengthInWords; + + public int RecordNumber + { + get => ShapefilePrimitiveHelpers.SwapByteOrderIfLittleEndian(BigEndianRecordNumber); + set => BigEndianRecordNumber = ShapefilePrimitiveHelpers.SwapByteOrderIfLittleEndian(value); + } + + public uint RecordContentLengthInBytes + { + get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordContentLengthInWords); + set => BigEndianRecordContentLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs new file mode 100644 index 0000000..dff4198 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs @@ -0,0 +1,46 @@ +using System; +using System.Buffers.Binary; +using System.Runtime.CompilerServices; + +namespace NetTopologySuite.IO +{ + internal static class ShapefilePrimitiveHelpers + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int SwapByteOrderIfLittleEndian(int val) + { + if (BitConverter.IsLittleEndian) + { + val = BinaryPrimitives.ReverseEndianness(val); + } + + return val; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint BigEndianWordCountToNativeByteCount(int val) + { + val = SwapByteOrderIfLittleEndian(val); + return ((uint)val) * 2; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint BigEndianWordCountToNativeByteCount(ReadOnlySpan val) + { + return ((uint)BinaryPrimitives.ReadInt32BigEndian(val)) * 2; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int NativeByteCountToBigEndianWordCount(uint val) + { + int result = (int)(val / 2); + return SwapByteOrderIfLittleEndian(result); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void NativeByteCountToBigEndianWordCount(uint val, Span bytes) + { + BinaryPrimitives.WriteInt32BigEndian(bytes, (int)(val / 2)); + } + } +} From c5875db8f32143d29c2d24b6cb56f931531deeb6 Mon Sep 17 00:00:00 2001 From: Joe Amenta Date: Sun, 23 Aug 2020 09:46:29 -0400 Subject: [PATCH 02/17] Continue on this journey. --- NetTopologySuite.IO.ShapeFile.sln | 6 + .../{ => Internal}/GeneralIOHelpers.cs | 20 +-- .../ShapefileFormatForwardOnlyReader.cs | 6 +- .../ShapefileFormatSeekableReader.cs | 6 +- .../Internal/ShapefileFormatSpanReader.cs | 135 ++++++++++++++++++ .../Internal/ShapefileHeaderStruct.cs | 70 +++++++++ .../Internal/ShapefilePrimitiveHelpers.cs | 56 ++++++++ .../NetTopologySuite.IO.ShapefileNG.csproj | 7 + .../ShapeRecords/PointXYRecordNG.cs | 18 +++ .../ShapefileHeaderNG.cs | 48 +++---- ...derNG.cs => ShapefileIndexFileRecordNG.cs} | 8 +- .../ShapefileMainFileRecordHeaderNG.cs | 8 +- .../ShapefilePrimitiveHelpers.cs | 46 ------ .../ShapefileSpanReaderNG.cs | 52 +++++++ .../CommonHelpers.cs | 7 + ...etTopologySuite.IO.ShapefileNG.Test.csproj | 19 +++ .../ShapefileSpanReaderNGTest.cs | 25 ++++ .../TestShapefiles/points.cpg | 1 + .../TestShapefiles/points.dbf | Bin 0 -> 228 bytes .../TestShapefiles/points.prj | 1 + .../TestShapefiles/points.shp | Bin 0 -> 156 bytes .../TestShapefiles/points.shx | Bin 0 -> 116 bytes 22 files changed, 446 insertions(+), 93 deletions(-) rename src/NetTopologySuite.IO.ShapefileNG/{ => Internal}/GeneralIOHelpers.cs (66%) rename src/NetTopologySuite.IO.ShapefileNG/{ => Internal}/ShapefileFormatForwardOnlyReader.cs (90%) rename src/NetTopologySuite.IO.ShapefileNG/{ => Internal}/ShapefileFormatSeekableReader.cs (93%) create mode 100644 src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSpanReader.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileHeaderStruct.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefilePrimitiveHelpers.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs rename src/NetTopologySuite.IO.ShapefileNG/{ShapefileIndexFileRecordHeaderNG.cs => ShapefileIndexFileRecordNG.cs} (83%) delete mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/CommonHelpers.cs create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/NetTopologySuite.IO.ShapefileNG.Test.csproj create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.cpg create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.dbf create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.prj create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.shp create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.shx diff --git a/NetTopologySuite.IO.ShapeFile.sln b/NetTopologySuite.IO.ShapeFile.sln index 705285b..e0fe309 100644 --- a/NetTopologySuite.IO.ShapeFile.sln +++ b/NetTopologySuite.IO.ShapeFile.sln @@ -18,6 +18,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG", "src\NetTopologySuite.IO.ShapefileNG\NetTopologySuite.IO.ShapefileNG.csproj", "{54244379-0702-40E8-8773-0973B3485293}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG.Test", "test\NetTopologySuite.IO.ShapefileNG.Test\NetTopologySuite.IO.ShapefileNG.Test.csproj", "{7B2FB807-A99D-40E9-AE5B-4931BE2086FA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -40,6 +42,10 @@ Global {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.Build.0 = Debug|Any CPU {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.ActiveCfg = Release|Any CPU {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.Build.0 = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/GeneralIOHelpers.cs similarity index 66% rename from src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs rename to src/NetTopologySuite.IO.ShapefileNG/Internal/GeneralIOHelpers.cs index 7f7f8b5..f612fa5 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/GeneralIOHelpers.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/GeneralIOHelpers.cs @@ -2,7 +2,7 @@ using System.IO; using System.Runtime.CompilerServices; -namespace NetTopologySuite.IO +namespace NetTopologySuite.IO.Internal { internal static class GeneralIOHelpers { @@ -10,21 +10,21 @@ internal static class GeneralIOHelpers public static void FillBufferOrThrow(Stream stream, byte[] buffer, int offset, int count) { // optimize for the overwhelmingly most likely path: one read does the trick. - int rd = stream.Read(buffer, offset, count); - if (rd != count) + int bytesRead = stream.Read(buffer, offset, count); + if (bytesRead != count) { - FillBufferOrThrowRare(stream, buffer, offset, count, rd); + FillBufferOrThrowRare(stream, buffer, offset, count, bytesRead); } } - private static void FillBufferOrThrowRare(Stream stream, byte[] buffer, int offset, int count, int prevRead) + private static void FillBufferOrThrowRare(Stream stream, byte[] buffer, int offset, int count, int prevBytesRead) { - while (prevRead != 0) + while (prevBytesRead != 0) { - offset += prevRead; - count -= prevRead; - prevRead = stream.Read(buffer, offset, count); - if (prevRead == count) + offset += prevBytesRead; + count -= prevBytesRead; + prevBytesRead = stream.Read(buffer, offset, count); + if (prevBytesRead == count) { return; } diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs similarity index 90% rename from src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs rename to src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs index 997f5f4..54967e6 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatForwardOnlyReader.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs @@ -2,7 +2,7 @@ using System.IO; using System.Runtime.InteropServices; -namespace NetTopologySuite.IO +namespace NetTopologySuite.IO.Internal { internal class ShapefileFormatForwardOnlyReader { @@ -27,11 +27,11 @@ public ShapefileHeaderNG ReadHeader() return new ShapefileHeaderNG(bigEndianFileLengthInWords, shapeType, boundingBox[0], boundingBox[1], boundingBox[2], boundingBox[3], boundingBox[4], boundingBox[5], boundingBox[6], boundingBox[7]); } - public ShapefileIndexFileRecordHeaderNG ReadIndexFileRecordHeader() + public ShapefileIndexFileRecordNG ReadIndexFileRecordHeader() { byte[] scratchBuffer = _oneHundredByteBuffer; GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, scratchBuffer, 0, 8); - return MemoryMarshal.Read(scratchBuffer); + return MemoryMarshal.Read(scratchBuffer); } public ShapefileMainFileRecordHeaderNG ReadMainFileRecordHeader() diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSeekableReader.cs similarity index 93% rename from src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs rename to src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSeekableReader.cs index c627a2d..41a15da 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileFormatSeekableReader.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSeekableReader.cs @@ -1,6 +1,6 @@ using System.IO; -namespace NetTopologySuite.IO +namespace NetTopologySuite.IO.Internal { internal sealed class ShapefileFormatSeekableReader { @@ -38,7 +38,7 @@ public ShapefileFormatSeekableReader(Stream seekableMainFileStream, Stream seeka throw new InvalidDataException($"Index file stream is {seekableIndexFileStream.Length} bytes long, but the header indicates that it should be {IndexFileHeader.FileLengthInBytes} bytes long."); } - RecordCount = (int)((IndexFileHeader.FileLengthInBytes - 100) / 8); + RecordCount = (IndexFileHeader.FileLengthInBytes - 100) / 8; } public ShapefileHeaderNG MainFileHeader { get; } @@ -54,7 +54,7 @@ public ShapefileMainFileRecordHeaderNG GetMainFileRecordHeaderNG(int index) return _lastMainFileRecordHeader; } - _seekableIndexFileStream.Position = 100 + ((uint)index * 8); + _seekableIndexFileStream.Position = 100 + (index * 8); var indexFileRecordHeader = _indexFileReader.ReadIndexFileRecordHeader(); _seekableMainFileStream.Position = indexFileRecordHeader.RecordHeaderOffsetInBytes; diff --git a/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSpanReader.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSpanReader.cs new file mode 100644 index 0000000..bdbe3ef --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatSpanReader.cs @@ -0,0 +1,135 @@ +using System; +using System.IO; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO.Internal +{ + internal readonly ref struct ShapefileFormatSpanReader + { + private readonly ReadOnlySpan _mainFile; + + private readonly ReadOnlySpan _indexFile; + + public ShapefileFormatSpanReader(ReadOnlySpan mainFile, ReadOnlySpan indexFile) + { + _mainFile = mainFile; + _indexFile = indexFile; + } + + public readonly void ValidateFileStructure() + { + if (_mainFile.Length < Unsafe.SizeOf()) + { + throw new InvalidDataException("Main file must be at least 100 bytes long."); + } + + ref readonly var mainFileHeader = ref MainFileHeader; + + if (_indexFile.Length < Unsafe.SizeOf()) + { + throw new InvalidDataException("Index file must be at least 100 bytes long."); + } + + ref readonly var indexFileHeader = ref IndexFileHeader; + + // it's fine if the header indicates a SMALLER length than what we were created with, + // since that just means that the caller didn't slice off the end. not a huge deal. + if (mainFileHeader.FileLengthInBytes > _mainFile.Length) + { + throw new InvalidDataException("Main file's header thinks that the file is bigger than the size we were created with."); + } + + // avoid repeated 32 --> 64 conversions by doing this once + long mainFileLength = mainFileHeader.FileLengthInBytes; + + if (indexFileHeader.FileLengthInBytes > _indexFile.Length) + { + throw new InvalidDataException("Index file's header thinks that the file is bigger than the size we were created with."); + } + + if (indexFileHeader.FileLengthInBytes != (RecordCount * 8) + Unsafe.SizeOf()) + { + throw new InvalidDataException("Index file must contain exactly 8 bytes per record after the 100-byte header."); + } + + int nextRecordNumber = 1; + var fileShapeType = mainFileHeader.ShapeType; + foreach (ref readonly var indexRecord in MemoryMarshal.Cast(_indexFile.Slice(Unsafe.SizeOf()))) + { + // work in longs here, since invalid data could otherwise cause overflow. + long recordHeaderOffset = ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(indexRecord.BigEndianRecordHeaderOffsetInWords) * 2L; + if (recordHeaderOffset < Unsafe.SizeOf()) + { + throw new InvalidDataException("All records in the main file must begin after the 100-byte header."); + } + + long recordContentLengthInBytesFromIndex = ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(indexRecord.BigEndianRecordContentLengthInWords) * 2L; + if (recordContentLengthInBytesFromIndex < Unsafe.SizeOf()) + { + throw new InvalidDataException("All records in the main file be at least 4 bytes long."); + } + + long recordContentByteOffset = recordHeaderOffset + Unsafe.SizeOf(); + long recordEndByteOffset = recordContentByteOffset + recordContentLengthInBytesFromIndex; + if (mainFileLength < recordEndByteOffset) + { + throw new InvalidDataException("The index file identifies one or more records that would extend beyond the end of the main file."); + } + + var recordHeader = MemoryMarshal.Read(_mainFile.Slice((int)recordHeaderOffset)); + long recordContentLengthInBytesFromMainFile = ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(recordHeader.BigEndianRecordContentLengthInWords) * 2L; + if (recordContentLengthInBytesFromIndex != recordContentLengthInBytesFromMainFile) + { + throw new InvalidDataException("The index file disagrees with main file about the size of one or more records."); + } + + if (recordHeader.RecordNumber != nextRecordNumber++) + { + throw new InvalidDataException("Records in the main file are out of order."); + } + + var recordShapeType = MemoryMarshal.Read(_mainFile.Slice((int)recordContentByteOffset)); + if (recordShapeType != fileShapeType) + { + throw new InvalidDataException("Shape type for all records in the main file must match shape type from its header."); + } + } + } + + public ref readonly ShapefileHeaderStruct MainFileHeader + { + get + { + return ref Unsafe.As(ref Unsafe.AsRef(in MemoryMarshal.GetReference(_mainFile))); + } + } + + public ref readonly ShapefileHeaderStruct IndexFileHeader + { + get + { + return ref Unsafe.As(ref Unsafe.AsRef(in MemoryMarshal.GetReference(_indexFile))); + } + } + + public int RecordCount + { + get + { + return (IndexFileHeader.FileLengthInBytes - Unsafe.SizeOf()) / Unsafe.SizeOf(); + } + } + + public ReadOnlySpan GetInnerRecordContents(int recordIndex) + { + var indexRecord = MemoryMarshal.Read(_indexFile.Slice(100 + (recordIndex * 8))); + int recordContentsStart = indexRecord.RecordHeaderOffsetInBytes + Unsafe.SizeOf(); + int recordContentLength = indexRecord.RecordContentLengthInBytes; + var recordContents = _mainFile.Slice(recordContentsStart, recordContentLength); + + // "inner" record contents = everything after the ShapeType + return recordContents.Slice(Unsafe.SizeOf()); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileHeaderStruct.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileHeaderStruct.cs new file mode 100644 index 0000000..7e0b3db --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileHeaderStruct.cs @@ -0,0 +1,70 @@ +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO.Internal +{ + [StructLayout(LayoutKind.Explicit, Size = 100, Pack = 1)] + internal struct ShapefileHeaderStruct + { + private static readonly int BigEndianFileCode = ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(9994); + + [FieldOffset(0)] + private readonly int _fileCode; + + [FieldOffset(28)] + private readonly int _version; + + [FieldOffset(24)] + public int BigEndianFileLengthInWords; + + [FieldOffset(32)] + public ShapeTypeNG ShapeType; + + [FieldOffset(36)] + public double MinX; + + [FieldOffset(44)] + public double MinY; + + [FieldOffset(52)] + public double MaxX; + + [FieldOffset(60)] + public double MaxY; + + [FieldOffset(68)] + public double MinZ; + + [FieldOffset(76)] + public double MaxZ; + + [FieldOffset(84)] + public double MinM; + + [FieldOffset(92)] + public double MaxM; + + public ShapefileHeaderStruct(int bigEndianFileLengthInWords, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) + { + this = default; + _fileCode = BigEndianFileCode; + _version = 1000; + + BigEndianFileLengthInWords = bigEndianFileLengthInWords; + ShapeType = shapeType; + MinX = minX; + MinY = minY; + MaxX = maxX; + MaxY = maxY; + MinZ = minZ; + MaxZ = maxZ; + MinM = minM; + MaxM = maxM; + } + + public int FileLengthInBytes + { + get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianFileLengthInWords); + set => BigEndianFileLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); + } + } +} \ No newline at end of file diff --git a/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefilePrimitiveHelpers.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefilePrimitiveHelpers.cs new file mode 100644 index 0000000..5d5dd0b --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefilePrimitiveHelpers.cs @@ -0,0 +1,56 @@ +using System; +using System.Buffers.Binary; +using System.Runtime.CompilerServices; + +namespace NetTopologySuite.IO.Internal +{ + internal static class ShapefilePrimitiveHelpers + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void ValidateLittleEndianMachine() + { + if (!BitConverter.IsLittleEndian) + { + ThrowForBigEndianMachine(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static T SwapByteOrderOnLittleEndianMachines(T val) + where T : unmanaged + { + ValidateLittleEndianMachine(); + if (typeof(T) == typeof(int) || typeof(T) == typeof(ShapeTypeNG)) + { + ref int s32 = ref Unsafe.As(ref val); + s32 = BinaryPrimitives.ReverseEndianness(s32); + } + else if (typeof(T) == typeof(long) || typeof(T) == typeof(double)) + { + ref long s64 = ref Unsafe.As(ref val); + s64 = BinaryPrimitives.ReverseEndianness(s64); + } + + return val; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int BigEndianWordCountToNativeByteCount(int val) + { + val = SwapByteOrderOnLittleEndianMachines(val); + return checked(val * 2); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int NativeByteCountToBigEndianWordCount(int val) + { + return SwapByteOrderOnLittleEndianMachines(val / 2); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private static void ThrowForBigEndianMachine() + { + throw new NotImplementedException("Support for big-endian machine architectures has not yet been implemented."); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj b/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj index d4ffb1c..4d03d74 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj +++ b/src/NetTopologySuite.IO.ShapefileNG/NetTopologySuite.IO.ShapefileNG.csproj @@ -5,6 +5,13 @@ netstandard2.0 NetTopologySuite.IO true + + + 8.0 + + + CS1591 diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs new file mode 100644 index 0000000..a26b61e --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs @@ -0,0 +1,18 @@ +using System.Runtime.InteropServices; + +namespace NetTopologySuite.IO.ShapeRecords +{ + [StructLayout(LayoutKind.Sequential)] + public struct PointXYRecordNG + { + public double X; + + public double Y; + + public PointXYRecordNG(double x, double y) + { + X = x; + Y = y; + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs index d997727..547e5b4 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileHeaderNG.cs @@ -2,52 +2,50 @@ namespace NetTopologySuite.IO { + using Internal; + public sealed class ShapefileHeaderNG { - public ShapefileHeaderNG(uint fileLengthInBytes, ShapeTypeNG shapeType, Envelope boundingBox) + private ShapefileHeaderStruct _data; + + public ShapefileHeaderNG(int fileLengthInBytes, ShapeTypeNG shapeType, Envelope boundingBox) : this(fileLengthInBytes, shapeType, boundingBox.MinX, boundingBox.MinY, boundingBox.MaxX, boundingBox.MaxY, double.NaN, double.NaN, double.NaN, double.NaN) { } - public ShapefileHeaderNG(uint fileLengthInBytes, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) - : this(ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(fileLengthInBytes), shapeType, minX, minY, maxX, maxY, minZ, maxZ, minM, maxM) + public ShapefileHeaderNG(int fileLengthInBytes, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) { + int bigEndianFileLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(fileLengthInBytes); + _data = new ShapefileHeaderStruct(bigEndianFileLengthInWords, shapeType, minX, minY, maxX, maxY, minZ, maxZ, minM, maxM); } - internal ShapefileHeaderNG(int bigEndianFileLengthInWords, ShapeTypeNG shapeType, double minX, double minY, double maxX, double maxY, double minZ, double maxZ, double minM, double maxM) + internal ShapefileHeaderNG(in ShapefileHeaderStruct data) { - BigEndianFileLengthInWords = bigEndianFileLengthInWords; - ShapeType = shapeType; - MinX = minX; - MinY = minY; - MaxX = maxX; - MaxY = maxY; - MinZ = minZ; - MaxZ = maxZ; - MinM = minM; - MaxM = maxM; + _data = data; } - public int BigEndianFileLengthInWords { get; } + public ref int BigEndianFileLengthInWords => ref _data.BigEndianFileLengthInWords; + + public int FileLengthInBytes => _data.FileLengthInBytes; - public uint FileLengthInBytes => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianFileLengthInWords); + public ref ShapeTypeNG ShapeType => ref _data.ShapeType; - public ShapeTypeNG ShapeType { get; } + public ref double MinX => ref _data.MinX; - public double MinX { get; } + public ref double MinY => ref _data.MinY; - public double MinY { get; } + public ref double MaxX => ref _data.MaxX; - public double MaxX { get; } + public ref double MaxY => ref _data.MaxY; - public double MaxY { get; } + public ref double MinZ => ref _data.MinZ; - public double MinZ { get; } + public ref double MaxZ => ref _data.MaxZ; - public double MaxZ { get; } + public ref double MinM => ref _data.MinM; - public double MinM { get; } + public ref double MaxM => ref _data.MaxM; - public double MaxM { get; } + internal ref ShapefileHeaderStruct Data => ref _data; } } diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordNG.cs similarity index 83% rename from src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs rename to src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordNG.cs index 7768a37..e661b14 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordHeaderNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileIndexFileRecordNG.cs @@ -2,20 +2,22 @@ namespace NetTopologySuite.IO { + using Internal; + [StructLayout(LayoutKind.Sequential)] - public struct ShapefileIndexFileRecordHeaderNG + public struct ShapefileIndexFileRecordNG { public int BigEndianRecordHeaderOffsetInWords; public int BigEndianRecordContentLengthInWords; - public uint RecordHeaderOffsetInBytes + public int RecordHeaderOffsetInBytes { get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordHeaderOffsetInWords); set => BigEndianRecordHeaderOffsetInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); } - public uint RecordContentLengthInBytes + public int RecordContentLengthInBytes { get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordContentLengthInWords); set => BigEndianRecordContentLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs index c972f1c..51868e0 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileMainFileRecordHeaderNG.cs @@ -3,6 +3,8 @@ namespace NetTopologySuite.IO { + using Internal; + [StructLayout(LayoutKind.Sequential)] public struct ShapefileMainFileRecordHeaderNG { @@ -12,11 +14,11 @@ public struct ShapefileMainFileRecordHeaderNG public int RecordNumber { - get => ShapefilePrimitiveHelpers.SwapByteOrderIfLittleEndian(BigEndianRecordNumber); - set => BigEndianRecordNumber = ShapefilePrimitiveHelpers.SwapByteOrderIfLittleEndian(value); + get => ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(BigEndianRecordNumber); + set => BigEndianRecordNumber = ShapefilePrimitiveHelpers.SwapByteOrderOnLittleEndianMachines(value); } - public uint RecordContentLengthInBytes + public int RecordContentLengthInBytes { get => ShapefilePrimitiveHelpers.BigEndianWordCountToNativeByteCount(BigEndianRecordContentLengthInWords); set => BigEndianRecordContentLengthInWords = ShapefilePrimitiveHelpers.NativeByteCountToBigEndianWordCount(value); diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs deleted file mode 100644 index dff4198..0000000 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefilePrimitiveHelpers.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Buffers.Binary; -using System.Runtime.CompilerServices; - -namespace NetTopologySuite.IO -{ - internal static class ShapefilePrimitiveHelpers - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int SwapByteOrderIfLittleEndian(int val) - { - if (BitConverter.IsLittleEndian) - { - val = BinaryPrimitives.ReverseEndianness(val); - } - - return val; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint BigEndianWordCountToNativeByteCount(int val) - { - val = SwapByteOrderIfLittleEndian(val); - return ((uint)val) * 2; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static uint BigEndianWordCountToNativeByteCount(ReadOnlySpan val) - { - return ((uint)BinaryPrimitives.ReadInt32BigEndian(val)) * 2; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int NativeByteCountToBigEndianWordCount(uint val) - { - int result = (int)(val / 2); - return SwapByteOrderIfLittleEndian(result); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NativeByteCountToBigEndianWordCount(uint val, Span bytes) - { - BinaryPrimitives.WriteInt32BigEndian(bytes, (int)(val / 2)); - } - } -} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs new file mode 100644 index 0000000..da521e7 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs @@ -0,0 +1,52 @@ +using System; + +namespace NetTopologySuite.IO +{ + using System.Runtime.CompilerServices; + using System.Runtime.InteropServices; + using Internal; + using NetTopologySuite.IO.ShapeRecords; + + public ref struct ShapefileSpanReaderNG + { + private readonly ShapefileFormatSpanReader _innerReader; + + public ShapefileSpanReaderNG(ReadOnlySpan mainFile, ReadOnlySpan indexFile) + { + _innerReader = new ShapefileFormatSpanReader(mainFile, indexFile); + _innerReader.ValidateFileStructure(); + RecordCount = _innerReader.RecordCount; + } + + public int RecordCount { get; } + + public ShapeTypeNG ShapeType => _innerReader.MainFileHeader.ShapeType; + + public PointXYRecordNG GetPointXYRecord(int recordIndex) + { + if ((uint)recordIndex >= (uint)RecordCount) + { + ThrowArgumentOutOfRangeExceptionForRecordIndex(); + } + + if (ShapeType != ShapeTypeNG.Point) + { + ThrowInvalidOperationExceptionForShapeTypeMismatch(); + } + + return MemoryMarshal.Read(_innerReader.GetInnerRecordContents(recordIndex)); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private static void ThrowArgumentOutOfRangeExceptionForRecordIndex() + { + throw new ArgumentOutOfRangeException("recordIndex", "Must be non-negative and less than RecordCount."); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + private void ThrowInvalidOperationExceptionForShapeTypeMismatch() + { + throw new InvalidOperationException($"This method does not support shapefiles whose ShapeType is {ShapeType}."); + } + } +} \ No newline at end of file diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/CommonHelpers.cs b/test/NetTopologySuite.IO.ShapefileNG.Test/CommonHelpers.cs new file mode 100644 index 0000000..acbe7cd --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/CommonHelpers.cs @@ -0,0 +1,7 @@ +using System; +using System.IO; + +internal sealed class CommonHelpers +{ + public static readonly string TestShapefilesDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestShapefiles"); +} diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/NetTopologySuite.IO.ShapefileNG.Test.csproj b/test/NetTopologySuite.IO.ShapefileNG.Test/NetTopologySuite.IO.ShapefileNG.Test.csproj new file mode 100644 index 0000000..d49df2b --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/NetTopologySuite.IO.ShapefileNG.Test.csproj @@ -0,0 +1,19 @@ + + + + netcoreapp3.1 + + true + + NetTopologySuite.IO + + + + + + + + + + + diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs b/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs new file mode 100644 index 0000000..ce9e609 --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs @@ -0,0 +1,25 @@ +using System.IO; +using NUnit.Framework; + +namespace NetTopologySuite.IO +{ + public sealed class ShapefileSpanReaderNGTest + { + [Test] + public void BasicTest() + { + byte[] mainFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "points.shp")); + byte[] indexFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "points.shx")); + var reader = new ShapefileSpanReaderNG(mainFile, indexFile); + Assert.That(reader.RecordCount, Is.EqualTo(2)); + + var dodgePark = reader.GetPointXYRecord(0); + Assert.That(dodgePark.X, Is.EqualTo(-83.01107)); + Assert.That(dodgePark.Y, Is.EqualTo(42.59286)); + + var joeLouis = reader.GetPointXYRecord(1); + Assert.That(joeLouis.X, Is.EqualTo(-83.05270)); + Assert.That(joeLouis.Y, Is.EqualTo(42.32529)); + } + } +} diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.cpg b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.dbf b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.dbf new file mode 100644 index 0000000000000000000000000000000000000000..d553573327d323f27a463985da376c6830fb5288 GIT binary patch literal 228 zcmZRs;1FkGU|?`$2n3Rtz|Yaw6)Nfsq65&B@G7|Er=+JU1SA$^D^Le`<)xRV<|R^Ws1yK2y&Vhy literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.prj b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.prj new file mode 100644 index 0000000..f45cbad --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.prj @@ -0,0 +1 @@ +GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.shp b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/points.shp new file mode 100644 index 0000000000000000000000000000000000000000..843832c24523e13402077506a595cb0860cf90f1 GIT binary patch literal 156 zcmZQzQ0HR64*Xs)GcYg$ Date: Tue, 1 Sep 2020 08:56:53 -0400 Subject: [PATCH 03/17] MultiPoint records --- .../ShapeRecords/MultiPointXYRecordNG.cs | 26 +++++++++++++++ .../ShapeRecords/PointXYRecordNG.cs | 19 +++++++++-- .../ShapefileSpanReaderNG.cs | 25 ++++++++++++-- .../ShapefileSpanReaderNGTest.cs | 31 +++++++++++++++++- .../TestShapefiles/multipoints.cpg | 1 + .../TestShapefiles/multipoints.dbf | Bin 0 -> 88 bytes .../TestShapefiles/multipoints.prj | 1 + .../TestShapefiles/multipoints.shp | Bin 0 -> 388 bytes .../TestShapefiles/multipoints.shx | Bin 0 -> 116 bytes 9 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.cpg create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.dbf create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.prj create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.shp create mode 100644 test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.shx diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs new file mode 100644 index 0000000..77d72d2 --- /dev/null +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs @@ -0,0 +1,26 @@ +using System; + +namespace NetTopologySuite.IO.ShapeRecords +{ + public readonly ref struct MultiPointXYRecordNG + { + public readonly double MinX; + + public readonly double MinY; + + public readonly double MaxX; + + public readonly double MaxY; + + public readonly ReadOnlySpan Points; + + public MultiPointXYRecordNG(double minX, double minY, double maxX, double maxY, ReadOnlySpan points) + { + MinX = minX; + MinY = minY; + MaxX = maxX; + MaxY = maxY; + Points = points; + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs index a26b61e..0b2dfa4 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/PointXYRecordNG.cs @@ -1,18 +1,31 @@ +using System; using System.Runtime.InteropServices; namespace NetTopologySuite.IO.ShapeRecords { [StructLayout(LayoutKind.Sequential)] - public struct PointXYRecordNG + public readonly struct PointXYRecordNG : IEquatable { - public double X; + public readonly double X; - public double Y; + public readonly double Y; public PointXYRecordNG(double x, double y) { X = x; Y = y; } + + public override bool Equals(object obj) + => obj is PointXYRecordNG other && Equals(other); + + public bool Equals(PointXYRecordNG other) + => X.Equals(other.X) && Y.Equals(other.Y); + + public override int GetHashCode() + => (X, Y).GetHashCode(); + + public override string ToString() + => $"({X}, {Y})"; } } diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs index da521e7..18e78b8 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapefileSpanReaderNG.cs @@ -1,11 +1,11 @@ using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; namespace NetTopologySuite.IO { - using System.Runtime.CompilerServices; - using System.Runtime.InteropServices; using Internal; - using NetTopologySuite.IO.ShapeRecords; + using ShapeRecords; public ref struct ShapefileSpanReaderNG { @@ -37,6 +37,25 @@ public PointXYRecordNG GetPointXYRecord(int recordIndex) return MemoryMarshal.Read(_innerReader.GetInnerRecordContents(recordIndex)); } + public MultiPointXYRecordNG GetMultiPointXYRecord(int recordIndex) + { + if ((uint)recordIndex >= (uint)RecordCount) + { + ThrowArgumentOutOfRangeExceptionForRecordIndex(); + } + + if (ShapeType != ShapeTypeNG.MultiPoint) + { + ThrowInvalidOperationExceptionForShapeTypeMismatch(); + } + + var recordContents = _innerReader.GetInnerRecordContents(recordIndex); + var bbox = MemoryMarshal.Cast(recordContents.Slice(0, 32)); + int numPoints = MemoryMarshal.Read(recordContents.Slice(32, 4)); + var points = MemoryMarshal.Cast(recordContents.Slice(36, numPoints * Unsafe.SizeOf())); + return new MultiPointXYRecordNG(bbox[0], bbox[1], bbox[2], bbox[3], points); + } + [MethodImpl(MethodImplOptions.NoInlining)] private static void ThrowArgumentOutOfRangeExceptionForRecordIndex() { diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs b/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs index ce9e609..b120c53 100644 --- a/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/ShapefileSpanReaderNGTest.cs @@ -1,4 +1,6 @@ +using System; using System.IO; +using NetTopologySuite.IO.ShapeRecords; using NUnit.Framework; namespace NetTopologySuite.IO @@ -6,7 +8,7 @@ namespace NetTopologySuite.IO public sealed class ShapefileSpanReaderNGTest { [Test] - public void BasicTest() + public void BasicPointsTest() { byte[] mainFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "points.shp")); byte[] indexFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "points.shx")); @@ -21,5 +23,32 @@ public void BasicTest() Assert.That(joeLouis.X, Is.EqualTo(-83.05270)); Assert.That(joeLouis.Y, Is.EqualTo(42.32529)); } + + [Test] + public void BasicMultiPointsTest() + { + byte[] mainFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "multipoints.shp")); + byte[] indexFile = File.ReadAllBytes(Path.Combine(CommonHelpers.TestShapefilesDirectory, "multipoints.shx")); + var reader = new ShapefileSpanReaderNG(mainFile, indexFile); + Assert.That(reader.RecordCount, Is.EqualTo(2)); + + var mp1 = reader.GetMultiPointXYRecord(0); + Assert.That(mp1.Points.Length, Is.EqualTo(6)); + Assert.That(mp1.Points[0], Is.EqualTo(new PointXYRecordNG(-83.163443, 42.462961))); + Assert.That(mp1.Points[1], Is.EqualTo(new PointXYRecordNG(-83.149998, 42.465838))); + Assert.That(mp1.Points[2], Is.EqualTo(new PointXYRecordNG(-83.152076, 42.457263))); + Assert.That(mp1.Points[3], Is.EqualTo(new PointXYRecordNG(-83.168934, 42.465194))); + Assert.That(mp1.Points[4], Is.EqualTo(new PointXYRecordNG(-83.170986, 42.457793))); + Assert.That(mp1.Points[5], Is.EqualTo(new PointXYRecordNG(-83.180223, 42.465100))); + + var mp2 = reader.GetMultiPointXYRecord(1); + Assert.That(mp2.Points.Length, Is.EqualTo(6)); + Assert.That(mp2.Points[0], Is.EqualTo(new PointXYRecordNG(-83.155848, 42.466008))); + Assert.That(mp2.Points[1], Is.EqualTo(new PointXYRecordNG(-83.162570, 42.459781))); + Assert.That(mp2.Points[2], Is.EqualTo(new PointXYRecordNG(-83.163186, 42.466671))); + Assert.That(mp2.Points[3], Is.EqualTo(new PointXYRecordNG(-83.168061, 42.460689))); + Assert.That(mp2.Points[4], Is.EqualTo(new PointXYRecordNG(-83.151307, 42.462658))); + Assert.That(mp2.Points[5], Is.EqualTo(new PointXYRecordNG(-83.142532, 42.460462))); + } } } diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.cpg b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.dbf b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.dbf new file mode 100644 index 0000000000000000000000000000000000000000..210939e183a4ab2fbfe12dab5056ecea3862e9c8 GIT binary patch literal 88 ncmZRs;ACWCU|?`$;0BVIATtFn<_BVN!MP9yuYwjFATgx?uAv2} literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.prj b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.prj new file mode 100644 index 0000000..f45cbad --- /dev/null +++ b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.prj @@ -0,0 +1 @@ +GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] \ No newline at end of file diff --git a/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.shp b/test/NetTopologySuite.IO.ShapefileNG.Test/TestShapefiles/multipoints.shp new file mode 100644 index 0000000000000000000000000000000000000000..735545b3f2bcd8e2dc907e39ee64f447526b9a99 GIT binary patch literal 388 zcmZQzQ0HR64i3FwW?uuyuh8%cXC;DKwwW|Ym z?I@y*K%NUWvrfvIO`Hid>+9V3DGPvRu>ln>`>^0<>8X$d>6(##PCzkqHCYRO&e;vr z19Q(>@7@dNf$A@)%2ag&)$eL?&i@GHTd!vQHUsEhnEU%MMG#v!0 zwbh&~bqlDrdqt-mvfn`N$vpWu^C!^0plkVR%YgbH2Q&1fBk7sowQ+GFkPizFn3)a% hdAGj<&HSa=$Gje>|Mc9M2^K*8Fgxno%(FiL Date: Sun, 21 Feb 2021 11:05:39 +0100 Subject: [PATCH 04/17] Redo everything, fix #48 --- .editorconfig | 6 +- .gitignore | 2 + NetTopologySuite.IO.Esri.sln | 207 +++ NetTopologySuite.IO.ShapeFile.sln | 56 - .../Buffers/ArrayBuffer.cs | 36 + .../Buffers/BinaryBuffer.cs | 132 ++ .../Buffers/BinaryBufferReader.cs | 323 +++++ .../Buffers/BinaryBufferWriter.cs | 214 +++ src/NetTopologySuite.IO.Esri.Core/Dbf/Dbf.cs | 22 + .../Dbf/DbfBinaryExtensions.cs | 165 +++ .../Dbf/DbfEncoding.cs | 149 ++ .../Dbf/DbfReader.cs | 296 ++++ .../Dbf/DbfType.cs | 46 + .../Dbf/DbfWriter.cs | 207 +++ .../Dbf/Fields/DbfCharacterField.cs | 83 ++ .../Dbf/Fields/DbfDateField.cs | 81 ++ .../Dbf/Fields/DbfField.cs | 176 +++ .../Dbf/Fields/DbfFieldCollection.cs | 106 ++ .../Dbf/Fields/DbfFloatField.cs | 86 ++ .../Dbf/Fields/DbfLogicalField.cs | 83 ++ .../Dbf/Fields/DbfNumericField.cs | 231 +++ .../NetTopologySuite.IO.Esri.Core.csproj | 18 + .../Primitives/ByteExtensions.cs | 40 + .../Primitives/ManagedDisposable.cs | 90 ++ src/NetTopologySuite.IO.Esri.Core/README.md | 267 ++++ .../ShapeType.cs | 247 ++++ .../Shapefile.cs | 47 + .../Readers/ShapefileMultiPartReader.cs | 31 + .../Readers/ShapefileMultiPointReader.cs | 35 + .../Shapefile/Readers/ShapefilePointReader.cs | 95 ++ .../Shapefile/Readers/ShapefileReader.cs | 257 ++++ .../Shapefile/ShapefileFeature.cs | 66 + .../Writers/ShapefileMultiPartWriter.cs | 35 + .../Writers/ShapefileMultiPointWriter.cs | 37 + .../Shapefile/Writers/ShapefilePointWriter.cs | 75 + .../Shapefile/Writers/ShapefileWriter.cs | 183 +++ .../ShapefileException.cs | 36 + .../Shp/Readers/ShpMultiPartReader.cs | 33 + .../Shp/Readers/ShpMultiPointReader.cs | 31 + .../Shp/Readers/ShpPointReader.cs | 36 + .../Shp/Readers/ShpReader.cs | 180 +++ .../Shp/ShpBinaryExtensions.cs | 345 +++++ .../Shp/ShpBoundingBox.cs | 156 ++ .../Shp/ShpCoordinateExtensions.cs | 78 + .../Shp/ShpCoordinates.cs | 211 +++ .../Shp/ShpShapeBuilder.cs | 371 +++++ .../Shp/Writers/ShpMultiPartWriter.cs | 40 + .../Shp/Writers/ShpMultiPointWriter.cs | 37 + .../Shp/Writers/ShpPointWriter.cs | 47 + .../Shp/Writers/ShpWriter.cs | 129 ++ .../Shx/IO/ShxReader.cs | 12 + .../Shx/IO/ShxWriter.cs | 10 + .../Shx/ShxBinary.cs | 60 + src/NetTopologySuite.IO.Esri.Core/dBASE.md | 93 ++ src/NetTopologySuite.IO.Esri.Core/dBASE.png | Bin 0 -> 20784 bytes src/NetTopologySuite.IO.Esri/AssemblyInfo.cs | 12 + .../Extensions/FeatureExtensions.cs | 215 +++ .../Extensions/ShpExtensions.cs | 120 ++ .../NetTopologySuite.IO.Esri.csproj | 38 + src/NetTopologySuite.IO.Esri/README.md | 66 + .../Readers/ShapefileMultiPointReader.cs | 77 + .../Readers/ShapefilePointReader.cs | 71 + .../Readers/ShapefilePolyLineReader.cs | 84 ++ .../Readers/ShapefilePolygonReader.cs | 168 +++ .../Readers/ShapefileReader.cs | 280 ++++ .../ShapeFile.Extended/DbaseEnumerator.cs | 53 + .../ShapeFile.Extended/DbaseReader.cs | 218 +++ .../Entities/IShapefileFeature.cs | 9 + .../Entities/ShapefileFeature.cs | 75 + .../ShapeFile.Extended/ShapeDataReader.cs | 195 +++ .../ShapeFile.Extended/ShapeReader.cs | 203 +++ .../Writers/ShapefileMultiPointWriter.cs | 54 + .../Writers/ShapefilePointWriter.cs | 51 + .../Writers/ShapefilePolyLineWriter.cs | 66 + .../Writers/ShapefilePolygonWriter.cs | 77 + .../Writers/ShapefileWriter.cs | 166 +++ .../ShapefileFormatForwardOnlyReader.cs | 6 +- .../ShapeRecords/MultiPointXYRecordNG.cs | 6 +- .../Attributes/AttributesTest.cs | 155 ++ .../CommonHelpers.cs | 7 + .../DbfDateTest.cs | 57 + .../Features/UseOfIndexAndPreparedGeometry.cs | 240 ++++ .../Geometries/LineStringSamples.cs | 156 ++ .../Geometries/MultiPointSamples.cs | 94 ++ .../Geometries/PointSamples.cs | 143 ++ .../Geometries/PolygonSamples.cs | 170 +++ .../Issue123Test.cs | 61 + .../NetTopologySuite.IO.Esri.Test/Issue161.cs | 29 + .../Issue173Fixture.cs | 48 + .../NetTopologySuite.IO.Esri.Test/Issue174.cs | 35 + .../Issue178Fixture.cs | 47 + .../Issue36Tests.cs | 74 + .../Issue46Fixture.cs | 36 + .../Issue4Fixture.cs | 89 ++ .../Issue60Fixture.cs | 42 + .../NetTopologySuite.IO.Esri.Test.csproj | 33 + .../NtsIssueNumberAttribute.cs | 19 + .../ShapeFile.Extended/DbaseReaderTests.cs | 292 ++++ .../ShapeFile.Extended/HelperMethods.cs | 71 + .../ShapeDataReaderTests.cs | 656 +++++++++ .../ShapeFile.Extended/ShapeReaderTests.cs | 1254 +++++++++++++++++ .../ShapefileDataWriterTests.cs | 90 ++ .../ShapeFile.Extended/TempFileWriter.cs | 37 + .../ShapeFileDataReaderTest.cs | 263 ++++ .../ShapeFileDataWriterTest.cs | 743 ++++++++++ .../ShapeFileEncodingTest.cs | 53 + .../ShapeFileInvalidHeaderTest.cs | 34 + .../ShapeFileIssueNumberAttribute.cs | 20 + .../ShapeRead.cs | 151 ++ .../TestShapefiles/AllNulls.dbf | Bin 0 -> 493 bytes .../TestShapefiles/AllNulls.shp | Bin 0 -> 220 bytes .../TestShapefiles/CA_Cable_region.dbf | Bin 0 -> 31421 bytes .../TestShapefiles/CA_Cable_region.shp | Bin 0 -> 804672 bytes .../TestShapefiles/EmptyShapeFile.shp | Bin 0 -> 100 bytes .../TestShapefiles/Issue167.shp | Bin 0 -> 70700 bytes .../TestShapefiles/Sept_polygones.dbf | Bin 0 -> 7286 bytes .../TestShapefiles/Sept_polygones.shp | Bin 0 -> 4528 bytes .../TestShapefiles/US_DMA_region.dbf | Bin 0 -> 195 bytes .../TestShapefiles/US_DMA_region.shp | Bin 0 -> 52008 bytes .../TestShapefiles/UnifiedChecksMaterial.dbf | Bin 0 -> 227 bytes .../TestShapefiles/UnifiedChecksMaterial.shp | Bin 0 -> 356 bytes .../UnifiedChecksMaterialNullAtEnd.shp | Bin 0 -> 368 bytes .../UnifiedChecksMaterialNullAtStart.shp | Bin 0 -> 368 bytes .../UnifiedChecksMaterialNullInMiddle.shp | Bin 0 -> 368 bytes .../TestShapefiles/Victoria North.dbf | Bin 0 -> 1530 bytes .../TestShapefiles/Victoria North.shp | Bin 0 -> 580 bytes .../TestShapefiles/Victoria North.shx | Bin 0 -> 116 bytes .../TestShapefiles/Volume2.shp | Bin 0 -> 91332 bytes .../TestShapefiles/afvalbakken.dbf | Bin 0 -> 1554 bytes .../TestShapefiles/afvalbakken.shp | Bin 0 -> 3636 bytes .../TestShapefiles/chinese_encoding.dbf | Bin 0 -> 482058 bytes .../TestShapefiles/chinese_encoding.shp | Bin 0 -> 644548 bytes .../TestShapefiles/chinese_encoding.shx | Bin 0 -> 724 bytes .../christchurch-canterbury-h.shp | 592 ++++++++ .../TestShapefiles/crustal_test.dbf | Bin 0 -> 6187 bytes .../TestShapefiles/crustal_test.shp | Bin 0 -> 6812 bytes .../TestShapefiles/crustal_test_bugged.dbf | Bin 0 -> 5965 bytes .../TestShapefiles/crustal_test_bugged.shp | Bin 0 -> 6812 bytes .../TestShapefiles/date.dbf | Bin 0 -> 115 bytes .../TestShapefiles/error_union.shp | Bin 0 -> 716172 bytes .../TestShapefiles/line_ed50_geo.dbf | Bin 0 -> 431 bytes .../TestShapefiles/line_ed50_geo.shp | Bin 0 -> 372 bytes .../TestShapefiles/line_ed50_utm36.shp | Bin 0 -> 388 bytes .../TestShapefiles/line_wgs84_geo.shp | Bin 0 -> 372 bytes .../TestShapefiles/point_ed50_geo.dbf | Bin 0 -> 550 bytes .../TestShapefiles/point_ed50_geo.shp | Bin 0 -> 184 bytes .../polygon intersecting line.shp | Bin 0 -> 356 bytes .../TestShapefiles/polygon_ed50_geo.shp | Bin 0 -> 404 bytes .../TestShapefiles/polygon_wgs84_geo.shp | Bin 0 -> 404 bytes .../TestShapefiles/shape_PointZM.shp | Bin 0 -> 232 bytes .../TestShapefiles/shape_pointM.shp | Bin 0 -> 244 bytes .../shape_pointZM_MissingM values.shp | Bin 0 -> 216 bytes .../TestShapefiles/tnp_pol.shp | Bin 0 -> 876 bytes .../TestShapefiles/with_M.dbf | Bin 0 -> 2573 bytes .../TestShapefiles/with_M.shp | Bin 0 -> 304324 bytes .../Utils/Utils.cs | 30 + .../Various/CascadedPolygonUnionFixture.cs | 42 + .../Various/GraphBuilder2.cs | 304 ++++ .../Various/GraphBuilder2Test.cs | 402 ++++++ .../Various/NormalizeTest.cs | 78 + .../Various/PathFinder.cs | 291 ++++ .../Various/PathFinderTest.cs | 182 +++ .../Various/UnionAggregateTest.cs | 179 +++ .../WKTReaderTests.cs | 26 + .../App.config | 6 + ...etTopologySuite.IO.Esri.TestConsole.csproj | 86 ++ .../Program.cs | 128 ++ .../Properties/AssemblyInfo.cs | 36 + .../Samples/CoreReadDbf.cs | 34 + .../Samples/CoreReadShapefile1.cs | 38 + .../Samples/CoreReadShapefile2.cs | 41 + .../Samples/CoreReadShp.cs | 29 + .../Samples/CoreWriteShapefile1.cs | 59 + .../Samples/CoreWriteShapefile2.cs | 49 + .../Samples/NtsReadShapefile.cs | 29 + .../Samples/NtsWriteShapefile.cs | 43 + .../Tests/ArcMapShapefilesTest.cs | 33 + .../Tests/CopyArcMapFilesTest.cs | 151 ++ .../Tests/CreateShapefileTest.cs | 47 + .../Tests/DbaseRreaderTest.cs | 32 + .../Tests/ReadArcMapFilesTest.cs | 18 + .../Tests/ShapeFileReaderTest.cs | 28 + .../Tests/Test.cs | 211 +++ test/TestData/TestData.mxd | Bin 0 -> 1202176 bytes test/TestData/arcmap/shp-copy/fields_utf8.cpg | 1 + test/TestData/arcmap/shp-copy/fields_utf8.dbf | Bin 0 -> 530 bytes test/TestData/arcmap/shp-copy/fields_utf8.shp | Bin 0 -> 212 bytes test/TestData/arcmap/shp-copy/fields_utf8.shx | Bin 0 -> 132 bytes test/TestData/arcmap/shp-copy/multipoint.cpg | 1 + test/TestData/arcmap/shp-copy/multipoint.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/multipoint.shp | Bin 0 -> 452 bytes test/TestData/arcmap/shp-copy/multipoint.shx | Bin 0 -> 116 bytes .../TestData/arcmap/shp-copy/multipoint_m.cpg | 1 + .../TestData/arcmap/shp-copy/multipoint_m.dbf | Bin 0 -> 80 bytes .../TestData/arcmap/shp-copy/multipoint_m.shp | Bin 0 -> 612 bytes .../TestData/arcmap/shp-copy/multipoint_m.shx | Bin 0 -> 116 bytes .../arcmap/shp-copy/multipoint_zm.cpg | 1 + .../arcmap/shp-copy/multipoint_zm.dbf | Bin 0 -> 80 bytes .../arcmap/shp-copy/multipoint_zm.shp | Bin 0 -> 772 bytes .../arcmap/shp-copy/multipoint_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/point.cpg | 1 + test/TestData/arcmap/shp-copy/point.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp-copy/point.shp | Bin 0 -> 548 bytes test/TestData/arcmap/shp-copy/point.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp-copy/point_m.cpg | 1 + test/TestData/arcmap/shp-copy/point_m.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp-copy/point_m.shp | Bin 0 -> 676 bytes test/TestData/arcmap/shp-copy/point_m.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp-copy/point_zm.cpg | 1 + test/TestData/arcmap/shp-copy/point_zm.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp-copy/point_zm.shp | Bin 0 -> 804 bytes test/TestData/arcmap/shp-copy/point_zm.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp-copy/polygon.cpg | 1 + test/TestData/arcmap/shp-copy/polygon.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/polygon.prj | 1 + test/TestData/arcmap/shp-copy/polygon.shp | Bin 0 -> 560 bytes test/TestData/arcmap/shp-copy/polygon.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/polygon_m.cpg | 1 + test/TestData/arcmap/shp-copy/polygon_m.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/polygon_m.prj | 1 + test/TestData/arcmap/shp-copy/polygon_m.shp | Bin 0 -> 760 bytes test/TestData/arcmap/shp-copy/polygon_m.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/polygon_zm.cpg | 1 + test/TestData/arcmap/shp-copy/polygon_zm.dbf | Bin 0 -> 950 bytes test/TestData/arcmap/shp-copy/polygon_zm.prj | 1 + test/TestData/arcmap/shp-copy/polygon_zm.shp | Bin 0 -> 960 bytes test/TestData/arcmap/shp-copy/polygon_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/polyline.cpg | 1 + test/TestData/arcmap/shp-copy/polyline.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/polyline.prj | 1 + test/TestData/arcmap/shp-copy/polyline.shp | Bin 0 -> 560 bytes test/TestData/arcmap/shp-copy/polyline.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/polyline_m.cpg | 1 + test/TestData/arcmap/shp-copy/polyline_m.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/polyline_m.prj | 1 + test/TestData/arcmap/shp-copy/polyline_m.shp | Bin 0 -> 760 bytes test/TestData/arcmap/shp-copy/polyline_m.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/polyline_zm.cpg | 1 + test/TestData/arcmap/shp-copy/polyline_zm.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp-copy/polyline_zm.prj | 1 + test/TestData/arcmap/shp-copy/polyline_zm.shp | Bin 0 -> 960 bytes test/TestData/arcmap/shp-copy/polyline_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp-copy/pt_date.cpg | 1 + test/TestData/arcmap/shp-copy/pt_date.dbf | Bin 0 -> 235 bytes test/TestData/arcmap/shp-copy/pt_date.shp | Bin 0 -> 184 bytes test/TestData/arcmap/shp-copy/pt_date.shx | Bin 0 -> 124 bytes test/TestData/arcmap/shp-copy/pt_utf8.cpg | 1 + test/TestData/arcmap/shp-copy/pt_utf8.dbf | Bin 0 -> 2562 bytes test/TestData/arcmap/shp-copy/pt_utf8.prj | 1 + test/TestData/arcmap/shp-copy/pt_utf8.shp | Bin 0 -> 276 bytes test/TestData/arcmap/shp-copy/pt_utf8.shx | Bin 0 -> 132 bytes test/TestData/arcmap/shp/fields_utf8.CPG | 1 + test/TestData/arcmap/shp/fields_utf8.dbf | Bin 0 -> 530 bytes test/TestData/arcmap/shp/fields_utf8.sbn | Bin 0 -> 180 bytes test/TestData/arcmap/shp/fields_utf8.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/fields_utf8.shp | Bin 0 -> 212 bytes test/TestData/arcmap/shp/fields_utf8.shp.xml | 2 + test/TestData/arcmap/shp/fields_utf8.shx | Bin 0 -> 132 bytes test/TestData/arcmap/shp/multipoint.CPG | 1 + test/TestData/arcmap/shp/multipoint.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/multipoint.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/multipoint.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/multipoint.shp | Bin 0 -> 452 bytes test/TestData/arcmap/shp/multipoint.shp.xml | 2 + test/TestData/arcmap/shp/multipoint.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/multipoint_m.CPG | 1 + test/TestData/arcmap/shp/multipoint_m.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/multipoint_m.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/multipoint_m.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/multipoint_m.shp | Bin 0 -> 612 bytes test/TestData/arcmap/shp/multipoint_m.shp.xml | 2 + test/TestData/arcmap/shp/multipoint_m.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/multipoint_zm.CPG | 1 + test/TestData/arcmap/shp/multipoint_zm.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/multipoint_zm.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/multipoint_zm.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/multipoint_zm.shp | Bin 0 -> 772 bytes .../TestData/arcmap/shp/multipoint_zm.shp.xml | 2 + test/TestData/arcmap/shp/multipoint_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/point.CPG | 1 + test/TestData/arcmap/shp/point.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp/point.sbn | Bin 0 -> 276 bytes test/TestData/arcmap/shp/point.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/point.shp | Bin 0 -> 548 bytes test/TestData/arcmap/shp/point.shp.xml | 2 + test/TestData/arcmap/shp/point.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp/point_m.CPG | 1 + test/TestData/arcmap/shp/point_m.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp/point_m.sbn | Bin 0 -> 276 bytes test/TestData/arcmap/shp/point_m.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/point_m.shp | Bin 0 -> 676 bytes test/TestData/arcmap/shp/point_m.shp.xml | 2 + test/TestData/arcmap/shp/point_m.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp/point_zm.CPG | 1 + test/TestData/arcmap/shp/point_zm.dbf | Bin 0 -> 178 bytes test/TestData/arcmap/shp/point_zm.sbn | Bin 0 -> 276 bytes test/TestData/arcmap/shp/point_zm.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/point_zm.shp | Bin 0 -> 804 bytes test/TestData/arcmap/shp/point_zm.shp.xml | 2 + test/TestData/arcmap/shp/point_zm.shx | Bin 0 -> 228 bytes test/TestData/arcmap/shp/polygon.CPG | 1 + test/TestData/arcmap/shp/polygon.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/polygon.prj | 1 + test/TestData/arcmap/shp/polygon.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polygon.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polygon.shp | Bin 0 -> 560 bytes test/TestData/arcmap/shp/polygon.shp.xml | 2 + test/TestData/arcmap/shp/polygon.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/polygon_m.CPG | 1 + test/TestData/arcmap/shp/polygon_m.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/polygon_m.prj | 1 + test/TestData/arcmap/shp/polygon_m.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polygon_m.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polygon_m.shp | Bin 0 -> 760 bytes test/TestData/arcmap/shp/polygon_m.shp.xml | 2 + test/TestData/arcmap/shp/polygon_m.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/polygon_zm.CPG | 1 + test/TestData/arcmap/shp/polygon_zm.dbf | Bin 0 -> 950 bytes test/TestData/arcmap/shp/polygon_zm.prj | 1 + test/TestData/arcmap/shp/polygon_zm.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polygon_zm.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polygon_zm.shp | Bin 0 -> 960 bytes test/TestData/arcmap/shp/polygon_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/polyline.CPG | 1 + test/TestData/arcmap/shp/polyline.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/polyline.prj | 1 + test/TestData/arcmap/shp/polyline.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polyline.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polyline.shp | Bin 0 -> 560 bytes test/TestData/arcmap/shp/polyline.shp.xml | 2 + test/TestData/arcmap/shp/polyline.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/polyline_m.CPG | 1 + test/TestData/arcmap/shp/polyline_m.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/polyline_m.prj | 1 + test/TestData/arcmap/shp/polyline_m.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polyline_m.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polyline_m.shp | Bin 0 -> 760 bytes test/TestData/arcmap/shp/polyline_m.shp.xml | 2 + test/TestData/arcmap/shp/polyline_m.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/polyline_zm.CPG | 1 + test/TestData/arcmap/shp/polyline_zm.dbf | Bin 0 -> 80 bytes test/TestData/arcmap/shp/polyline_zm.prj | 1 + test/TestData/arcmap/shp/polyline_zm.sbn | Bin 0 -> 164 bytes test/TestData/arcmap/shp/polyline_zm.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/polyline_zm.shp | Bin 0 -> 960 bytes test/TestData/arcmap/shp/polyline_zm.shp.xml | 2 + test/TestData/arcmap/shp/polyline_zm.shx | Bin 0 -> 116 bytes test/TestData/arcmap/shp/pt_date.CPG | 1 + test/TestData/arcmap/shp/pt_date.dbf | Bin 0 -> 235 bytes test/TestData/arcmap/shp/pt_date.sbn | Bin 0 -> 172 bytes test/TestData/arcmap/shp/pt_date.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/pt_date.shp | Bin 0 -> 184 bytes test/TestData/arcmap/shp/pt_date.shp.xml | 2 + test/TestData/arcmap/shp/pt_date.shx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/pt_utf8.CPG | 1 + test/TestData/arcmap/shp/pt_utf8.dbf | Bin 0 -> 2562 bytes test/TestData/arcmap/shp/pt_utf8.prj | 1 + test/TestData/arcmap/shp/pt_utf8.sbn | Bin 0 -> 180 bytes test/TestData/arcmap/shp/pt_utf8.sbx | Bin 0 -> 124 bytes test/TestData/arcmap/shp/pt_utf8.shp | Bin 0 -> 276 bytes test/TestData/arcmap/shp/pt_utf8.shp.xml | 2 + test/TestData/arcmap/shp/pt_utf8.shx | Bin 0 -> 132 bytes test/TestData/temp/abcd.dbf | Bin 0 -> 1366 bytes test/TestData/temp/abcd.shp | Bin 0 -> 516 bytes test/TestData/temp/abcd.shx | Bin 0 -> 132 bytes test/TestData/temp/abcd1.dbf | Bin 0 -> 1370 bytes test/TestData/temp/abcd1.shp | Bin 0 -> 516 bytes test/TestData/temp/abcd1.shx | Bin 0 -> 132 bytes test/TestData/temp/abcd2.dbf | Bin 0 -> 1366 bytes test/TestData/temp/abcd2.shp | Bin 0 -> 516 bytes test/TestData/temp/abcd2.shx | Bin 0 -> 132 bytes test/TestData/temp/abcd3.dbf | Bin 0 -> 1370 bytes test/TestData/temp/abcd3.shp | Bin 0 -> 836 bytes test/TestData/temp/abcd3.shx | Bin 0 -> 132 bytes test/TestData/temp/point.dbf | Bin 0 -> 1366 bytes test/TestData/temp/point.shp | Bin 0 -> 212 bytes test/TestData/temp/point.shx | Bin 0 -> 132 bytes 377 files changed, 16877 insertions(+), 63 deletions(-) create mode 100644 NetTopologySuite.IO.Esri.sln delete mode 100644 NetTopologySuite.IO.ShapeFile.sln create mode 100644 src/NetTopologySuite.IO.Esri.Core/Buffers/ArrayBuffer.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBuffer.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Dbf.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/DbfBinaryExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/DbfEncoding.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/DbfReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/DbfType.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/DbfWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfCharacterField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfDateField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFieldCollection.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFloatField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfLogicalField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfNumericField.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj create mode 100644 src/NetTopologySuite.IO.Esri.Core/Primitives/ByteExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Primitives/ManagedDisposable.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/README.md create mode 100644 src/NetTopologySuite.IO.Esri.Core/ShapeType.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPartReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefilePointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/ShapefileFeature.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPartWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefilePointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/ShapefileException.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPartReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpPointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/ShpBinaryExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/ShpBoundingBox.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinateExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinates.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/ShpShapeBuilder.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPartWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpPointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxReader.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/Shx/ShxBinary.cs create mode 100644 src/NetTopologySuite.IO.Esri.Core/dBASE.md create mode 100644 src/NetTopologySuite.IO.Esri.Core/dBASE.png create mode 100644 src/NetTopologySuite.IO.Esri/AssemblyInfo.cs create mode 100644 src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri/Extensions/ShpExtensions.cs create mode 100644 src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj create mode 100644 src/NetTopologySuite.IO.Esri/README.md create mode 100644 src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseEnumerator.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/IShapefileFeature.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/ShapefileFeature.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeDataReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeReader.cs create mode 100644 src/NetTopologySuite.IO.Esri/Writers/ShapefileMultiPointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri/Writers/ShapefilePolyLineWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri/Writers/ShapefilePolygonWriter.cs create mode 100644 src/NetTopologySuite.IO.Esri/Writers/ShapefileWriter.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Attributes/AttributesTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/CommonHelpers.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/DbfDateTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Features/UseOfIndexAndPreparedGeometry.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Geometries/LineStringSamples.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Geometries/MultiPointSamples.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Geometries/PointSamples.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Geometries/PolygonSamples.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue123Test.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue161.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue173Fixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue174.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue178Fixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue36Tests.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue4Fixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Issue60Fixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/NetTopologySuite.IO.Esri.Test.csproj create mode 100644 test/NetTopologySuite.IO.Esri.Test/NtsIssueNumberAttribute.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/DbaseReaderTests.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/HelperMethods.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeDataReaderTests.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeReaderTests.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapefileDataWriterTests.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/TempFileWriter.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFileInvalidHeaderTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeFileIssueNumberAttribute.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/ShapeRead.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/CA_Cable_region.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/CA_Cable_region.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/EmptyShapeFile.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Issue167.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Sept_polygones.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Sept_polygones.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterial.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterial.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullAtEnd.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullAtStart.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullInMiddle.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.shx create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Volume2.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/afvalbakken.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/afvalbakken.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shx create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/christchurch-canterbury-h.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test_bugged.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test_bugged.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/date.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/error_union.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_ed50_geo.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_ed50_geo.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_ed50_utm36.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_wgs84_geo.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/point_ed50_geo.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/point_ed50_geo.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon intersecting line.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_ed50_geo.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_wgs84_geo.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_PointZM.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_pointM.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_pointZM_MissingM values.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/tnp_pol.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/with_M.dbf create mode 100644 test/NetTopologySuite.IO.Esri.Test/TestShapefiles/with_M.shp create mode 100644 test/NetTopologySuite.IO.Esri.Test/Utils/Utils.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/CascadedPolygonUnionFixture.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2Test.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/NormalizeTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/PathFinder.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/PathFinderTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/Various/UnionAggregateTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.Test/WKTReaderTests.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/App.config create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/NetTopologySuite.IO.Esri.TestConsole.csproj create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Program.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Properties/AssemblyInfo.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadDbf.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile1.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile2.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShp.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile1.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile2.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsReadShapefile.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsWriteShapefile.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/ArcMapShapefilesTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/CopyArcMapFilesTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/CreateShapefileTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/DbaseRreaderTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/ReadArcMapFilesTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/ShapeFileReaderTest.cs create mode 100644 test/NetTopologySuite.IO.Esri.TestConsole/Tests/Test.cs create mode 100644 test/TestData/TestData.mxd create mode 100644 test/TestData/arcmap/shp-copy/fields_utf8.cpg create mode 100644 test/TestData/arcmap/shp-copy/fields_utf8.dbf create mode 100644 test/TestData/arcmap/shp-copy/fields_utf8.shp create mode 100644 test/TestData/arcmap/shp-copy/fields_utf8.shx create mode 100644 test/TestData/arcmap/shp-copy/multipoint.cpg create mode 100644 test/TestData/arcmap/shp-copy/multipoint.dbf create mode 100644 test/TestData/arcmap/shp-copy/multipoint.shp create mode 100644 test/TestData/arcmap/shp-copy/multipoint.shx create mode 100644 test/TestData/arcmap/shp-copy/multipoint_m.cpg create mode 100644 test/TestData/arcmap/shp-copy/multipoint_m.dbf create mode 100644 test/TestData/arcmap/shp-copy/multipoint_m.shp create mode 100644 test/TestData/arcmap/shp-copy/multipoint_m.shx create mode 100644 test/TestData/arcmap/shp-copy/multipoint_zm.cpg create mode 100644 test/TestData/arcmap/shp-copy/multipoint_zm.dbf create mode 100644 test/TestData/arcmap/shp-copy/multipoint_zm.shp create mode 100644 test/TestData/arcmap/shp-copy/multipoint_zm.shx create mode 100644 test/TestData/arcmap/shp-copy/point.cpg create mode 100644 test/TestData/arcmap/shp-copy/point.dbf create mode 100644 test/TestData/arcmap/shp-copy/point.shp create mode 100644 test/TestData/arcmap/shp-copy/point.shx create mode 100644 test/TestData/arcmap/shp-copy/point_m.cpg create mode 100644 test/TestData/arcmap/shp-copy/point_m.dbf create mode 100644 test/TestData/arcmap/shp-copy/point_m.shp create mode 100644 test/TestData/arcmap/shp-copy/point_m.shx create mode 100644 test/TestData/arcmap/shp-copy/point_zm.cpg create mode 100644 test/TestData/arcmap/shp-copy/point_zm.dbf create mode 100644 test/TestData/arcmap/shp-copy/point_zm.shp create mode 100644 test/TestData/arcmap/shp-copy/point_zm.shx create mode 100644 test/TestData/arcmap/shp-copy/polygon.cpg create mode 100644 test/TestData/arcmap/shp-copy/polygon.dbf create mode 100644 test/TestData/arcmap/shp-copy/polygon.prj create mode 100644 test/TestData/arcmap/shp-copy/polygon.shp create mode 100644 test/TestData/arcmap/shp-copy/polygon.shx create mode 100644 test/TestData/arcmap/shp-copy/polygon_m.cpg create mode 100644 test/TestData/arcmap/shp-copy/polygon_m.dbf create mode 100644 test/TestData/arcmap/shp-copy/polygon_m.prj create mode 100644 test/TestData/arcmap/shp-copy/polygon_m.shp create mode 100644 test/TestData/arcmap/shp-copy/polygon_m.shx create mode 100644 test/TestData/arcmap/shp-copy/polygon_zm.cpg create mode 100644 test/TestData/arcmap/shp-copy/polygon_zm.dbf create mode 100644 test/TestData/arcmap/shp-copy/polygon_zm.prj create mode 100644 test/TestData/arcmap/shp-copy/polygon_zm.shp create mode 100644 test/TestData/arcmap/shp-copy/polygon_zm.shx create mode 100644 test/TestData/arcmap/shp-copy/polyline.cpg create mode 100644 test/TestData/arcmap/shp-copy/polyline.dbf create mode 100644 test/TestData/arcmap/shp-copy/polyline.prj create mode 100644 test/TestData/arcmap/shp-copy/polyline.shp create mode 100644 test/TestData/arcmap/shp-copy/polyline.shx create mode 100644 test/TestData/arcmap/shp-copy/polyline_m.cpg create mode 100644 test/TestData/arcmap/shp-copy/polyline_m.dbf create mode 100644 test/TestData/arcmap/shp-copy/polyline_m.prj create mode 100644 test/TestData/arcmap/shp-copy/polyline_m.shp create mode 100644 test/TestData/arcmap/shp-copy/polyline_m.shx create mode 100644 test/TestData/arcmap/shp-copy/polyline_zm.cpg create mode 100644 test/TestData/arcmap/shp-copy/polyline_zm.dbf create mode 100644 test/TestData/arcmap/shp-copy/polyline_zm.prj create mode 100644 test/TestData/arcmap/shp-copy/polyline_zm.shp create mode 100644 test/TestData/arcmap/shp-copy/polyline_zm.shx create mode 100644 test/TestData/arcmap/shp-copy/pt_date.cpg create mode 100644 test/TestData/arcmap/shp-copy/pt_date.dbf create mode 100644 test/TestData/arcmap/shp-copy/pt_date.shp create mode 100644 test/TestData/arcmap/shp-copy/pt_date.shx create mode 100644 test/TestData/arcmap/shp-copy/pt_utf8.cpg create mode 100644 test/TestData/arcmap/shp-copy/pt_utf8.dbf create mode 100644 test/TestData/arcmap/shp-copy/pt_utf8.prj create mode 100644 test/TestData/arcmap/shp-copy/pt_utf8.shp create mode 100644 test/TestData/arcmap/shp-copy/pt_utf8.shx create mode 100644 test/TestData/arcmap/shp/fields_utf8.CPG create mode 100644 test/TestData/arcmap/shp/fields_utf8.dbf create mode 100644 test/TestData/arcmap/shp/fields_utf8.sbn create mode 100644 test/TestData/arcmap/shp/fields_utf8.sbx create mode 100644 test/TestData/arcmap/shp/fields_utf8.shp create mode 100644 test/TestData/arcmap/shp/fields_utf8.shp.xml create mode 100644 test/TestData/arcmap/shp/fields_utf8.shx create mode 100644 test/TestData/arcmap/shp/multipoint.CPG create mode 100644 test/TestData/arcmap/shp/multipoint.dbf create mode 100644 test/TestData/arcmap/shp/multipoint.sbn create mode 100644 test/TestData/arcmap/shp/multipoint.sbx create mode 100644 test/TestData/arcmap/shp/multipoint.shp create mode 100644 test/TestData/arcmap/shp/multipoint.shp.xml create mode 100644 test/TestData/arcmap/shp/multipoint.shx create mode 100644 test/TestData/arcmap/shp/multipoint_m.CPG create mode 100644 test/TestData/arcmap/shp/multipoint_m.dbf create mode 100644 test/TestData/arcmap/shp/multipoint_m.sbn create mode 100644 test/TestData/arcmap/shp/multipoint_m.sbx create mode 100644 test/TestData/arcmap/shp/multipoint_m.shp create mode 100644 test/TestData/arcmap/shp/multipoint_m.shp.xml create mode 100644 test/TestData/arcmap/shp/multipoint_m.shx create mode 100644 test/TestData/arcmap/shp/multipoint_zm.CPG create mode 100644 test/TestData/arcmap/shp/multipoint_zm.dbf create mode 100644 test/TestData/arcmap/shp/multipoint_zm.sbn create mode 100644 test/TestData/arcmap/shp/multipoint_zm.sbx create mode 100644 test/TestData/arcmap/shp/multipoint_zm.shp create mode 100644 test/TestData/arcmap/shp/multipoint_zm.shp.xml create mode 100644 test/TestData/arcmap/shp/multipoint_zm.shx create mode 100644 test/TestData/arcmap/shp/point.CPG create mode 100644 test/TestData/arcmap/shp/point.dbf create mode 100644 test/TestData/arcmap/shp/point.sbn create mode 100644 test/TestData/arcmap/shp/point.sbx create mode 100644 test/TestData/arcmap/shp/point.shp create mode 100644 test/TestData/arcmap/shp/point.shp.xml create mode 100644 test/TestData/arcmap/shp/point.shx create mode 100644 test/TestData/arcmap/shp/point_m.CPG create mode 100644 test/TestData/arcmap/shp/point_m.dbf create mode 100644 test/TestData/arcmap/shp/point_m.sbn create mode 100644 test/TestData/arcmap/shp/point_m.sbx create mode 100644 test/TestData/arcmap/shp/point_m.shp create mode 100644 test/TestData/arcmap/shp/point_m.shp.xml create mode 100644 test/TestData/arcmap/shp/point_m.shx create mode 100644 test/TestData/arcmap/shp/point_zm.CPG create mode 100644 test/TestData/arcmap/shp/point_zm.dbf create mode 100644 test/TestData/arcmap/shp/point_zm.sbn create mode 100644 test/TestData/arcmap/shp/point_zm.sbx create mode 100644 test/TestData/arcmap/shp/point_zm.shp create mode 100644 test/TestData/arcmap/shp/point_zm.shp.xml create mode 100644 test/TestData/arcmap/shp/point_zm.shx create mode 100644 test/TestData/arcmap/shp/polygon.CPG create mode 100644 test/TestData/arcmap/shp/polygon.dbf create mode 100644 test/TestData/arcmap/shp/polygon.prj create mode 100644 test/TestData/arcmap/shp/polygon.sbn create mode 100644 test/TestData/arcmap/shp/polygon.sbx create mode 100644 test/TestData/arcmap/shp/polygon.shp create mode 100644 test/TestData/arcmap/shp/polygon.shp.xml create mode 100644 test/TestData/arcmap/shp/polygon.shx create mode 100644 test/TestData/arcmap/shp/polygon_m.CPG create mode 100644 test/TestData/arcmap/shp/polygon_m.dbf create mode 100644 test/TestData/arcmap/shp/polygon_m.prj create mode 100644 test/TestData/arcmap/shp/polygon_m.sbn create mode 100644 test/TestData/arcmap/shp/polygon_m.sbx create mode 100644 test/TestData/arcmap/shp/polygon_m.shp create mode 100644 test/TestData/arcmap/shp/polygon_m.shp.xml create mode 100644 test/TestData/arcmap/shp/polygon_m.shx create mode 100644 test/TestData/arcmap/shp/polygon_zm.CPG create mode 100644 test/TestData/arcmap/shp/polygon_zm.dbf create mode 100644 test/TestData/arcmap/shp/polygon_zm.prj create mode 100644 test/TestData/arcmap/shp/polygon_zm.sbn create mode 100644 test/TestData/arcmap/shp/polygon_zm.sbx create mode 100644 test/TestData/arcmap/shp/polygon_zm.shp create mode 100644 test/TestData/arcmap/shp/polygon_zm.shx create mode 100644 test/TestData/arcmap/shp/polyline.CPG create mode 100644 test/TestData/arcmap/shp/polyline.dbf create mode 100644 test/TestData/arcmap/shp/polyline.prj create mode 100644 test/TestData/arcmap/shp/polyline.sbn create mode 100644 test/TestData/arcmap/shp/polyline.sbx create mode 100644 test/TestData/arcmap/shp/polyline.shp create mode 100644 test/TestData/arcmap/shp/polyline.shp.xml create mode 100644 test/TestData/arcmap/shp/polyline.shx create mode 100644 test/TestData/arcmap/shp/polyline_m.CPG create mode 100644 test/TestData/arcmap/shp/polyline_m.dbf create mode 100644 test/TestData/arcmap/shp/polyline_m.prj create mode 100644 test/TestData/arcmap/shp/polyline_m.sbn create mode 100644 test/TestData/arcmap/shp/polyline_m.sbx create mode 100644 test/TestData/arcmap/shp/polyline_m.shp create mode 100644 test/TestData/arcmap/shp/polyline_m.shp.xml create mode 100644 test/TestData/arcmap/shp/polyline_m.shx create mode 100644 test/TestData/arcmap/shp/polyline_zm.CPG create mode 100644 test/TestData/arcmap/shp/polyline_zm.dbf create mode 100644 test/TestData/arcmap/shp/polyline_zm.prj create mode 100644 test/TestData/arcmap/shp/polyline_zm.sbn create mode 100644 test/TestData/arcmap/shp/polyline_zm.sbx create mode 100644 test/TestData/arcmap/shp/polyline_zm.shp create mode 100644 test/TestData/arcmap/shp/polyline_zm.shp.xml create mode 100644 test/TestData/arcmap/shp/polyline_zm.shx create mode 100644 test/TestData/arcmap/shp/pt_date.CPG create mode 100644 test/TestData/arcmap/shp/pt_date.dbf create mode 100644 test/TestData/arcmap/shp/pt_date.sbn create mode 100644 test/TestData/arcmap/shp/pt_date.sbx create mode 100644 test/TestData/arcmap/shp/pt_date.shp create mode 100644 test/TestData/arcmap/shp/pt_date.shp.xml create mode 100644 test/TestData/arcmap/shp/pt_date.shx create mode 100644 test/TestData/arcmap/shp/pt_utf8.CPG create mode 100644 test/TestData/arcmap/shp/pt_utf8.dbf create mode 100644 test/TestData/arcmap/shp/pt_utf8.prj create mode 100644 test/TestData/arcmap/shp/pt_utf8.sbn create mode 100644 test/TestData/arcmap/shp/pt_utf8.sbx create mode 100644 test/TestData/arcmap/shp/pt_utf8.shp create mode 100644 test/TestData/arcmap/shp/pt_utf8.shp.xml create mode 100644 test/TestData/arcmap/shp/pt_utf8.shx create mode 100644 test/TestData/temp/abcd.dbf create mode 100644 test/TestData/temp/abcd.shp create mode 100644 test/TestData/temp/abcd.shx create mode 100644 test/TestData/temp/abcd1.dbf create mode 100644 test/TestData/temp/abcd1.shp create mode 100644 test/TestData/temp/abcd1.shx create mode 100644 test/TestData/temp/abcd2.dbf create mode 100644 test/TestData/temp/abcd2.shp create mode 100644 test/TestData/temp/abcd2.shx create mode 100644 test/TestData/temp/abcd3.dbf create mode 100644 test/TestData/temp/abcd3.shp create mode 100644 test/TestData/temp/abcd3.shx create mode 100644 test/TestData/temp/point.dbf create mode 100644 test/TestData/temp/point.shp create mode 100644 test/TestData/temp/point.shx diff --git a/.editorconfig b/.editorconfig index f2a3aa4..e40b3f8 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,8 +5,4 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true insert_final_newline = true -dotnet_style_predefined_type_for_locals_parameters_members = true:error -dotnet_style_predefined_type_for_member_access = true:error -csharp_style_var_for_built_in_types = false:error -csharp_style_var_when_type_is_apparent = true:error -csharp_style_var_elsewhere = true:error + diff --git a/.gitignore b/.gitignore index 8fcee28..bd23669 100644 --- a/.gitignore +++ b/.gitignore @@ -190,3 +190,5 @@ FakesAssemblies/ # Others /NetTopologySuite.IO/NetTopologySuite.IO.GeoTools/NetTopologySuite.IO.GeoTools.csproj.DotSettings +/src/NetTopologySuite.IO.Esri.Core/dBASE.xlsx +/src/ShpDmsPrec diff --git a/NetTopologySuite.IO.Esri.sln b/NetTopologySuite.IO.Esri.sln new file mode 100644 index 0000000..2970709 --- /dev/null +++ b/NetTopologySuite.IO.Esri.sln @@ -0,0 +1,207 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30717.126 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B0923F22-AF00-46DA-B5CE-73F4D398DE37}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .gitignore = .gitignore + dBASE.md = dBASE.md + README.md = README.md + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile", "src\NetTopologySuite.IO.ShapeFile\NetTopologySuite.IO.ShapeFile.csproj", "{04CAE5A6-0B7B-47F8-9899-46EE805478E7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.GDB", "src\NetTopologySuite.IO.GDB\NetTopologySuite.IO.GDB.csproj", "{6A1DF663-838E-42C0-811A-8114C3547B01}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile.Test", "test\NetTopologySuite.IO.ShapeFile.Test\NetTopologySuite.IO.ShapeFile.Test.csproj", "{89254B6E-F130-41F3-8956-2F790E99C6F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG", "src\NetTopologySuite.IO.ShapefileNG\NetTopologySuite.IO.ShapefileNG.csproj", "{54244379-0702-40E8-8773-0973B3485293}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG.Test", "test\NetTopologySuite.IO.ShapefileNG.Test\NetTopologySuite.IO.ShapefileNG.Test.csproj", "{7B2FB807-A99D-40E9-AE5B-4931BE2086FA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri", "src\NetTopologySuite.IO.Esri\NetTopologySuite.IO.Esri.csproj", "{960D89DB-F534-4207-931E-4BB8B4DCA483}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Test", "test\NetTopologySuite.IO.Esri.Test\NetTopologySuite.IO.Esri.Test.csproj", "{46F2F8D9-855C-40E6-A93F-DB96A3343C8E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetTopologySuite.IO.Esri.TestConsole", "test\NetTopologySuite.IO.Esri.TestConsole\NetTopologySuite.IO.Esri.TestConsole.csproj", "{AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickTest", "..\QuickTest\QuickTest.csproj", "{CE761ECC-0330-436F-A199-A3521294EFAF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Core", "src\NetTopologySuite.IO.Esri.Core\NetTopologySuite.IO.Esri.Core.csproj", "{2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|ARM.ActiveCfg = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|ARM.Build.0 = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|x64.ActiveCfg = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|x64.Build.0 = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|x86.ActiveCfg = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|x86.Build.0 = Debug|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|Any CPU.Build.0 = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|ARM.ActiveCfg = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|ARM.Build.0 = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x64.ActiveCfg = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x64.Build.0 = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x86.ActiveCfg = Release|Any CPU + {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x86.Build.0 = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|ARM.Build.0 = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x64.ActiveCfg = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x64.Build.0 = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x86.ActiveCfg = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x86.Build.0 = Debug|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.Build.0 = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|ARM.ActiveCfg = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|ARM.Build.0 = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x64.ActiveCfg = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x64.Build.0 = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x86.ActiveCfg = Release|Any CPU + {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x86.Build.0 = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|ARM.ActiveCfg = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|ARM.Build.0 = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|x64.ActiveCfg = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|x64.Build.0 = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|x86.ActiveCfg = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|x86.Build.0 = Debug|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.Build.0 = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|ARM.ActiveCfg = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|ARM.Build.0 = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|x64.ActiveCfg = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|x64.Build.0 = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|x86.ActiveCfg = Release|Any CPU + {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|x86.Build.0 = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|ARM.ActiveCfg = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|ARM.Build.0 = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|x64.ActiveCfg = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|x64.Build.0 = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|x86.ActiveCfg = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Debug|x86.Build.0 = Debug|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.Build.0 = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|ARM.ActiveCfg = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|ARM.Build.0 = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|x64.ActiveCfg = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|x64.Build.0 = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|x86.ActiveCfg = Release|Any CPU + {54244379-0702-40E8-8773-0973B3485293}.Release|x86.Build.0 = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|ARM.Build.0 = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|x64.ActiveCfg = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|x64.Build.0 = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|x86.ActiveCfg = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|x86.Build.0 = Debug|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.Build.0 = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|ARM.ActiveCfg = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|ARM.Build.0 = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|x64.ActiveCfg = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|x64.Build.0 = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|x86.ActiveCfg = Release|Any CPU + {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|x86.Build.0 = Release|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Debug|Any CPU.Build.0 = Debug|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Debug|ARM.ActiveCfg = Debug|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Debug|x64.ActiveCfg = Debug|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Debug|x86.ActiveCfg = Debug|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Release|Any CPU.ActiveCfg = Release|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Release|Any CPU.Build.0 = Release|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Release|ARM.ActiveCfg = Release|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Release|x64.ActiveCfg = Release|Any CPU + {960D89DB-F534-4207-931E-4BB8B4DCA483}.Release|x86.ActiveCfg = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|ARM.Build.0 = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|x64.ActiveCfg = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|x64.Build.0 = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|x86.ActiveCfg = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Debug|x86.Build.0 = Debug|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|Any CPU.Build.0 = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|ARM.ActiveCfg = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|ARM.Build.0 = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x64.ActiveCfg = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x64.Build.0 = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x86.ActiveCfg = Release|Any CPU + {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x86.Build.0 = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|ARM.Build.0 = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x64.Build.0 = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x86.Build.0 = Debug|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|Any CPU.Build.0 = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|ARM.ActiveCfg = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|ARM.Build.0 = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x64.ActiveCfg = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x64.Build.0 = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.ActiveCfg = Release|Any CPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.Build.0 = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|ARM.Build.0 = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x64.Build.0 = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x86.Build.0 = Debug|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|Any CPU.Build.0 = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|ARM.ActiveCfg = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|ARM.Build.0 = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x64.ActiveCfg = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x64.Build.0 = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x86.ActiveCfg = Release|Any CPU + {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x86.Build.0 = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|ARM.Build.0 = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|x64.ActiveCfg = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|x64.Build.0 = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|x86.ActiveCfg = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|x86.Build.0 = Debug|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|Any CPU.Build.0 = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|ARM.ActiveCfg = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|ARM.Build.0 = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x64.ActiveCfg = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x64.Build.0 = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x86.ActiveCfg = Release|Any CPU + {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {06DEE0C5-480C-4A70-BC80-3791D98E6A89} + EndGlobalSection +EndGlobal diff --git a/NetTopologySuite.IO.ShapeFile.sln b/NetTopologySuite.IO.ShapeFile.sln deleted file mode 100644 index e0fe309..0000000 --- a/NetTopologySuite.IO.ShapeFile.sln +++ /dev/null @@ -1,56 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2009 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B0923F22-AF00-46DA-B5CE-73F4D398DE37}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .gitignore = .gitignore - README.md = README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile", "src\NetTopologySuite.IO.ShapeFile\NetTopologySuite.IO.ShapeFile.csproj", "{04CAE5A6-0B7B-47F8-9899-46EE805478E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.GDB", "src\NetTopologySuite.IO.GDB\NetTopologySuite.IO.GDB.csproj", "{6A1DF663-838E-42C0-811A-8114C3547B01}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile.Test", "test\NetTopologySuite.IO.ShapeFile.Test\NetTopologySuite.IO.ShapeFile.Test.csproj", "{89254B6E-F130-41F3-8956-2F790E99C6F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG", "src\NetTopologySuite.IO.ShapefileNG\NetTopologySuite.IO.ShapefileNG.csproj", "{54244379-0702-40E8-8773-0973B3485293}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG.Test", "test\NetTopologySuite.IO.ShapefileNG.Test\NetTopologySuite.IO.ShapefileNG.Test.csproj", "{7B2FB807-A99D-40E9-AE5B-4931BE2086FA}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|Any CPU.Build.0 = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.Build.0 = Release|Any CPU - {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89254B6E-F130-41F3-8956-2F790E99C6F0}.Release|Any CPU.Build.0 = Release|Any CPU - {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54244379-0702-40E8-8773-0973B3485293}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54244379-0702-40E8-8773-0973B3485293}.Release|Any CPU.Build.0 = Release|Any CPU - {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B2FB807-A99D-40E9-AE5B-4931BE2086FA}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {06DEE0C5-480C-4A70-BC80-3791D98E6A89} - EndGlobalSection -EndGlobal diff --git a/src/NetTopologySuite.IO.Esri.Core/Buffers/ArrayBuffer.cs b/src/NetTopologySuite.IO.Esri.Core/Buffers/ArrayBuffer.cs new file mode 100644 index 0000000..6fde4ad --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Buffers/ArrayBuffer.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO +{ + internal class ArrayBuffer + { + private static readonly int ExpandLimit = 4 * 1024 * 1024; // 4MB * sizeof(T) + + private static int GetExpandedLength(T[] array) + { + if (array.Length < 4) + return array.Length + 4; + + if (array.Length > ExpandLimit) + return array.Length + ExpandLimit; + + return array.Length * 2; + } + + public static void Expand(ref T[] array, int minLength) + { + if (array.Length < minLength) + { + var expandedLength = Math.Max(minLength, GetExpandedLength(array)); + Array.Resize(ref array, expandedLength); + } + } + + public static void Expand(ref T[] array) + { + Array.Resize(ref array, GetExpandedLength(array)); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBuffer.cs b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBuffer.cs new file mode 100644 index 0000000..9db3eef --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBuffer.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO +{ + + /// + /// Represents a buffer of binary data. + /// + internal abstract class BinaryBuffer + { + protected BinaryBuffer(int initialCapacity = 256) + { + if (initialCapacity < 0) + throw new ArgumentException(nameof(initialCapacity)); + + Buffer = new byte[initialCapacity]; + UsedBufferSize = 0; + } + + + /// + /// Underlying buffer data. + /// + protected byte[] Buffer; + + protected int UsedBufferSize { get; private set; } + + /// + /// Used for debugging purposes. + /// + internal byte[] UsedBuffer + { + get + { + var bytes = new byte[UsedBufferSize]; + Array.Copy(Buffer, bytes, bytes.Length); + return bytes; + } + } + + + protected void SetUsedBufferSize(int newSize) + { + if (newSize < 0) + throw new ArgumentException(nameof(newSize)); + + if (newSize == UsedBufferSize) + return; + + if (newSize < UsedBufferSize) + { + Array.Clear(Buffer, newSize, UsedBufferSize - newSize); + } + else if (newSize > Buffer.Length) + { + ArrayBuffer.Expand(ref Buffer, newSize); + } + + UsedBufferSize = newSize; + } + + internal virtual void Reset() + { + Buffer = new byte[0]; + UsedBufferSize = 0; + } + + public override string ToString() + { + var count = Math.Min(64, UsedBufferSize); + var sb = new StringBuilder(); + for (int i = 0; i < count; i++) + { + sb.Append(i + ":" + Buffer[i]); + sb.Append(" | "); + } + if (count < UsedBufferSize) + { + sb.Append("... "); + sb.Append(UsedBufferSize - 1); + sb.Append(":"); + sb.Append(Buffer[UsedBufferSize - 1]); + } + return sb.ToString(); + } + + + [Conditional("DEBUG_BINARY")] + internal void GetBinaryDiff(string name, BinaryBufferReader other, List differences) + { + if (UsedBufferSize != other.UsedBufferSize) + { + differences.Add(name + "." + nameof(UsedBufferSize) + ": " + UsedBufferSize + " | " + other.UsedBufferSize); + } + + var end = Math.Min(UsedBufferSize, other.UsedBufferSize); + + for (int i = 0; i < end; i++) + { + if (this.Buffer[i] != other.Buffer[i]) + differences.Add(name + "[" + i + "]: '" + Buffer[i].ToChar() + "' | '" + other.Buffer[i].ToChar() + "' " + Buffer[i].ToString().PadLeft(3) + " | " + other.Buffer[i].ToString().PadLeft(3)); + } + } + + [Conditional("DEBUG_BINARY")] + internal void TraceToConsole(string header, int startIndex, int count) + { + if (!string.IsNullOrEmpty(header)) + Console.WriteLine(header); + + var end = startIndex + count; + for (int i = startIndex; i < end; i++) + { + Console.WriteLine(Buffer[i].ToText()); + } + Console.WriteLine(); + } + + [Conditional("DEBUG_BINARY")] + internal static void TraceToConsole(string msg) + { + Console.WriteLine(msg.Replace(char.MinValue, '▬')); // ⌂ ↔ ¤ + } + + + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferReader.cs b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferReader.cs new file mode 100644 index 0000000..24c6986 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferReader.cs @@ -0,0 +1,323 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO +{ + internal class BinaryBufferReader : BinaryBuffer + { + + public BinaryBufferReader(int initialCapacity = 256) : base(initialCapacity) + { + } + + /// + /// Gets the value at the specified index. + /// + /// The zero-based index of the element to get or set. + /// The value at the specified index. + public byte this[int index] + { + get + { + if (index < 0 || index >= UsedBufferSize) + throw new ArgumentOutOfRangeException(nameof(index)); + return Buffer [index]; + } + } + + /// + /// Gets the current position of processed data. + /// + public int Position { get; private set; } + + + /// + /// Gets the count of bytes reserved by the reader. + /// + public int Size => UsedBufferSize; + + + /// + /// Gets the current position in the buffer. + /// + public bool End => Position >= UsedBufferSize; + + internal override void Reset() + { + base.Reset(); + SetPosition(0, 0); + } + + + /// + /// Loads binary data from the stream and resets reader position. + /// + /// Binary data source stream. + /// The maximum number of bytes to be read from the stream. + public void LoadFrom(Stream source, int bytesCount) + { + if (source == null) + throw new ArgumentNullException(this.GetType().Name + " cannot read from an uninitialized source stream.", nameof(source)); + + SetUsedBufferSize(bytesCount); + source.Read(Buffer, 0, bytesCount); + SetPosition(0, 0); + } + + /// + /// Sets current position of processed data. + /// + /// Index of the first element in BinarySegment which was processed. + /// The number of processed elements. + protected void SetPosition(int startIndex, int bytesCount) + { + if (startIndex + bytesCount > UsedBufferSize) + { + throw new ArgumentException("Current " + GetType().Name + ".Position could not be greater than reserved buffer size.", nameof(Position)); + } + Position = startIndex + bytesCount; + } + + public void MoveTo(int position) + { + SetPosition(position, 0); + } + + /// + /// Moves data processing ahead a specified number of items. + /// + /// + public void Advance(int count) + { + SetPosition(Position, count); + } + + /// + /// Advances past consecutive instances of the given value. + /// + /// The value past which the reader is to advance. + /// The number of positions the reader has advanced or -1 if value was not found. + public bool TryAdvanceTo(byte value) + { + var newPosition = Array.IndexOf(Buffer, value, Position, UsedBufferSize); + if (newPosition < 1) + { + Position = UsedBufferSize; + return false; + } + else + { + Position = newPosition; + return true; + } + } + + /// + /// Advances past consecutive instances of the given value. + /// + /// The value past which the reader is to advance. + /// The number of positions the reader has advanced. + public int AdvancePast(byte value) + { + int startPosition = Position; + while (!End && Buffer[Position] == value) + { + Position++; + } + return Position - startPosition; + } + + + + /// + /// Reads a 8-bit unsigned integer and advances the current Position by one. + /// + /// The position within underlying binary data. + /// Value read from underlying data. + public byte ReadByte(int index) + { + SetPosition(index, 1); + return this[index]; + } + public byte ReadByte() + { + return ReadByte(Position); + } + + + public char ReadByteChar(int index) + { + return (char)ReadByte(index); + } + public char ReadByteChar() + { + return ReadByteChar(Position); + } + + protected byte[] ReadBytes(int startIndex, int count) + { + SetPosition(startIndex, count); + var res = new byte[count]; + for (int i = 0; i < count; i++) + { + res[i] = this[startIndex + i]; + } + return res; + } + + protected byte[] ReadReversedBytes(int startIndex, int count) + { + SetPosition(startIndex, count); + var res = new byte[count]; + for (int i = 0; i < count; i++) + { + res[count - i - 1] = this[startIndex + i]; + } + return res; + } + + + /// + /// Reads a 16-bit unsigned integer converted from two bytes at a specified position in the underlying data + /// and advances the current Position by the number of bytes read. + /// + /// The starting position within the underlying data. + /// Value read from underlying data. + public ushort ReadUInt16LittleEndian(int startIndex) + { + SetPosition(startIndex, sizeof(ushort)); + return (ushort)( + this[startIndex + 0] + | this[startIndex + 1] << 8 + ); + } + public ushort ReadUInt16LittleEndian() + { + return ReadUInt16LittleEndian(Position); + } + + + /// + /// Returns a 32-bit unsigned integer converted from two bytes at a specified position in the underlying data + /// and advances the current Position by the number of bytes read. + /// + /// The starting position within the underlying data. + /// Value read from underlying data. + public uint ReadUInt32LittleEndian(int startIndex) + { + SetPosition(startIndex, sizeof(uint)); + return (uint)( + this[startIndex + 0] + | this[startIndex + 1] << 8 + | this[startIndex + 2] << 16 + | this[startIndex + 3] << 24 + ); + } + public uint ReadUInt32LittleEndian() + { + return ReadUInt32LittleEndian(Position); + } + + + public int ReadInt32LittleEndian(int startIndex) + { + SetPosition(startIndex, sizeof(int)); + return (int)( + this[startIndex + 0] + | this[startIndex + 1] << 8 + | this[startIndex + 2] << 16 + | this[startIndex + 3] << 24 + ); + } + public int ReadInt32LittleEndian() + { + return ReadInt32LittleEndian(Position); + } + + + public int ReadInt32BigEndian(int startIndex) + { + SetPosition(startIndex, sizeof(int)); + return (int)( + this[startIndex + 3] + | this[startIndex + 2] << 8 + | this[startIndex + 1] << 16 + | this[startIndex + 0] << 24 + ); + } + public int ReadInt32BigEndian() + { + return ReadInt32BigEndian(Position); + } + + public unsafe double ReadDoubleLittleEndian(int startIndex) + { + /* + var loVal = (ulong)( + this[startIndex + 0] + | this[startIndex + 1] << 8 + | this[startIndex + 2] << 16 + | this[startIndex + 3] << 24 + ); + + var hiVal = (ulong)( + this[startIndex + 4] + | this[startIndex + 5] << 8 + | this[startIndex + 6] << 16 + | this[startIndex + 7] << 24 + ); + */ + + var loVal = ReadUInt32LittleEndian(startIndex); + var hiVal = ReadUInt32LittleEndian(); + + ulong resRef = ((ulong)hiVal) << 32 | loVal; + return *((double*)&resRef); + } + + public double ReadDoubleLittleEndian() + { + return ReadDoubleLittleEndian(Position); + } + + + public string ReadString(int startIndex, int bytesCount, Encoding encoding) + { + // var bytes = ReadBytes(length); //Do not allocate new array if it is not needed. + SetPosition(startIndex, bytesCount); + var s = encoding.GetString(this.Buffer, startIndex, bytesCount); + + TraceToConsole("ReadString(" + Position.ToString() + "): '" + s + "'"); + + if (IsNullString(s)) + { + return null; + } + return s.Trim(char.MinValue); + } + + private bool IsNullString(string s) + { + for (int i = 0; i < s.Length; i++) + { + if (s[i] != char.MinValue) + return false; + } + return true; + } + + /// + /// Rreds string from the underlying data and advances the current Position by the number of bytes read. + /// + /// + /// + /// + public string ReadString(int bytesCount, Encoding encoding) + { + return ReadString(Position, bytesCount, encoding); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferWriter.cs new file mode 100644 index 0000000..6e8564c --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Buffers/BinaryBufferWriter.cs @@ -0,0 +1,214 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO +{ + internal class BinaryBufferWriter : BinaryBuffer + { + + public BinaryBufferWriter(int initialCapacity = 256) : base(initialCapacity) + { + } + + + /// + /// Gets or sets the value at the specified index. + /// + /// The zero-based index of the element to get or set. + /// The value at the specified index. + public byte this[int index] + { + get + { + if (index < 0 || index >= UsedBufferSize) + throw new ArgumentOutOfRangeException(nameof(index)); + return Buffer[index]; + } + private set + { + if (index < 0 || index >= UsedBufferSize) + throw new ArgumentOutOfRangeException(nameof(index)); + Buffer[index] = value; + } + } + + + /// + /// Gets the count of bytes written to the underlying buffer. + /// + public int Size => UsedBufferSize; + + + /// + /// Copies written bytes to the stream. + /// + /// + public void CopyTo(Stream dest) + { + if (dest == null) + throw new ArgumentNullException(this.GetType().Name + " cannot write to an uninitialized stream.", nameof(dest)); + + dest.Write(Buffer, 0, UsedBufferSize); + } + + /// + /// Sets the reserved bytes count to zero and clears the unused bytes in the underlying buffer (sets thier values to zeros). It does not resize the underlying buffer. + /// + public void Clear() + { + SetUsedBufferSize(0); + } + + /// + /// Writes a 8-bit unsigned integer. + /// + /// A 8-bit unsigned integer value. + public void WriteByte(byte value) + { + var index = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + 1); + this[index] = value; + } + + public void WriteByteChar(char c) + { + if (c > byte.MaxValue) + throw new ArgumentException("Character exceeds ASCII code table: " + c, nameof(c)); + + WriteByte((byte)c); + } + + + public void WriteBytes(byte[] source) + { + if (source == null || source.Length < 1) + throw new ArgumentNullException(nameof(source)); + + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + source.Length); + + for (int i = 0; i < source.Length; i++) + { + this[startIndex + i] = source[i]; + } + } + public void WriteBytes(byte value, int count) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + count); + + for (int i = 0; i < count; i++) + { + this[startIndex + i] = value; + } + } + public void WriteNullBytes(int count) + { + WriteBytes(byte.MinValue, count); + } + + + public void WriteUInt16LittleEndian(UInt16 value) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + sizeof(UInt16)); + + this[startIndex + 0] = (byte)value; + this[startIndex + 1] = (byte)(value >> 8); + } + + + public void WriteUInt32LittleEndian(UInt32 value) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + sizeof(UInt32)); + + this[startIndex + 0] = (byte)value; + this[startIndex + 1] = (byte)(value >> 8); + this[startIndex + 2] = (byte)(value >> 16); + this[startIndex + 3] = (byte)(value >> 24); + + } + + + public void WriteInt32LittleEndian(Int32 value) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + sizeof(Int32)); + + this[startIndex + 0] = (byte)value; + this[startIndex + 1] = (byte)(value >> 8); + this[startIndex + 2] = (byte)(value >> 16); + this[startIndex + 3] = (byte)(value >> 24); + + } + + + public void WriteInt32BigEndian(Int32 value) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + sizeof(Int32)); + + this[startIndex + 3] = (byte)value; + this[startIndex + 2] = (byte)(value >> 8); + this[startIndex + 1] = (byte)(value >> 16); + this[startIndex + 0] = (byte)(value >> 24); + + } + + + + public unsafe void WriteDoubleLittleEndian(double value) + { + var startIndex = UsedBufferSize; + SetUsedBufferSize(UsedBufferSize + sizeof(double)); + + ulong valueRef = *(ulong*)&value; + + this[startIndex + 0] = (byte)valueRef; + this[startIndex + 1] = (byte)(valueRef >> 8); + this[startIndex + 2] = (byte)(valueRef >> 16); + this[startIndex + 3] = (byte)(valueRef >> 24); + this[startIndex + 4] = (byte)(valueRef >> 32); + this[startIndex + 5] = (byte)(valueRef >> 40); + this[startIndex + 6] = (byte)(valueRef >> 48); + this[startIndex + 7] = (byte)(valueRef >> 56); + } + + + /// + /// Writes string to BinaryDataWriter. + /// + /// String value to write. + /// Bytes count to be written in BinaryDataWriter. + /// Encoding used to translate string to bytes. + public void WriteString(string s, int bytesCount, Encoding encoding) + { + s = s ?? string.Empty; + + if (s.Length > bytesCount) + { + s = s.Substring(0, bytesCount); + } + + // Specific encoding can add some extra bytes for national characters. Check it. + var bytes = encoding.GetBytes(s); + while (bytes.Length > bytesCount) + { + s = s.Substring(0, s.Length - 1); + bytes = encoding.GetBytes(s); + } + + if (bytes.Length < bytesCount) + { + var fixedBytes = new byte[bytesCount]; // Filled with '\0' by default + Array.Copy(bytes, fixedBytes, bytes.Length); + bytes = fixedBytes; // NULL terminated fixed length string + } + + WriteBytes(bytes); // This will SetUsedBufferSize() + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Dbf.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Dbf.cs new file mode 100644 index 0000000..0033723 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Dbf.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + internal static class Dbf + { + public readonly static int TableDescriptorSize = 32; // Number of bytes in the table header + + internal readonly static int FieldDescriptorSize = 32; // Number of bytes in the field descriptor + internal readonly static int MaxFieldCount = 255; + public readonly static byte Dbase3Version = 0x03; // dBASE III + public readonly static byte HeaderTerminatorMark = 0x0D; + + public readonly static byte DeletedRecordMark = 0x2A; // '*' + public readonly static byte ValidRecordMark = 0x20; // ' ' + public readonly static byte EndOfFileMark = 0x1A; + + public static readonly int MaxFieldNameLength = 10; + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfBinaryExtensions.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfBinaryExtensions.cs new file mode 100644 index 0000000..cf43b22 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfBinaryExtensions.cs @@ -0,0 +1,165 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + + + internal static class DbfBinaryExtensions + { + public static void WriteDbfVersion(this BinaryBufferWriter tableDescriptor, byte version) + { + tableDescriptor.WriteByte(version); + } + public static byte ReadDbfVersion(this BinaryBufferReader tableDescriptor) + { + return tableDescriptor.ReadByte(); + } + + + public static void WriteDbfLastUpdateDate(this BinaryBufferWriter tableDescriptor, DateTime date) + { + tableDescriptor.WriteByte((byte)(date.Year - 1900)); + tableDescriptor.WriteByte((byte)date.Month); + tableDescriptor.WriteByte((byte)date.Day); + } + public static DateTime ReadDbfLastUpdateDate(this BinaryBufferReader tableDescriptor) + { + var y = tableDescriptor.ReadByte(); + var m = tableDescriptor.ReadByte(); + var d = tableDescriptor.ReadByte(); + + if (m < 1) + m = 1; + + if (m > 12) + m = 12; + + if (d < 1) + d = 1; + + if (d > 31) + d = 31; + + return new DateTime(1900 + y, m, d); + } + + + public static void WriteDbfRecordCount(this BinaryBufferWriter tableDescriptor, int recordCount) + { + tableDescriptor.WriteUInt32LittleEndian((uint)recordCount); + } + public static int ReadDbfRecordCount(this BinaryBufferReader tableDescriptor) + { + return (int)tableDescriptor.ReadUInt32LittleEndian(); + } + + + public static void WriteDbfHeaderSize(this BinaryBufferWriter tableDescriptor, int headerSize) + { + tableDescriptor.WriteUInt16LittleEndian((ushort)headerSize); + } + public static ushort ReadDbfHeaderSize(this BinaryBufferReader tableDescriptor) + { + return tableDescriptor.ReadUInt16LittleEndian(); + } + + + public static void WriteDbfRecordSize(this BinaryBufferWriter tableDescriptor, int headerSize) + { + tableDescriptor.WriteUInt16LittleEndian((ushort)headerSize); + } + public static ushort ReadDbfRecordSize(this BinaryBufferReader tableDescriptor) + { + return tableDescriptor.ReadUInt16LittleEndian(); + } + + + public static void WriteDbfEncoding(this BinaryBufferWriter tableDescriptor, Encoding encoding) + { + var ldid = DbfEncoding.GetLanguageDriverId(encoding); + tableDescriptor.WriteByte(ldid); + } + public static Encoding ReadDbfEncoding(this BinaryBufferReader tableDescriptor) + { + var ldid = tableDescriptor.ReadByte(); + return DbfEncoding.GetEncodingForLanguageDriverId(ldid); + } + + + public static void WriteDbaseFieldDescriptor(this BinaryBufferWriter fieldDescriptor, DbfField field, Encoding encoding) + { + encoding = encoding ?? Encoding.UTF8; + var name = field.Name.PadRight(Dbf.MaxFieldNameLength, char.MinValue); // Field name must have empty space zero-filled + + + fieldDescriptor.WriteString(name, Dbf.MaxFieldNameLength, encoding); + fieldDescriptor.WriteNullBytes(1); + fieldDescriptor.WriteDbaseType(field.FieldType); + fieldDescriptor.WriteNullBytes(4); + fieldDescriptor.WriteByte((byte)field.Length); + fieldDescriptor.WriteByte((byte)field.Precision); + fieldDescriptor.WriteNullBytes(14); + } + public static DbfField ReadDbaseFieldDescriptor(this BinaryBufferReader fieldDescriptor, Encoding encoding) + { + encoding = encoding ?? Encoding.UTF8; + + var name = fieldDescriptor.ReadString(Dbf.MaxFieldNameLength, encoding)?.Trim(); + fieldDescriptor.Advance(1); // Reserved (field name terminator) + var type = fieldDescriptor.ReadDbaseType(); + fieldDescriptor.Advance(4); // Reserved + var length = fieldDescriptor.ReadByte(); + var precision = fieldDescriptor.ReadByte(); + fieldDescriptor.Advance(14); // Reserved + + if (type == DbfType.Character) + { + var textField = new DbfCharacterField(name, length, encoding); + textField.Encoding = encoding; + return textField; + } + else if (type == DbfType.Date) + { + return new DbfDateField(name); + } + else if (type == DbfType.Numeric) + { + return new DbfNumericField(name, length, precision); + } + else if (type == DbfType.Float) + { + return new DbfFloatField(name, length, precision); + } + else if (type == DbfType.Logical) + { + return new DbfLogicalField(name); + } + else + { + throw new InvalidDataException("Invalid dBASE III field type: " + type); + } + } + + + private static DbfType ReadDbaseType(this BinaryBufferReader fieldDescriptor) + { + var type = fieldDescriptor.ReadByteChar(); + type = char.ToUpper(type); + + if (type == 'S') + type = 'C'; + + return (DbfType)type; + } + private static void WriteDbaseType(this BinaryBufferWriter fieldDescriptor, DbfType type) + { + fieldDescriptor.WriteByte((byte)type); + } + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfEncoding.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfEncoding.cs new file mode 100644 index 0000000..e49161a --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfEncoding.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + internal static class DbfEncoding + { + /// + /// The Latin1 Encoding + /// + internal static readonly Encoding Latin1 = Encoding.GetEncoding(28591); // ISO-8859-1 + + private static readonly IDictionary LanguageDriverIdToEncoding = new Dictionary(); + private static readonly IDictionary EncodingToLanguageDriverId = new Dictionary(); + + internal static void WriteMissingEncodingMessage(string encodingName) + { + Debug.WriteLine("DBF encoding not found: " + encodingName + ". To fix it do the following:"); + Debug.WriteLine("- Add reference to to the System.Text.Encoding.CodePages.dll to your project."); + Debug.WriteLine("- Put that line somewhere in your code:"); + Debug.WriteLine(" Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); "); + } + + static DbfEncoding() + { + // Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // Kepp this library clear. Do not include unnecessary dependices. + + // https://support.esri.com/en/technical-article/000013192 + + AddLanguageDriverId(0, Encoding.UTF8); // For unknown LDID + AddLanguageDriverId(0x03, Encoding.Default); // OS Default + AddLanguageDriverId(0x57, Encoding.Default); // OS Default + + AddLanguageDriverId(0x01 , 437); // United States MS–DOS + AddLanguageDriverId(0x02 , 850); // International MS–DOS + AddLanguageDriverId(0x08 , 865); // Danish OEM + AddLanguageDriverId(0x09 , 437); // Dutch OEM + AddLanguageDriverId(0x0A , 850); // Dutch OEM* + AddLanguageDriverId(0x0B , 437); // Finnish OEM + AddLanguageDriverId(0x0D , 437); // French OEM + AddLanguageDriverId(0x0E , 850); // French OEM* + AddLanguageDriverId(0x0F , 437); // German OEM + AddLanguageDriverId(0x10 , 850); // German OEM* + AddLanguageDriverId(0x11 , 437); // Italian OEM + AddLanguageDriverId(0x12 , 850); // Italian OEM* + AddLanguageDriverId(0x13 , 932); // Japanese Shift-JIS + AddLanguageDriverId(0x14 , 850); // Spanish OEM* + AddLanguageDriverId(0x15 , 437); // Swedish OEM + AddLanguageDriverId(0x16 , 850); // Swedish OEM* + AddLanguageDriverId(0x17 , 865); // Norwegian OEM + AddLanguageDriverId(0x18 , 437); // Spanish OEM + AddLanguageDriverId(0x19 , 437); // English OEM (Britain) + AddLanguageDriverId(0x1A , 850); // English OEM (Britain)* + AddLanguageDriverId(0x1B , 437); // English OEM (U.S.) + AddLanguageDriverId(0x1C , 863); // French OEM (Canada) + AddLanguageDriverId(0x1D , 850); // French OEM* + AddLanguageDriverId(0x1F , 852); // Czech OEM + AddLanguageDriverId(0x22 , 852); // Hungarian OEM + AddLanguageDriverId(0x23 , 852); // Polish OEM + AddLanguageDriverId(0x24 , 860); // Portuguese OEM + AddLanguageDriverId(0x25 , 850); // Portuguese OEM* + AddLanguageDriverId(0x26 , 866); // Russian OEM + AddLanguageDriverId(0x37 , 850); // English OEM (U.S.)* + AddLanguageDriverId(0x40 , 852); // Romanian OEM + AddLanguageDriverId(0x4D , 936); // Chinese GBK (PRC) + AddLanguageDriverId(0x4E , 949); // Korean (ANSI/OEM) + AddLanguageDriverId(0x4F , 950); // Chinese Big5 (Taiwan) + AddLanguageDriverId(0x50 , 874); // Thai (ANSI/OEM) + AddLanguageDriverId(0x58 , 1252); // Western European ANSI + AddLanguageDriverId(0x59 , 1252); // Spanish ANSI + AddLanguageDriverId(0x64 , 852); // Eastern European MS–DOS + AddLanguageDriverId(0x65 , 866); // Russian MS–DOS + AddLanguageDriverId(0x66 , 865); // Nordic MS–DOS + AddLanguageDriverId(0x67 , 861); // Icelandic MS–DOS + AddLanguageDriverId(0x6A , 737); // Greek MS–DOS (437G) + AddLanguageDriverId(0x6B , 857); // Turkish MS–DOS + AddLanguageDriverId(0x6C , 863); // French–Canadian MS–DOS + AddLanguageDriverId(0x78 , 950); // Taiwan Big 5 + AddLanguageDriverId(0x79 , 949); // Hangul (Wansung) + AddLanguageDriverId(0x7A , 936); // PRC GBK + AddLanguageDriverId(0x7B , 932); // Japanese Shift-JIS + AddLanguageDriverId(0x7C , 874); // Thai Windows/MS–DOS + AddLanguageDriverId(0x86 , 737); // Greek OEM + AddLanguageDriverId(0x87 , 852); // Slovenian OEM + AddLanguageDriverId(0x88 , 857); // Turkish OEM + AddLanguageDriverId(0xC8 , 1250); // Eastern European Windows + AddLanguageDriverId(0xC9 , 1251); // Russian Windows + AddLanguageDriverId(0xCA , 1254); // Turkish Windows + AddLanguageDriverId(0xCB , 1253); // Greek Windows + AddLanguageDriverId(0xCC, 1257); // Baltic Windows + } + + private static void AddLanguageDriverId(byte ldid, Encoding encoding) + { + if (!LanguageDriverIdToEncoding.ContainsKey(ldid)) + LanguageDriverIdToEncoding.Add(ldid, encoding); + + if (!EncodingToLanguageDriverId.ContainsKey(encoding)) + EncodingToLanguageDriverId.Add(encoding, ldid); + } + + private static void AddLanguageDriverId(byte ldid, int codePage) + { + try + { + var encoding = Encoding.GetEncoding(codePage); + AddLanguageDriverId(ldid, encoding); + } + catch (NotSupportedException ex) + { + Debug.WriteLine($"Failed to get codepage for language driver:{ldid}."); + WriteMissingEncodingMessage("CP:" + codePage.ToString()); + Debug.WriteLine(ex); + } + + } + + /// + /// Get the language driver id for an encoding + /// + /// The encoding + /// A language driver id + public static byte GetLanguageDriverId(Encoding encoding) + { + if (EncodingToLanguageDriverId.TryGetValue(encoding, out var ldid)) + return ldid; + + return 0; // 0x03; + } + + + /// + /// Get the Encoding for an language driver id + /// + /// Language Driver ID + /// Encoding + public static Encoding GetEncodingForLanguageDriverId(byte ldid) + { + if (LanguageDriverIdToEncoding.TryGetValue(ldid, out var encoding)) + return encoding; + + return null; + } + + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfReader.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfReader.cs new file mode 100644 index 0000000..8674b88 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfReader.cs @@ -0,0 +1,296 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Linq; +using System.Runtime.ExceptionServices; +using System.Text; + + + +namespace NetTopologySuite.IO.Dbf +{ + + + /// + /// Class that allows records in a dbase file to be enumerated. + /// + public class DbfReader : ManagedDisposable, IEnumerable> + { + private int HeaderSize; + private int CurrentIndex = 0; + private readonly BinaryBufferReader Binary = new BinaryBufferReader(Dbf.TableDescriptorSize); + private Stream DbfStream; + + /// + /// Sets or returns the date this file was last updated. + /// + /// + public DateTime LastUpdateDate { get; private set; } + + + /// + /// Return the number of records in the file. + /// + /// + /// RecordCount is saved in DBF file as 32-bit unisigned integer. Record count is limited to 1 Billion (http://www.dbase.com/Knowledgebase/faq/dBASE_Limits_FAQ.html), so it is les than int.MaxValue + public int RecordCount { get; private set; } + + /// + /// Return the length of the records in bytes. + /// + /// + public int RecordSize { get; private set; } + + /// + /// Returns the fields in the dbase file. + /// + public DbfFieldCollection Fields { get; private set; } + + /// + /// Encoding used by dBASE file. + /// + public Encoding Encoding { get; private set; } + + + /// + /// Initializes new instance of the reader. + /// + /// Stream of source DBF file. + /// DBF file encoding or null if encoding should be resolved from DBF reserved bytes. + public DbfReader(Stream stream, Encoding encoding = null) + { + Initialize(stream, encoding); + } + + /// + /// Initializes new instance of the reader. + /// + /// Path to DBF file. + /// DBF file encoding or null if encoding should be resolved from DBF reserved bytes. + public DbfReader(string dbfPath, Encoding encoding = null) + { + encoding = encoding ?? GetEncoding(dbfPath); + try + { + var dbfStream = OpenManagedFileStream(dbfPath, ".dbf", FileMode.Open); + Initialize(dbfStream, encoding); + } + catch + { + DisposeManagedResources(); + throw; + } + } + + private void Initialize(Stream stream, Encoding encoding = null) + { + DbfStream = stream ?? throw new ArgumentNullException("Uninitialized dBASE stream.", nameof(stream)); + + if (DbfStream.Position != 0) + DbfStream.Seek(0, SeekOrigin.Begin); + + Binary.LoadFrom(DbfStream, Dbf.TableDescriptorSize); + + var version = Binary.ReadDbfVersion(); + if (version != Dbf.Dbase3Version) + throw new NotSupportedException("Unsupported dBASE version: " + version); + + LastUpdateDate = Binary.ReadDbfLastUpdateDate(); + RecordCount = Binary.ReadDbfRecordCount(); + HeaderSize = Binary.ReadDbfHeaderSize(); // 2 bytes (table descriptor header + field descriptor headers + header terminator char 0x0d) + RecordSize = Binary.ReadDbfRecordSize(); + Binary.Advance(17); + + Encoding = encoding ?? Binary.ReadDbfEncoding() ?? Encoding.UTF8; // null => Try to read encoding from DBF's reserved bytes + Binary.Advance(2); + + // --- File header is done, read field descriptor header now --- + + var fieldsHeaderSize = HeaderSize - Dbf.TableDescriptorSize - 1; // Header ends with header terminator char 0x0d + var fieldCount = fieldsHeaderSize / Dbf.FieldDescriptorSize; + + if (fieldsHeaderSize % Dbf.FieldDescriptorSize != 0) + throw new NotSupportedException("Invalid dBASE III file format."); + + //Binary.TraceToConsole("File Header", 0, Dbf.TableDescriptorSize); + + Binary.LoadFrom(DbfStream, fieldsHeaderSize); + Fields = new DbfFieldCollection(fieldCount); + for (int i = 0; i < fieldCount; i++) + { + Fields.Add(Binary.ReadDbaseFieldDescriptor(Encoding)); + //Binary.TraceToConsole("Field Header: " + Fields[Fields.Count -1].Name, i * Dbf.FieldDescriptorSize, Dbf.FieldDescriptorSize); + } + + // Last byte is a marker for the end of the DBF file header (including field definitions). + // Trond Benum: This fails for some presumeably valid test shapefiles, so don't raise error. + var headerTerminator = DbfStream.ReadByte(); + if (headerTerminator != Dbf.HeaderTerminatorMark) + { + Debug.WriteLine("Invalid dBASE III header terminator mark: " + headerTerminator); + } + + if (DbfStream.Position != HeaderSize) + { + //reader.BaseStream.Seek(headerSize, SeekOrigin.Begin); + throw new FileLoadException("Reading dBASE III file header failed."); + } + } + + + internal void Restart() + { + DbfStream.Seek(HeaderSize, SeekOrigin.Begin); + } + + + private Encoding GetEncoding(string dbfPath) + { + var cpgText = ReadFileText(dbfPath, ".cpg"); // Esri + + if (string.IsNullOrEmpty(cpgText)) + cpgText = ReadFileText(dbfPath, ".cst"); // GeoServer.org + + if (string.IsNullOrEmpty(cpgText)) + return null; + + try + { + return Encoding.GetEncoding(cpgText); + } + catch (Exception) + { + DbfEncoding.WriteMissingEncodingMessage(cpgText); + return null; + } + } + + private string ReadFileText(string filePath, string fileExtension) + { + filePath = Path.ChangeExtension(filePath, fileExtension); + if (!File.Exists(filePath)) + return null; + + return File.ReadAllText(filePath).Trim(); + } + + /// + /// Reads field values from underlying stream and advances the enumerator to the next record. + /// + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool Read(out bool deleted) + { + BinaryBuffer.TraceToConsole("=== record " + CurrentIndex + " Stream.Position: " + DbfStream.Position + " " + new string('=', 50)); + + if (CurrentIndex >= RecordCount) + { + deleted = false; + return false; + } + + Binary.LoadFrom(DbfStream, RecordSize); + + var deletedFlag = Binary.ReadByte(); + deleted = deletedFlag == Dbf.DeletedRecordMark; + + for (int i = 0; i < Fields.Count; i++) + { + BinaryBuffer.TraceToConsole(Fields[i].Name + " BinaryBuffer.Position: " + Binary.Position); + Fields[i].ReadValue(Binary); + } + + CurrentIndex++; + return true; + } + + + /// + /// Reads values from underlying stream and advances the enumerator to the next record. + /// + /// Array of field values. If null specified new array will be created. + /// Indicates if the reacord was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next element; + /// false if the enumerator has passed the end of the collection. + /// + public bool Read(out IReadOnlyDictionary values, out bool deleted) + { + if (!Read(out deleted)) + { + //values = null; // This would cause recreating array in next iteration + values = DbfField.EmptyFieldValues; + return false; + } + + values = Fields.GetValues(); + return true; + } + + [Conditional("DEBUG_BINARY")] + internal void GetBinaryDiff(DbfReader other, List differences) + { + Binary.GetBinaryDiff("DBF", other.Binary, differences); + } + + /// + protected override void DisposeManagedResources() + { + Binary?.Reset(); + base.DisposeManagedResources(); + } + + IEnumerator> IEnumerable>.GetEnumerator() + { + return new DbfEnumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new DbfEnumerator(this); + } + + private class DbfEnumerator : IEnumerator> + { + private readonly DbfReader Owner; + public IReadOnlyDictionary Current { get; private set; } + object IEnumerator.Current => Current; + + public DbfEnumerator(DbfReader owner) + { + Owner = owner; + } + + public void Reset() + { + Owner.Restart(); + } + + public bool MoveNext() + { + var succeed = Owner.Read(out var fieldValues, out var deleted); + if (deleted) + { + return MoveNext(); + } + + Current = fieldValues; + return succeed; + } + + public void Dispose() + { + // Nothing to dispose + } + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfType.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfType.cs new file mode 100644 index 0000000..61288a4 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfType.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + + + /// + /// dBASE field type + /// + public enum DbfType : byte + { + /// + /// Character + /// + Character = (byte)'C', + + /// + /// Date - 8 bytes (stored as a string in the format YYYYMMDD). + /// + Date = (byte)'D', + + /// + /// Numeric - positive or negative numbers. Number stored as a string. Can store integer and decimal numbers but Esri software uses it only for integer values. + /// + Numeric = (byte)'N', + + /// + /// Positive or negative numbers. Identical to Numeric; maintained for compatibility. Used by Esri software. + /// + Float = (byte)'F', + + /// + /// Logical - one character ('T','F') + /// + Logical = (byte)'L', + + // + // Binary - not dBASE III. This will hold the WKB for a geometry object. + // + // Binary = (byte)'B', + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfWriter.cs new file mode 100644 index 0000000..21b9408 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/DbfWriter.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Linq; +using System.Runtime.ExceptionServices; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + + + /// + /// Class that allows records in a dbase file to be enumerated. + /// + public class DbfWriter : ManagedDisposable + { + private readonly BinaryBufferWriter Binary = new BinaryBufferWriter(Dbf.TableDescriptorSize); + private Stream DbfStream; + + /// + /// Returns the fields in the dbase file. + /// + public DbfFieldCollection Fields { get; private set; } + + /// + /// Encoding of dBASE file + /// + public Encoding Encoding { get; private set; } + + /// + /// Return the length of the records in bytes. + /// + /// + public int RecordSize { get; private set; } + + + /// + /// Return the number of records in the file. + /// + /// + /// RecordCount is saved in DBF file as 32-bit unisigned integer. Record count is limited to 1 Billion (http://www.dbase.com/Knowledgebase/faq/dBASE_Limits_FAQ.html), so it is les than int.MaxValue + public int RecordCount { get; private set; } = 0; + + + /// + /// Initializes new DbaseStreamReader + /// + /// Stream of source DBF file. + /// dBASE field definitions. + /// DBF file encoding or null if encoding should be resolved from DBF reserved bytes. + public DbfWriter(Stream stream, IReadOnlyList fields, Encoding encoding) + { + Encoding = encoding ?? Encoding.UTF8; + IntializeFields(fields); + WriteHeader(stream); + } + + + /// + /// Initializes new DbaseStreamReader + /// + /// Path to DBF file. + /// dBASE field definitions. + /// DBF file encoding or null if encoding should be resolved from DBF reserved bytes. + public DbfWriter(string dbfPath, IReadOnlyList fields, Encoding encoding) + { + Encoding = encoding ?? Encoding.UTF8; + IntializeFields(fields); + WriteCpgEncoding(dbfPath, encoding); + try + { + WriteHeader(OpenManagedFileStream(dbfPath, ".dbf", FileMode.Create)); + } + catch + { + DisposeManagedResources(); + throw; + } + } + + private void IntializeFields(IReadOnlyList fields) + { + if (fields == null || fields.Count < 1) + throw new ArgumentException("dBASE file must contain at least one field.", nameof(fields)); + + if (fields.Count > Dbf.MaxFieldCount) + throw new ArgumentException($"dBASE file must contain no more than {Dbf.MaxFieldCount} fields.", nameof(fields)); + + Fields = new DbfFieldCollection(fields.Count); + for (int i = 0; i < fields.Count; i++) + { + if (fields[i] is DbfCharacterField textField) + textField.Encoding = Encoding; + Fields.Add(fields[i]); + } + } + + private void WriteHeader(Stream stream) + { + DbfStream = stream ?? throw new ArgumentNullException("Uninitialized dBASE stream.", nameof(stream)); + if (DbfStream.Position != 0) + DbfStream.Seek(0, SeekOrigin.Begin); + + var headerSize = Dbf.TableDescriptorSize + Dbf.FieldDescriptorSize * Fields.Count + 1; // 2 bytes (table descriptor header + field descriptor headers + header terminator char 0x0d) + if (headerSize > UInt16.MaxValue) + throw new InvalidDataException("dBASE III header size exceeded " + UInt16.MaxValue.ToString() + " bytes."); + + RecordSize = Fields.Sum(f => f.Length) + 1; // Sum of lengths of all fields + 1 (deletion flag) + + // Table descriptor + Binary.Clear(); + Binary.WriteDbfVersion(Dbf.Dbase3Version); + Binary.WriteDbfLastUpdateDate(DateTime.Now); //.WriteBytes(GetLastUpdateDate()); + + Binary.WriteDbfRecordCount(1); // Write dummy recordCount. This will be replaced at the end of writing. + Binary.WriteDbfHeaderSize(headerSize); + Binary.WriteDbfRecordSize(RecordSize); + Binary.WriteNullBytes(17); + Binary.WriteDbfEncoding(Encoding); + Binary.WriteNullBytes(2); + + // write field description array + foreach (var field in Fields) + { + Binary.WriteDbaseFieldDescriptor(field, Encoding); + } + + // Now header BinaryDataWriter should be at last byte position + Binary.WriteByte(Dbf.HeaderTerminatorMark); + + Binary.CopyTo(DbfStream); + } + + + private void WriteCpgEncoding(string dbfPath, Encoding encoding) + { + if (encoding == null) + return; + + string cpgPath = Path.ChangeExtension(dbfPath, ".cpg"); + var cpgText = encoding.WebName.ToUpperInvariant(); + File.WriteAllText(cpgPath, cpgText); + } + + + /// + /// Writes field values to the underlying stream and advances the position to the next record. + /// + /// + /// true if the enumerator was successfully advanced to the next element; + /// false if the enumerator has passed the end of the collection. + /// + public void Write() + { + Binary.Clear(); + Binary.WriteByte(Dbf.ValidRecordMark); + + for (int i = 0; i < Fields.Count; i++) + { + Fields[i].WriteValue(Binary); + } + RecordCount++; + Binary.CopyTo(DbfStream); + } + + + /// + /// Writes record values to the underlying stream and advances the position to the next record. + /// + /// + /// true if the enumerator was successfully advanced to the next element; + /// false if the enumerator has passed the end of the collection. + /// + public void Write(IReadOnlyDictionary values) + { + Fields.SetValues(values); + Write(); + } + + private void FinalizeWriting() + { + if (DbfStream == null || DbfStream.Position < Dbf.TableDescriptorSize + Dbf.FieldDescriptorSize) // DBF must have at least one field + return; + + DbfStream.WriteByte(Dbf.EndOfFileMark); + + DbfStream.Seek(4, SeekOrigin.Begin); + Binary.Clear(); + Binary.WriteDbfRecordCount(RecordCount); + Binary.CopyTo(DbfStream); + } + + /// + protected override void DisposeManagedResources() + { + FinalizeWriting(); + Binary?.Reset(); + base.DisposeManagedResources(); // FinalizeWriting() is using underlying file streams. Dispose them at the end. + } + } + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfCharacterField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfCharacterField.cs new file mode 100644 index 0000000..540e963 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfCharacterField.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + + /// + /// Character field definition. + /// + public class DbfCharacterField : DbfField + { + private static readonly int MaxFieldLength = 254; + + /// + /// Initializes a new instance of the field class. + /// + /// Field name. + /// Field length. + public DbfCharacterField(string name, int length = 254) : this(name, length, null) + { + } + + internal DbfCharacterField(string name, int length, Encoding encoding) + : base(name, DbfType.Character, Math.Min(length, MaxFieldLength), 0) + { + _encoding = encoding; + } + + /// + /// String representation of current field value. + /// + public string StringValue { get; set; } + + /// + public override object Value + { + get { return StringValue; } + set { StringValue = value?.ToString(); } + } + + internal override void ReadValue(BinaryBufferReader recordData) + { + StringValue = recordData.ReadString(Length, Encoding)?.TrimEnd(); + } + + internal override void WriteValue(BinaryBufferWriter recordData) + { + if (StringValue == null) + { + recordData.WriteNullBytes(Length); + } + else if (StringValue.Length < this.Length) + { + // Length: 4 + // 1.2 => "1.2 "; + recordData.WriteString(StringValue.PadRight(this.Length, ' '), Length, Encoding); // PadRigth for text + } + else + { + recordData.WriteString(StringValue, Length, Encoding); + } + } + + private Encoding _encoding = null; + internal Encoding Encoding + { + get { return _encoding ?? Encoding.UTF8; } + set + { + if (value == null) + throw new ArgumentException($"Field {GetType().Name} cannot have unassigned encoding."); + + if (_encoding != null && _encoding.CodePage != value.CodePage) + throw new ArgumentException($"Cannot change field {Name} ecnoding. It is already assinged to other {nameof(DbfWriter)} with different encoding."); + + _encoding = value; + } + } + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfDateField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfDateField.cs new file mode 100644 index 0000000..3aa8d2b --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfDateField.cs @@ -0,0 +1,81 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Globalization; + +namespace NetTopologySuite.IO.Dbf +{ + + /// + /// Date field definition. + /// + public class DbfDateField : DbfField + { + private static readonly int FieldLength = 8; // This width is fixed and cannot be changed + private static readonly string DateFormat = "yyyyMMdd"; + private static readonly byte[] DefaultValue = GetBytes(' ', FieldLength); + + /// + /// Initializes a new instance of the field class. + /// + /// Field name. + public DbfDateField(string name) + : base(name, DbfType.Date, FieldLength, 0) + { + } + + /// + /// Date representation of current field value. + /// + public DateTime? DateValue { get; set; } + + /// + public override object Value + { + get { return DateValue; } + set { DateValue = (DateTime?)value; } + } + + + internal override void ReadValue(BinaryBufferReader recordData) + { + var valueText = recordData.ReadString(Length, Encoding.ASCII)?.Trim(); + if (string.IsNullOrEmpty(valueText)) + { + DateValue = null; + } + else + { + DateValue = DateTime.ParseExact(valueText, DateFormat, CultureInfo.InvariantCulture); + } + } + + internal override void WriteValue(BinaryBufferWriter recordData) + { + if (DateValue.HasValue) + { + recordData.WriteString(DateValue.Value.ToString(DateFormat, CultureInfo.InvariantCulture), Length, Encoding.ASCII); + } + else + { + // ArcMap 10.6 can create different null date representation in one .shp file! + // My test file pt_utf8.shp have field named 'date' with such binary data: + // === record 0 Stream.Position: 673 + // date BinaryBuffer.Position: 183 + // ReadString(191): '▬▬▬▬▬▬▬▬' // '▬' == char.MinValue == (char)0 + // === record 1 Stream.Position: 1145 + // date BinaryBuffer.Position: 183 + // ReadString(191): ' ' + + // According to https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm + // Null value substitution for Date field is 'Stored as zero'. Storing zero (null) values is also consistent with Numeric and Float field. + + //recordData.WriteBytes(DefaultValue); + recordData.WriteNullBytes(Length); + } + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs new file mode 100644 index 0000000..f7f1b70 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + + + /// + /// dBASE field definition. + /// + public abstract class DbfField + { + + /// + /// Field Name. + /// + public string Name { get; } + + /// + /// Field Type. + /// + public DbfType FieldType { get; } + + /// + /// Length of the data in bytes. + /// + public int Length { get; } + + /// + /// Field decimal count in Binary, indicating where the decimal is. + /// + public int Precision { get; } + + + /// + /// Initializes a new instance of the field class. + /// + /// Field name (max 10 characters). + /// Field type. + /// Field length. + /// Decimal places count. + internal DbfField(string name, DbfType type, int length, int precision) + { + if (string.IsNullOrEmpty(name)) + throw new ArgumentNullException("Empty dBASE field name.", nameof(name)); + + if (name.Length > Dbf.MaxFieldNameLength) + throw new ArgumentNullException($"dBASE III field name cannot be longer than {Dbf.MaxFieldNameLength} characters.", nameof(name)); + + // ArcMap does support number at the begining. + //var beginsWithLetter = IsValidFieldNameLetter(name[0]); + //if (!beginsWithLetter) + // throw new ArgumentNullException($"Invalid dBASE field name: {name}. Field name must begin with a letter.", nameof(name)); + + foreach (var c in name) + { + if (!IsValidFieldNameChar(c)) + throw new ArgumentNullException($"Invalid dBASE field name: {name}. Field name must contain only letter, number or undersocre (_) character.", nameof(name)); + } + + + if (length < 1) + throw new ArgumentException($"Ivalid dBASE field length: {length}.", nameof(length)); + + if (precision < 0) + precision = 0; // throw new ArgumentException($"Ivalid dBASE III field decimal places count: {precision}.", nameof(precision)); + + Name = name; + FieldType = type; + Length = length; + Precision = precision; + } + + private bool IsValidFieldNameChar(char c) + { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || (c >= '0' && c <= '9'); + } + + /// + /// + /// + /// + public static DbfField ShapeField() + { + return null; // new DbaseBinaryField("SHAPE" new DbaseField("Geometry", 'B', 0, 0); + } + + /// + /// + /// + /// + public static DbfField IdField() + { + return null; // new DbaseField("Row", 'I', 0, 0); + } + + /// + public override string ToString() + { + return string.Format("{0} | {1} ({2}, {3})", Name.PadLeft(10), FieldType, Length, Precision); + } + + internal Exception GetFieldValueError(object value, string additionalDescription = "") + { + return new ArgumentException($"Invalid {Name} [{FieldType}:{Length}] field value: {value}." + additionalDescription); + } + + internal static byte[] GetBytes(char c, int length) + { + return Enumerable.Repeat((byte)c, length).ToArray(); + } + + internal abstract void ReadValue(BinaryBufferReader recordData); + internal abstract void WriteValue(BinaryBufferWriter recordData); + + /// + /// Current field value. + /// + /// + /// is used by shapefile readers and writers to hold current record field value. + /// + public abstract object Value { get; set; } + + + + internal static readonly IReadOnlyDictionary EmptyFieldValues = new ReadOnlyDictionary(new Dictionary()); + + /// + /// Creates dBASE field determined using specified value. + /// + /// Field name. + /// Field value type. + /// dBase field definition. + public static DbfField Create(string name, Type type) + { + if (type == null) + throw new ArgumentException("Cannot determine dBASE field type for value."); + + if (type == typeof(string)) + return new DbfCharacterField(name); + + if (type == typeof(bool) || type == typeof(bool?)) + return new DbfLogicalField(name); + + if (type == typeof(DateTime) || type == typeof(DateTime?)) + return new DbfDateField(name); + + if (type == typeof(sbyte) || type == typeof(sbyte?) || type == typeof(byte) || type == typeof(byte?)) + return new DbfNumericField(name, 4, 0); + + if (type == typeof(short) || type == typeof(short?) || type == typeof(ushort) || type == typeof(ushort?)) + return new DbfNumericField(name, 6, 0); + + if (type == typeof(int) || type == typeof(int?) || type == typeof(uint) || type == typeof(uint?)) + return new DbfNumericField(name, 11, 0); + + if (type == typeof(long) || type == typeof(long?) || type == typeof(ulong) || type == typeof(ulong?)) + return new DbfNumericField(name, DbfNumericField.MaxFieldLength, 0); + + if (type == typeof(decimal) || type == typeof(decimal?)) + return new DbfNumericField(name, DbfNumericField.MaxFieldLength, DbfNumericField.MaxFieldPrecision); + + if (type == typeof(double) || type == typeof(float) || type == typeof(double?) || type == typeof(float?)) + return new DbfFloatField(name); + + throw new ArgumentException($"Unsupported dBASE field value: {type} ({type.GetType().Name})"); + } + + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFieldCollection.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFieldCollection.cs new file mode 100644 index 0000000..6f201e6 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFieldCollection.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + /// + /// Collection of dBASE field definitions. + /// + public class DbfFieldCollection : IReadOnlyList + { + + internal DbfFieldCollection(int count) + { + Fields = new List(count); + } + + private readonly List Fields; + private readonly Dictionary FieldDictionary = new Dictionary(StringComparer.OrdinalIgnoreCase); + + /// + /// Gets the field at the specified index. + /// + /// The zero-based index of the field to get. + /// The field at the specified index. + public DbfField this[int index] => Fields[index]; + + /// + /// Gets the field with specified name. + /// + /// The of the field. + /// The field with specified name or null if name was not found. + public DbfField this[string name] + { + get + { + if (FieldDictionary.TryGetValue(name, out var field)) + return field; + return null; + } + } + + + /// + /// Gets the number of fields contained in the collection. + /// + public int Count => Fields.Count; + + IEnumerator IEnumerable.GetEnumerator() + { + return Fields.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return Fields.GetEnumerator(); + } + + internal void Add(DbfField field) + { + Fields.Add(field); + FieldDictionary.Add(field.Name, field); + } + + /// + /// Reads current fields values. + /// + /// Array of field values. + public IReadOnlyDictionary GetValues() + { + var values = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var field in Fields) + { + values[field.Name] = field.Value; + } + return new ReadOnlyDictionary(values); + } + + /// + /// Sets current filed values. + /// + /// + public void SetValues(IReadOnlyDictionary values) + { + if (values == null) + throw new ArgumentNullException("dBASE record must contain values.", nameof(values)); + + if (values.Count < Fields.Count) + throw new ArgumentNullException("Invalid dBASE record value count: " + values.Count + ". Expected: " + Fields.Count, nameof(values)); + + foreach (var field in Fields) + { + if (values.TryGetValue(field.Name, out var value)) + { + field.Value = value; + } + else + { + throw new ArgumentException("Required dBASE attribute value is missing for '" + field.Name + "' field."); + } + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFloatField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFloatField.cs new file mode 100644 index 0000000..9f21718 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfFloatField.cs @@ -0,0 +1,86 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Globalization; + +namespace NetTopologySuite.IO.Dbf +{ + + /// + /// Numeric field definition. + /// + public class DbfFloatField : DbfNumericField + { + // Exponential notation requires 8 additional digits: + // 1 digit for plus/minus mark "-" + // 1 digit for first number digit "1" + // 1 digit for decimal separator "." + // 5 digits for exponent component "e+004" + // -1.2346e+004 => Length: 12, DecimalDigits: 4 => 12 - 4 = 8 + private static readonly int ExponentialNotationDigitCount = 8; + + private static readonly int DefaultFieldLength = 19; // That uses ArcMap 10.6 when creates 'Double' field. + private static readonly int DefaultFieldPrecision = 11; // That uses ArcMap 10.6 when creates 'Double' field. + + private readonly string NumberFormat; + + + /// + /// Initializes a new instance of the field class. + /// + /// Field name. + public DbfFloatField(string name) : this(name, DefaultFieldLength, DefaultFieldPrecision) + { + } + + internal DbfFloatField(string name, int length, int precision) + : base(name, DbfType.Float, length, precision) + { + // Esri uses exponential notation for float fields: + // -12345.6789 (E10) => -1.2345678900E+004 + // -12345.6789 (e4) => -1.2346e+004 + + // Esri writes specific precision to field definition but then ignores it by using exponential notation. + // Exponential notation expresses numbers placing decimal separator always after first non-zero digit. + NumberFormat = "e" + (Length - ExponentialNotationDigitCount).ToString(); + } + + /// + public override object Value + { + get { return NumericValue; } + set + { + if (value == null) + { + NumericValue = null; + } + else + { + NumericValue = Convert.ToDouble(value); + } + } + } + + /// + protected override double StringToNumber(string number) + { + return double.Parse(number, CultureInfo.InvariantCulture); + } + + /// + protected override string NumberToString(double number) + { + var numberString = number.ToString(NumberFormat, CultureInfo.InvariantCulture); +#if DEBUG + // Esri uses two digits in exponential component "e+01" and ads one space at the begining. " -1.11111000000e+02" + // .NET always uses three digits in exponential component "e+001" (there is no space for space). "-1.11111000000e+002" + numberString = numberString.Replace("e+0", "e+").Replace("e-0", "e-"); +#endif + return numberString; + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfLogicalField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfLogicalField.cs new file mode 100644 index 0000000..e8ef4d1 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfLogicalField.cs @@ -0,0 +1,83 @@ +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Dbf +{ + /// + /// Logical field definition. + /// + public class DbfLogicalField : DbfField + { + private readonly static byte DefaultValue = (byte)' '; // (byte)'?'; Initialized to 0x20 (space) otherwise T or F (http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm) + private readonly static byte TrueValue = (byte)'T'; + private readonly static byte FalseValue = (byte)'F'; + private readonly static int FieldLength = 1; // This width is fixed and cannot be changed + + private readonly static string TrueValues = "TtYy"; + private readonly static string FalseValues = "FfNn"; + + + /// + /// Initializes a new instance of the field class. + /// + /// Field name. + public DbfLogicalField(string name) + : base(name, DbfType.Logical, FieldLength, 0) + { + } + + /// + /// Logical representation of current field value. + /// + public bool? LogicalValue { get; set; } + + /// + public override object Value + { + get { return LogicalValue; } + set { LogicalValue = (bool?)value; } + } + + internal override void ReadValue(BinaryBufferReader recordData) + { + var logicalValue = recordData.ReadByteChar(); + + if (TrueValues.Contains(logicalValue)) + { + LogicalValue = true; + } + else if (FalseValues.Contains(logicalValue)) + { + LogicalValue = false; + } + else + { + LogicalValue = null; + } + } + + + internal override void WriteValue(BinaryBufferWriter recordData) + { + if (!LogicalValue.HasValue) + { + recordData.WriteByte(DefaultValue); + } + else if (LogicalValue.Value) + { + recordData.WriteByte(TrueValue); + } + else + { + recordData.WriteByte(FalseValue); + } + } + + } + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfNumericField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfNumericField.cs new file mode 100644 index 0000000..6c2cc81 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfNumericField.cs @@ -0,0 +1,231 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Text; +using System.Globalization; + +namespace NetTopologySuite.IO.Dbf +{ + + /// + /// Numeric field definition. + /// + public abstract class DbfNumericField : DbfField where T : struct, IConvertible, IFormattable + { + internal static readonly int MaxFieldLength = 19; // Decimal point and any sign is included in field width, if present. + internal static readonly int MaxFieldPrecision = 17; // dBASE specs states it could be max 15, but Esri uses up to 17. + + internal DbfNumericField(string name, DbfType type, int length, int precision) + : base(name, type, GetProperLength(length), GetProperPrecision(length, precision)) + { + } + + /// + /// Initializes a new instance of the field class. + /// + /// Field name. + /// Field length. + /// Decmial places count. + protected DbfNumericField(string name, int length, int precision) + : this(name, DbfType.Numeric, length, precision) + { + + } + + /// + /// Numeric representation of current field value. + /// + public T? NumericValue { get; set; } + + internal static int GetProperLength(int length) + { + if (length < 1) + return 1; + return Math.Min(length, MaxFieldLength); + } + + private static int GetProperPrecision(int length, int precision) + { + if (precision < 0) + return 0; + + length = GetProperLength(length); + if (length < 2) + return 0; + + precision = Math.Min(precision, length - 2); // -0.12345 => legth: 8, decimalCount: 5 => should be (length - 3). But Esri allows decimalCount: 6 => (length - 2). + return Math.Min(precision, MaxFieldPrecision); + } + + internal override void ReadValue(BinaryBufferReader recordData) + { + var valueText = recordData.ReadString(Length, Encoding.ASCII)?.Trim(); + if (string.IsNullOrEmpty(valueText)) + { + NumericValue = null; + return; + } + + NumericValue = StringToNumber(valueText); + } + + internal override void WriteValue(BinaryBufferWriter recordData) + { + if (!NumericValue.HasValue) + { + recordData.WriteNullBytes(Length); + return; + } + + var valueText = NumberToString(NumericValue.Value); + + // Length: 4 + // 1.2 => " 1.2"; + if (valueText.Length < this.Length) + { + recordData.WriteString(valueText.PadLeft(this.Length, ' '), Length, Encoding.ASCII); // PadLeft for Values + } + else + { + if (valueText.Length > this.Length) + { + throw GetFieldValueError(valueText, "Field value out of range."); + } + recordData.WriteString(valueText, Length, Encoding.ASCII); + } + } + + + /// + /// Converts the number to its string representation. + /// + /// Number to convert. + /// A string that is equivalent to the specified numer. + protected abstract string NumberToString(T number); + + /// + /// Converts the string representation of a number to its number equivalent. + /// + /// A string that contains a number to convert. + /// A number that is equivalent to the specified string representation of numeric value. + protected abstract T StringToNumber(string number); + } + + + + /// + public class DbfNumericField : DbfNumericField + { + internal static readonly int MaxInt32FieldLength = int.MaxValue.ToString().Length; // 10 (int.MinValue => -2147483648 => 11, but Esri uses 10) + private readonly string NumberFormat = "0"; // For integers + + /// + public DbfNumericField(string name, int length, int precision) + : base(name, DbfType.Numeric, length, precision) + { + if (Precision > 0) + NumberFormat = "0." + new string('0', Precision); + } + + /// + /// Initializes a new instance of the integer field class. + /// + /// Field name. + public DbfNumericField(string name) + : this(name, MaxInt32FieldLength, 0) + { + } + + /// + protected override decimal StringToNumber(string number) + { + // https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm + // Null values are not supported in shapefiles. If a feature class containing nulls is converted to a shapefile, or a database table is converted to a dBASE file, the null values will be changed: + // Number: -1.7976931348623158e+308 (IEEE standard for the maximum negative value) + + return decimal.Parse(number, CultureInfo.InvariantCulture); + } + + /// + protected override string NumberToString(decimal number) + { + var valueString = number.ToString(NumberFormat, CultureInfo.InvariantCulture); + + var decSepPos = valueString.IndexOf('.'); + + // Length: 4 + // 12345.6 + if (decSepPos >= Length) + { + throw GetFieldValueError(valueString, "Field value out of range."); + } + + // Length: 4 + // 123456 + if (decSepPos < 0 && valueString.Length > Length) + { + throw GetFieldValueError(valueString, "Field value out of range."); + } + + if (valueString.Length > Length) + { + valueString = valueString.Substring(0, Length); + } + + return valueString; + } + + /// + public override object Value + { + get { return NumericValue; } + set + { + if (value == null) + { + NumericValue = null; + } + else + { + NumericValue = Convert.ToDecimal(value); + } + } + } + + /// + /// representation of field value. + /// + public int? Int32Value + { + get => ConvertValue(Convert.ToInt32); + set => NumericValue = ConvertToDecimal(value); + } + + /// + /// representation of field value. + /// + public double? DoubleValue + { + get => ConvertValue(Convert.ToDouble); + set => NumericValue = ConvertToDecimal(value); + } + + private T? ConvertValue(Func converTo) where T : struct + { + if (NumericValue.HasValue) + return converTo(NumericValue.Value); + else + return null; + } + + private decimal? ConvertToDecimal(IConvertible value) + { + if (value == null) + return null; + else + return value.ToDecimal(CultureInfo.InvariantCulture); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj b/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj new file mode 100644 index 0000000..44605e9 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj @@ -0,0 +1,18 @@ + + + + netstandard2.0 + NetTopologySuite.IO.Esri + + + + true + + + + true + TRACE;DEBUG + + + + diff --git a/src/NetTopologySuite.IO.Esri.Core/Primitives/ByteExtensions.cs b/src/NetTopologySuite.IO.Esri.Core/Primitives/ByteExtensions.cs new file mode 100644 index 0000000..4c325bb --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Primitives/ByteExtensions.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO +{ + internal static class ByteExtensions + { + public static string ToText(this byte b) + { + return b.ToChar() + " " + b.ToString().PadLeft(3); + } + + public static char ToChar(this byte b) + { + if (b == 0) + return '▬'; + + if (b < 32) + return '¤'; // ⌂ ↔ ¤ + + return (char)b; + } + + public static string CompareToText(this byte b1, byte b2) + { + var sb = new StringBuilder(20); + + sb.Append(b1.ToString().PadLeft(3)); + sb.Append(" | "); + sb.Append(b2.ToString().PadLeft(3)); + + sb.Append(" '" + b2.ToText()); + sb.Append("' | '"); + sb.Append(b2.ToText() + "'"); + + return sb.ToString(); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Primitives/ManagedDisposable.cs b/src/NetTopologySuite.IO.Esri.Core/Primitives/ManagedDisposable.cs new file mode 100644 index 0000000..676ea62 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Primitives/ManagedDisposable.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Text; + +namespace NetTopologySuite.IO +{ + /// + /// Base class witha a mechanism for releasing managed resources. + /// + public abstract class ManagedDisposable : IDisposable + { + private bool IsDisposed = false; + private readonly List ManagedResources = new List(); + + + internal Stream OpenManagedFileStream(string path, string ext, FileMode mode) + { + path = Path.ChangeExtension(path, ext); + + if (mode != FileMode.Open && mode != FileMode.Create) + throw new ArgumentException(nameof(OpenManagedFileStream) + "() suports only " + nameof(FileMode.Open) + " and " + nameof(FileMode.Create) + " file modes.", nameof(mode)); + + if (mode == FileMode.Open && !File.Exists(path)) + throw new FileNotFoundException("File not found.", path); + + FileAccess access = (mode == FileMode.Open) ? FileAccess.Read : FileAccess.Write; + FileShare share = (mode == FileMode.Open) ? FileShare.Read : FileShare.None; + FileOptions options = (mode == FileMode.Open) ? FileOptions.SequentialScan : FileOptions.None; + + + var stream = new FileStream(path, mode, access, share, 4096, options); + AddManagedResource(stream); + return stream; + } + + private void Dispose(bool disposing) + { + if (IsDisposed) + return; + + if (disposing) + { + // Dispose managed state (managed objects) + DisposeManagedResources(); + } + + IsDisposed = true; + } + + /// + /// Adds a resource which will be disposed at the end of life of this instance. + /// + /// + protected void AddManagedResource(IDisposable resource) + { + ManagedResources.Add(resource); + } + + + /// + /// Disposes managed objects assosiated with this instance. + /// + protected virtual void DisposeManagedResources() + { + for (int i = ManagedResources.Count - 1; i >= 0; i--) + { + try + { + ManagedResources[i]?.Dispose(); + } + catch (Exception ex) + { + Debug.WriteLine(GetType().Name + " failed to dispose managed resources."); + Debug.WriteLine(ex.Message); + } + } + } + + /// + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/README.md b/src/NetTopologySuite.IO.Esri.Core/README.md new file mode 100644 index 0000000..35dec50 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/README.md @@ -0,0 +1,267 @@ +# NetTopologySuite.IO.Esri.Core + +This library provides forward-only readers and writers for [Esri shapefiles](https://support.esri.com/en/white-paper/279). +It is vanilla .NET Standard 2.0 library without any dependices. + + +## Dbf + +Shapefile feature attributes are held in a dBASE format file (.dbf extension). Each attribute record +has a one-to-one relationship with the associated shape record. Classes whose name starts +with `Dbf` (eg. `DbfReader`) provide direct access to dBASE files. + +```c# +using (var dbf = new DbfReader(dbfPath)) +{ + foreach (var field in dbf.Fields) + { + Console.WriteLine(field); + } + + foreach (var record in dbf) + { + Console.WriteLine("Record ID: " + record["Id"]); + foreach (var attr in record) + { + Console.WriteLine($" {attr.Key}: {attr.Value}"); + } + } +} +``` + + +## Shp + +The main file (.shp extension) is a variable-record-length file in which each record describes +a shape with a list of its vertices. Classes whose name starts with `Shp` (eg. `ShpPointReader`) +provide direct access to main file. + +```c# +using (var shpStream = File.OpenRead(shpPath)) +using (var shp = new ShpPointReader(shpStream)) +{ + Console.WriteLine(shp.ShapeType); + while (shp.Read()) + { + Console.WriteLine(shp.Shape); + } +} +``` + + +## Shx + +The index file (.shx extension) stores the offset and content length for each record in SHP file. +As there is no additional value, this file is ignored during reading shapefiles. +Writing SHX data is handled directly by `ShpWriter` classes. + + +## Shapefile + +All three files described above form a shapefile. Unified access to shapefile triplet +is provided through classes whose name starts with `Shapefile` (eg. `ShapefilePointReader`). +Under the hood they are decorators wrapping `Dbf` and `Shp` classes. + +### Reading shapefiles using c# code + +```c# +// Intuitive but GC heavy method +using (var shp = new ShapefilePointReader(shpPath)) +{ + Console.WriteLine(shp.ShapeType); + foreach (var field in shp.Fields) + { + Console.WriteLine(field); + } + + foreach (var feature in shp) + { + Console.WriteLine("Record ID: " + feature.Attributes["Id"]); + foreach (var attr in feature.Attributes) + { + Console.WriteLine($" {attr.Key}: {attr.Value}"); + } + Console.WriteLine($" SHAPE: {feature.Shape}"); + } +} +``` + +```c# +// Fast and GC friendly method +using (var shp = ShapefileReader.Open(shpPath)) +{ + Console.WriteLine(shp.ShapeType); + foreach (var field in shp.Fields) + { + Console.WriteLine(field); + } + + while (shp.Read(out var deleted)) + { + if (deleted) + continue; + + Console.WriteLine("Record ID: " + shp.Fields["Id"].Value); + foreach (var field in shp.Fields) + { + Console.WriteLine($" {field.Name}: {field.Value}"); + } + Console.WriteLine($" SHAPE: {shp.Shape}"); + } +} +``` + + +### Writing shapefiles using c# code + + +```c# +// Intuitive but GC heavy method +var features = new List(); +for (int i = 1; i < 5; i++) +{ + var attributes = new Dictionary(); + attributes["date"] = new DateTime(2000, 1, i + 1); + attributes["float"] = i * 0.1; + attributes["int"] = i; + attributes["logical"] = i % 2 == 0; + attributes["text"] = i.ToString("0.00"); + + var line = new List(); + line.Add(new ShpCoordinates(i, i + 1, i)); + line.Add(new ShpCoordinates(i, i, i)); + line.Add(new ShpCoordinates(i + 1, i, i)); + + var shapeParts = new List>(); + shapeParts.Add(line); + + var feature = new ShapefileFeature(shapeParts, attributes); + features.Add(feature); +} + +var dateField = DbfField.Create("date", typeof(DateTime)); +var floatField = DbfField.Create("float", typeof(double)); +var intField = DbfField.Create("int", typeof(int)); +var LogicalField = DbfField.Create("logical", typeof(bool)); +var textField = DbfField.Create("text", typeof(string)); + +using (var shp = new ShapefileMultiPartWriter(shpPath, ShapeType.PolyLine, dateField, floatField, intField, LogicalField, textField)) +{ + shp.Write(features); +} + +foreach (var feature in ShapefileReader.ReadAll(shpPath)) +{ + Console.WriteLine(feature.Attributes); + Console.WriteLine(feature.Shape); +} +``` + +```c# +// Fast and GC friendly method +var dateField = new DbfDateField("date"); +var floatField = new DbfFloatField("float"); +var intField = new DbfNumericField("int"); +var LogicalField = new DbfLogicalField("logical"); +var textField = new DbfCharacterField("text"); + +using (var shp = new ShapefileMultiPartWriter(shpPath, ShapeType.PolyLine, dateField, floatField, intField, LogicalField, textField)) +{ + for (int i = 1; i < 5; i++) + { + // Avoid expensive boxing and unboxing value types + dateField.DateValue = new DateTime(2000, 1, i + 1); + floatField.NumericValue = i * 0.1; + intField.NumericValue = i; + LogicalField.LogicalValue = i % 2 == 0; + textField.StringValue = i.ToString("0.00"); + + // Avoid realocating new ShpCoordinates[] array over and over. + shp.Shape.Clear(); + shp.Shape.StartNewPart(); + shp.Shape.AddPoint(i, i + 1, i); + shp.Shape.AddPoint(i, i, i); + shp.Shape.AddPoint(i + 1, i, i); + + shp.Write(); + Console.WriteLine("Feature number " + i + " was written."); + } +} +``` + + +## Performance +This library was designed with performance in mind. Thats why preferred implementation +forces reading/writing whole shapefile using once initialized ShpPointCollection buffer +and once initialized attributes array buffer. That way .NET garbage collector +doesn't have to dispose every single ShpPoint instance to reclaim the memory, +and after that alocate new memory for next ShpPoint instance. +It's like using [ArrayPool.Shared](https://docs.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1.shared) +but without the cost of renting and returning. + +There is a lot of other optimizations, to name a few of them: +- Using [structs over classes](https://adamsitnik.com/Value-Types-vs-Reference-Types/) + for storing `ShpPoint` coordinates. +- Using the `ShpPointCollection` which under the hood is a buffer with smart resizing capabilities. +- Using dedicated `BinaryBuffer` class which avoids file I/O operations + by reading/writing a whole shape record data at once instead of reading/writing + every single coordinate one by one. Again - without resource costly memory realocating. +- The `BinaryBuffer` have also custom bit-converter functions with support + for big-endian and little-endian byte order. It's implementation avoids realocating + new byte[8] array again and again, any time you want to write single coordinate. + This avoid bottleneck GC and much faster than + [BitConverter](https://docs.microsoft.com/en-us/dotnet/api/system.bitconverter.getbytes#System_BitConverter_GetBytes_System_Double_) . + +See also https://github.com/dotnet/runtime/issues/7291 + +## Encoding + +The .NET Framework supports a large number of character encodings and code pages. +On the other hand, .NET Core only supports +[limited list](https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider.instance#remarks) of encodings. +To retrieve an encoding that is present in the .NET Framework on the Windows +desktop but not in .NET Core, you need to do the following: +1. Add to your project reference to to the [System.Text.Encoding.CodePages.dll](https://www.nuget.org/packages/System.Text.Encoding.CodePages/). +2. Put the following line somewhere in your code: + `Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);` + + +## Validation + +For performance reasons this library does not provide any kind of validation +during reading or writing shapefiles. If you write new shapefile it is your +responsibility to write properly formated data. Eg. if you try to write +polygon with only two points it will not throw any error. + +- If you read a shapefile from trustworthy source (eg. authored using ArcMap) + you will proceed very fast. If not, it is up to you to validate every + single shape (`ShpPointCollection`) you read. +- If you write shapefile based on trustworthy geometries (eg. from PostGIS database) + you will proceed very fast. If not, it is up to you to validate + every singe shape (`ShpPointCollection`) you write. + +However, there are some quirks. Where it is possible the library is forgiving. +If you read corrupted shapefile containing polygon with only two points +it will return `NullShape` (empty `ShpPointCollection`) instead of throwing an error. + + +## Test + +This library was tested with shapefiles created by ArcMap 10.6. +Library read those files to memory and then wrote it back to files. +Then output files was checked byte by byte for differences. +At the moment the only inconsistency spoted is related to Date fields. +ArcMap 10.6 can create different null date representation in one .shp file! +Test file pt_utf8.shp have field named 'date' with such binary data: +``` +=== record 0 Stream.Position: 673 +... +date BinaryBuffer.Position: 183 +ReadString(191): '▬▬▬▬▬▬▬▬' // '▬' == char.MinValue == (char)0 +=== record 1 Stream.Position: 1145 +... +date BinaryBuffer.Position: 183 +ReadString(191): ' ' +``` +According to [Esri documentation](https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm) +Null value substitution for Date field is *'Stored as zero'*. So this library saves null dates as zero (null) bytes which is also consistent with Numeric and Float fields. diff --git a/src/NetTopologySuite.IO.Esri.Core/ShapeType.cs b/src/NetTopologySuite.IO.Esri.Core/ShapeType.cs new file mode 100644 index 0000000..72f2285 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/ShapeType.cs @@ -0,0 +1,247 @@ +using System; + +namespace NetTopologySuite.IO.Shapefile +{ + + + /// + /// Shapefile geometry types. + /// + public enum ShapeType : int + { + + /// + /// Null Shape + /// + /// + /// Indicates a null shape, with no geometric data for the shape. Each feature type (point, line, polygon, etc.) + /// supports nulls - it is valid to have points and null points in the same shapefile. Often null shapes are place + /// holders - they are used during shapefile creation and are populated with geometric data soon after they are created. + /// + NullShape = 0, + + /// + /// Point in the X, Y space. + /// + Point = 1, + + /// + /// PolyLine in the X, Y space. + /// + /// + /// A PolyLine is an ordered set of vertices that consists of one or more parts. + /// A part is a connected sequence of two or more points. + /// Parts may or may not be connected to one another. Parts may or may not intersect one another. + /// + PolyLine = 3, + + /// + /// Polygon in the X, Y space. + /// + /// + /// A polygon consists of one or more rings. A ring is a connected sequence of four or more points that form a closed, non-self-intersecting loop. + /// A polygon may contain multiple outer rings. The order of vertices or orientation for a ring indicates which side of the ring + /// is the interior of the polygon. The neighborhood to the right of an observer walking along + /// the ring in vertex order is the neighborhood inside the polygon. Vertices of rings defining + /// holes in polygons are in a counterclockwise direction. Vertices for a single, ringed + /// polygon are, therefore, always in clockwise order. The rings of a polygon are referred to + /// as its parts. + /// + Polygon = 5, + + /// + /// MultiPoint in the X, Y space. + /// + /// + /// A MultiPoint represents a set of points. + /// + MultiPoint = 8, + + + + + /// + /// Measured Point in the X, Y, Z space. + /// + /// Named as PointZ in ESRI Shapefile Technical Description. + PointZM = 11, + + /// + /// Measured PolyLine in the X, Y, Z space. + /// + /// Named as PolyLineZ in ESRI Shapefile Technical Description. + PolyLineZM = 13, + + /// + /// Measured Polygon in the X, Y, Z space. + /// + /// Named as PolygonZ in ESRI Shapefile Technical Description. + PolygonZM = 15, + + /// + /// Measured MultiPoint in the X, Y, Z space. + /// + /// Named as MultiPointZ in ESRI Shapefile Technical Description. + MultiPointZM = 18, + + + + + /// + /// Measured Point in the X, Y space. + /// + PointM = 21, + + /// + /// Measured LineString in the X, Y space. + /// + PolyLineM = 23, + + /// + /// Measured Polygon in the X, Y space. + /// + PolygonM = 25, + + /// + /// Measured MultiPoint in the X, Y space. + /// + MultiPointM = 28, + + /// + /// MultiPatch + /// + [Obsolete("This shape type is not supported.")] + MultiPatch = 31, + + + + // GeoTools + + /// + /// Point in the X, Y, Z space. + /// + /// + /// This shape type is not conformant with ESRI Shapefile Technical Description. Use PointZM instead. + /// + [Obsolete("This shape type is not conformant with ESRI Shapefile Technical Description. Use PointZM instead.")] + PointZ = 9, + + /// + /// PolyLine in the X, Y, Z space. + /// + /// + /// This shape type is not conformant with ESRI Shapefile Technical Description. Use PointZM instead. + /// + [Obsolete("This shape type is not conformant with ESRI Shapefile Technical Description. Use PolyLineZM instead.")] + PolyLineZ = 10, + + /// + /// Polygon in the X, Y, Z space. + /// + /// + /// This shape type is not conformant with ESRI Shapefile Technical Description. Use PolygonZM instead. + /// + [Obsolete("This shape type is not conformant with ESRI Shapefile Technical Description. Use PointZM instead.")] + PolygonZ = 19, + + /// + /// MultiPoint in the X, Y, Z space. + /// + /// + /// This shape type is not conformant with ESRI Shapefile Technical Description. Use MultiPointZM instead. + /// + [Obsolete("This shape type is not conformant with ESRI Shapefile Technical Description. Use PointZM instead.")] + MultiPointZ = 20, + + } + + + +#pragma warning disable CS0618 // Type or member is obsolete + + /// + /// Helper methods for ShapeType enumeration. + /// + public static class ShapeTypeExtensions + { + /// + /// Indicates if the geometric data for the shape associated with this type contains Z coordinate. + /// + public static bool HasZ(this ShapeType type) + { + return type == ShapeType.PointZ + || type == ShapeType.MultiPointZ + || type == ShapeType.PolyLineZ + || type == ShapeType.PolygonZ + + || type == ShapeType.PointZM + || type == ShapeType.MultiPointZM + || type == ShapeType.PolyLineZM + || type == ShapeType.PolygonZM; + } + + /// + /// Indicates if the geometric data for the shape associated with this type contains Measure value. + /// + public static bool HasM(this ShapeType type) + { + return type == ShapeType.PointM + || type == ShapeType.MultiPointM + || type == ShapeType.PolyLineM + || type == ShapeType.PolygonM + + || type == ShapeType.PointZM + || type == ShapeType.MultiPointZM + || type == ShapeType.PolyLineZM + || type == ShapeType.PolygonZM; + } + + + /// + /// Indicates if shape associated with this type is a Point. + /// + public static bool IsPoint(this ShapeType type) + { + return type == ShapeType.Point + || type == ShapeType.PointM + || type == ShapeType.PointZM + || type == ShapeType.PointZ; + } + + /// + /// Indicates if shape associated with this type is a MultiPoint. + /// + public static bool IsMultiPoint(this ShapeType type) + { + return type == ShapeType.MultiPoint + || type == ShapeType.MultiPointM + || type == ShapeType.MultiPointZM + || type == ShapeType.MultiPointZ; + } + + /// + /// Indicates if shape associated with this type is a PolyLine. + /// + public static bool IsPolyLine(this ShapeType type) + { + return type == ShapeType.PolyLine + || type == ShapeType.PolyLineM + || type == ShapeType.PolyLineZM + || type == ShapeType.PolyLineZ; + } + + /// + /// Indicates if shape associated with this type is a Polygon. + /// + public static bool IsPolygon(this ShapeType type) + { + return type == ShapeType.Polygon + || type == ShapeType.PolygonM + || type == ShapeType.PolygonZM + || type == ShapeType.PolygonZ; + } + } +#pragma warning restore CS0618 // Type or member is obsolete + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile.cs new file mode 100644 index 0000000..0762282 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile.cs @@ -0,0 +1,47 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + + + /// + /// Base shapefile class. + /// + public abstract class Shapefile : ManagedDisposable + { + internal const int FileCode = 9994; // 0x0000270A; + internal const int Version = 1000; + + internal static readonly int FileHeaderSize = 100; + internal static readonly int RecordHeaderSize = 2 * sizeof(int); + + + /// + /// Minimal Measure value considered as not "no-data". + /// + /// + /// Any floating point number smaller than –10E38 is considered by a shapefile reader + /// to represent a "no data" value. This rule is used only for measures (M values). + ///
+ /// http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf (page 2, bottom) + ///
+ internal static readonly double MeasureMinValue = -10e38; + + /// + /// Shape type. + /// + public abstract ShapeType ShapeType { get; } + + /// + /// Shapefile attribute definitions with current attribute values. + /// + public abstract DbfFieldCollection Fields { get; } + + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPartReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPartReader.cs new file mode 100644 index 0000000..82feb7d --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPartReader.cs @@ -0,0 +1,31 @@ +using NetTopologySuite.IO.Dbf; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Polygon or PolyLine shapefile reader. + /// + public class ShapefileMultiPartReader : ShapefileReader + { + /// + public ShapefileMultiPartReader(Stream shpStream, Stream dbfStream, Encoding encoding = null) + : base(shpStream, dbfStream, encoding) + { } + + /// + public ShapefileMultiPartReader(string shpPath, Encoding encoding = null) + : base(shpPath, encoding) + { } + + + internal override ShpReader CreateShpReader(Stream shpStream) + { + return new ShpMultiPartReader(shpStream); + } + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPointReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPointReader.cs new file mode 100644 index 0000000..dba2a30 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileMultiPointReader.cs @@ -0,0 +1,35 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// MultiPoint shapefile reader. + /// + public class ShapefileMultiPointReader : ShapefileReader + { + + /// + public ShapefileMultiPointReader(Stream shpStream, Stream dbfStream, Encoding encoding = null) + : base(shpStream, dbfStream, encoding) + { } + + + /// + public ShapefileMultiPointReader(string shpPath, Encoding encoding = null) + : base(shpPath, encoding) + { } + + + internal override ShpReader CreateShpReader(Stream shpStream) + { + return new ShpMultiPointReader(shpStream); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefilePointReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefilePointReader.cs new file mode 100644 index 0000000..ec04095 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefilePointReader.cs @@ -0,0 +1,95 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + + /// + /// Point shapefile reader. + /// + public class ShapefilePointReader : ShapefileReader, IEnumerable + { + /// + public ShapefilePointReader(Stream shpStream, Stream dbfStream, Encoding encoding = null) + : base(shpStream, dbfStream, encoding) + { } + + /// + public ShapefilePointReader(string shpPath, Encoding encoding = null) + : base(shpPath, encoding) + { } + + + internal override ShpReader CreateShpReader(Stream shpStream) + { + return new ShpPointReader(shpStream); + } + + /// + /// Reads next feature record containing shape geometry and its attributes. + /// + /// Shapefile point feature. + /// Indicates if this reacord was marked as deleted. + /// Value indicating if reading next record was successful. + public bool Read(out ShapefilePointFeature feature, out bool deleted) + { + if (!Read(out deleted)) + { + feature = new ShapefilePointFeature(ShpCoordinates.NullPoint, DbfField.EmptyFieldValues); + return false; + } + + feature = new ShapefilePointFeature(Shape[0], Fields.GetValues()); + return true; + } + + /// + public IEnumerator GetEnumerator() + { + return new ShapefilePointEnumerator(this); + } + + private class ShapefilePointEnumerator : IEnumerator + { + private readonly ShapefilePointReader Owner; + public ShapefilePointFeature Current { get; private set; } + object IEnumerator.Current => Current; + + public ShapefilePointEnumerator(ShapefilePointReader owner) + { + Owner = owner; + } + + public void Reset() + { + Owner.Restart(); + } + + public bool MoveNext() + { + ShapefilePointFeature feature; + var succeed = Owner.Read(out feature, out var deleted); + + if (deleted) + { + return MoveNext(); + } + Current = feature; + return succeed; + } + + public void Dispose() + { + // Nothing to dispose + } + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileReader.cs new file mode 100644 index 0000000..edcf00d --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Readers/ShapefileReader.cs @@ -0,0 +1,257 @@ +using NetTopologySuite.IO.Dbf; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Base class for reading a shapefile. + /// + public abstract class ShapefileReader : Shapefile, IEnumerable + { + private readonly ShpReader ShpReader; + private readonly DbfReader DbfReader; + + + /// + /// Initializes a new instance of the reader class. + /// + /// SHP file stream. + /// DBF file stream. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + public ShapefileReader(Stream shpStream, Stream dbfStream, Encoding encoding) + { + DbfReader = new DbfReader(dbfStream, encoding); + + ShpReader = CreateShpReader(shpStream); + ShapeType = ShpReader.ShapeType; + + } + + /// + /// Initializes a new instance of the reader class. + /// + /// Path to SHP file. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + public ShapefileReader(string shpPath, Encoding encoding = null) + { + try + { + DbfReader = new DbfReader(Path.ChangeExtension(shpPath, ".dbf"), encoding); + + var shpStream = OpenManagedFileStream(shpPath, ".shp", FileMode.Open); + ShpReader = CreateShpReader(shpStream); + ShapeType = ShpReader.ShapeType; + + var prjFile = Path.ChangeExtension(shpPath, ".prj"); + if (File.Exists(prjFile)) + Projection = File.ReadAllText(prjFile); + } + catch + { + DisposeManagedResources(); + throw; + } + } + + internal abstract ShpReader CreateShpReader(Stream shpStream); + + /// + public override DbfFieldCollection Fields => DbfReader.Fields; + + /// + public override ShapeType ShapeType { get; } = ShapeType.NullShape; + + /// + /// Current shape read from the underlying SHP file. + /// + public ShpShapeBuilder Shape => ShpReader.Shape; + + + /// + /// Encoding used by the shapefile. + /// + public Encoding Encoding => DbfReader.Encoding; + + + /// + /// The minimum bounding rectangle orthogonal to the X and Y (and potentially the M and Z). + /// + public ShpBoundingBox BoundingBox => ShpReader.BoundingBox; + + + /// + /// Well-known text representation of coordinate reference system metadata from .prj file. + /// + /// + /// https://support.esri.com/en/technical-article/000001897 + /// /> + public string Projection { get; } = null; + + /// + /// Reads feature shape and attributes from underlying SHP and DBF files and writes them to and properties. + /// + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool Read(out bool deleted) + { + var readShpSucceed = ShpReader.Read(); + var readDbfSucceed = DbfReader.Read(out deleted); + + if (readDbfSucceed != readShpSucceed) + throw new FileLoadException("Corrupted shapefile data. " + + "The dBASE table must contain feature attributes with one record per feature. " + + "There must be one-to-one relationship between geometry and attributes."); + + return readDbfSucceed; + } + + + /// + protected override void DisposeManagedResources() + { + ShpReader?.Dispose(); + DbfReader?.Dispose(); + + base.DisposeManagedResources(); // This will dispose streams used by ShpReader and DbfReader. Do it at the end. + } + + /// + /// Moves reader back to its initial position. + /// + public void Restart() + { + DbfReader.Restart(); + ShpReader.Restart(); + } + + #region *** Enumerator *** + + IEnumerator IEnumerable.GetEnumerator() + { + return new ShapefileEnumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new ShapefileEnumerator(this); + } + + private class ShapefileEnumerator : IEnumerator + { + private readonly ShapefileReader Owner; + public ShapefileFeature Current { get; private set; } + object IEnumerator.Current => Current; + + public ShapefileEnumerator(ShapefileReader owner) + { + Owner = owner; + } + + public void Reset() + { + Owner.Restart(); + } + + public bool MoveNext() + { + if (!Owner.Read(out var deleted)) + { + return false; + } + + if (deleted) + { + return MoveNext(); + } + + Current = new ShapefileFeature(Owner.Shape.GetParts(), Owner.Fields.GetValues()); + return true; + } + + public void Dispose() + { + // Nothing to dispose + } + } + + #endregion + + + private readonly static BinaryBufferReader ShpHeader = new BinaryBufferReader(Shapefile.FileHeaderSize); + + /// + /// Opens shapefile reader. + /// + /// Path to shapefile. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Shapefile reader. + public static ShapefileReader Open(string shpPath, Encoding encoding = null) + { + var shapeType = Core.ShpReader.GetShapeType(shpPath); + + if (shapeType.IsPoint()) + { + return new ShapefilePointReader(shpPath, encoding); + } + else if (shapeType.IsMultiPoint()) + { + return new ShapefileMultiPointReader(shpPath, encoding); + } + else if (shapeType.IsPolyLine() || shapeType.IsPolygon()) + { + return new ShapefileMultiPartReader(shpPath, encoding); + } + else + { + throw new FileLoadException("Unsupported shapefile type: " + shapeType, shpPath); + } + } + + + /// + /// Reads all features from shapefile. + /// + /// Path to shapefile. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Shapefile features. + public static ShapefileFeature[] ReadAll(string shpPath, Encoding encoding = null) + { + using (var shp = Open(shpPath, encoding)) + { + return shp.ToArray(); + } + } + + [Conditional("DEBUG_BINARY")] + internal void GetBinaryDiff(ShapefileReader other, List differences) + { + ShpReader.GetBinaryDiff(other.ShpReader, differences); + DbfReader.GetBinaryDiff(other.DbfReader, differences); + + differences.Add("SHP Records"); + int recNo = 1; + while (Read(out var del) && other.Read(out var delOther)) + { + differences.Add("Record number: " + recNo++); + if (del != delOther) + { + differences.Add("Deleted: " + del + " | " + delOther); + } + ShpReader.GetBinaryDiff(other.ShpReader, differences); + } + + } + } + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/ShapefileFeature.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/ShapefileFeature.cs new file mode 100644 index 0000000..2711a38 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/ShapefileFeature.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Geometry and attribute information for the spatial feature in shapefile. + /// + public class ShapefileFeature + { + /// + /// Feature shape points. + /// + public IReadOnlyList> Shape { get; } + + /// + /// Feature attributes. + /// + public IReadOnlyDictionary Attributes { get; } + + + /// + /// Initializes new ShapefileFeature struct. + /// + /// Feature shape points. + /// Feature attributes. + public ShapefileFeature(IReadOnlyList> shape, IReadOnlyDictionary attributes) + { + Shape = shape; + Attributes = attributes; + } + } + + + + + /// + /// Geometry and attribute information for the point feature in shapefile. + /// + public class ShapefilePointFeature + { + /// + /// Feature point. + /// + public ShpCoordinates Shape { get; } + + /// + /// Feature attributes. + /// + public IReadOnlyDictionary Attributes { get; } + + + /// + /// Initializes new ShapefileFeature struct. + /// + /// Feature shape points. + /// Feature attributes. + public ShapefilePointFeature(ShpCoordinates shape, IReadOnlyDictionary attributes) + { + Shape = shape; + Attributes = attributes; + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPartWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPartWriter.cs new file mode 100644 index 0000000..da60d5c --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPartWriter.cs @@ -0,0 +1,35 @@ +using NetTopologySuite.IO.Dbf; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Polygon or PolyLine shapefile writer. + /// + public class ShapefileMultiPartWriter : ShapefileWriter + { + /// + public ShapefileMultiPartWriter(Stream shpStream, Stream shxStream, Stream dbfStream, ShapeType type, IReadOnlyList fields, Encoding encoding = null) + : base(shpStream, shxStream, dbfStream, type, fields, encoding) + { } + + /// + public ShapefileMultiPartWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefileMultiPartWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { + } + + internal override ShpWriter CreateShpWriter(Stream shpStream, Stream shxStream) + { + return new ShpMultiPartWriter(shpStream, shxStream, ShapeType); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPointWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPointWriter.cs new file mode 100644 index 0000000..525a4f0 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileMultiPointWriter.cs @@ -0,0 +1,37 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// MultiPoint shapefile writer. + /// + public class ShapefileMultiPointWriter : ShapefileWriter + { + /// + public ShapefileMultiPointWriter(Stream shpStream, Stream shxStream, Stream dbfStream, ShapeType type, IReadOnlyList fields, Encoding encoding = null) + : base(shpStream, shxStream, dbfStream, type, fields, encoding) + { } + + /// + public ShapefileMultiPointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefileMultiPointWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { + } + + + internal override ShpWriter CreateShpWriter(Stream shpStream, Stream shxStream) + { + return new ShpMultiPointWriter(shpStream, shxStream, ShapeType); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefilePointWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefilePointWriter.cs new file mode 100644 index 0000000..e277b7d --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefilePointWriter.cs @@ -0,0 +1,75 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Point shapefile writer. + /// + public class ShapefilePointWriter : ShapefileWriter + { + /// + public ShapefilePointWriter(Stream shpStream, Stream shxStream, Stream dbfStream, ShapeType type, IReadOnlyList fields, Encoding encoding = null) + : base(shpStream, shxStream, dbfStream, type, fields, encoding) + { } + + /// + public ShapefilePointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefilePointWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { + } + + private ShpPointWriter PointWriter; + + internal override ShpWriter CreateShpWriter(Stream shpStream, Stream shxStream) + { + PointWriter = new ShpPointWriter(shpStream, shxStream, ShapeType); + return PointWriter; + } + + /// + /// Writes feature record. + /// + /// Feature record. + public void Write(ShapefilePointFeature feature) + { + Point = feature.Shape; + Fields.SetValues(feature.Attributes); + + Write(); + } + + /// + /// Writes feature record collection. + /// + /// Feature record collection + public void Write(IEnumerable features) + { + foreach (var feature in features) + { + Write(feature); + } + } + + /// + /// Point shape. + /// + public ShpCoordinates Point + { + get => PointWriter.Point; + set => PointWriter.Point = value; + } + + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileWriter.cs new file mode 100644 index 0000000..75a0438 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shapefile/Writers/ShapefileWriter.cs @@ -0,0 +1,183 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Base class for writing a shapefile. + /// + public abstract class ShapefileWriter : Shapefile + { + private readonly ShpWriter ShpWriter; + private readonly DbfWriter DbfWriter; + + /// + /// Initializes a new instance of the writer class. + /// + /// SHP file stream. + /// SHX file stream. + /// DBF file stream. + /// Shape type. + /// Shapefile fields definitions. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + internal ShapefileWriter(Stream shpStream, Stream shxStream, Stream dbfStream, ShapeType type, IReadOnlyList fields, Encoding encoding) + { + DbfWriter = new DbfWriter(dbfStream, fields, encoding); + + + ShpWriter = CreateShpWriter(shpStream, shxStream); + ShapeType = type; + } + + + /// + /// Initializes a new instance of the writer class. + /// + /// Path to SHP file. + /// Shape type. + /// Shapefile attribute definitions. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Projection metadata for the shapefile (.prj file). + internal ShapefileWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + try + { + DbfWriter = new DbfWriter(Path.ChangeExtension(shpPath, ".dbf"), fields, encoding); + + ShapeType = type; + var shpStream = OpenManagedFileStream(shpPath, ".shp", FileMode.Create); + var shxStream = OpenManagedFileStream(shpPath, ".shx", FileMode.Create); + ShpWriter = CreateShpWriter(shpStream, shxStream); + + if (!string.IsNullOrWhiteSpace(projection)) + File.WriteAllText(Path.ChangeExtension(shpPath, ".prj"), projection); + } + catch + { + DisposeManagedResources(); + throw; + } + + } + + + /// + /// Initializes a new instance of the writer class. + /// + /// Path to SHP file. + /// Shape type. + /// Shapefile attribute definitions. + internal ShapefileWriter(string shpPath, ShapeType type, params DbfField[] fields) : this(shpPath, type, fields, null, null) + { + } + + internal abstract ShpWriter CreateShpWriter(Stream shpStream, Stream shxStream); + + /// + public override ShapeType ShapeType { get; } = ShapeType.NullShape; + + /// + public override DbfFieldCollection Fields => DbfWriter.Fields; + + /// + /// Current shape to be written to underlying SHP file. + /// + public ShpShapeBuilder Shape => ShpWriter.Shape; + + + /// + /// Wrties and values to underlying SHP and DBF files. + /// + public void Write() + { + ShpWriter.Write(); + DbfWriter.Write(); + } + + /// + /// Writes next feature record containing shape geometry and its attributes. + /// + /// Shape parts. + /// Attributes associated with the feature. + public void Write(IEnumerable> shapeParts, IReadOnlyDictionary attributes) + { + Shape.Clear(); + foreach (var part in shapeParts) + { + Shape.StartNewPart(); + foreach (var pt in part) + { + Shape.AddPoint(pt); + } + } + + Fields.SetValues(attributes); + + Write(); + } + + /// + /// Writes feature to the shapefile. + /// + public void Write(ShapefileFeature feature) + { + Write(feature.Shape, feature.Attributes); + } + + /// + /// Writes features to the shapefile. + /// + public void Write(IEnumerable features) + { + foreach (var feature in features) + { + Write(feature); + } + } + + /// + protected override void DisposeManagedResources() + { + ShpWriter?.Dispose(); + DbfWriter?.Dispose(); + + base.DisposeManagedResources(); // This will dispose streams used by ShpWriter and DbfWriter. Do it at the end. + } + + + /// + /// Opens shapefile writer. + /// + /// Path to shapefile. + /// Shape type. + /// Shapefile fields definitions. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Projection metadata for the shapefile (.prj file). + /// Shapefile writer. + public static ShapefileWriter Open(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) + { + if (type.IsPoint()) + { + return new ShapefilePointWriter(shpPath, type, fields, encoding, projection); + } + else if (type.IsMultiPoint()) + { + return new ShapefileMultiPointWriter(shpPath, type, fields, encoding, projection); + } + else if (type.IsPolyLine() || type.IsPolygon()) + { + return new ShapefileMultiPartWriter(shpPath, type, fields, encoding, projection); + } + else + { + throw new FileLoadException("Unsupported shapefile type: " + type, shpPath); + } + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/ShapefileException.cs b/src/NetTopologySuite.IO.Esri.Core/ShapefileException.cs new file mode 100644 index 0000000..4c33fdd --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/ShapefileException.cs @@ -0,0 +1,36 @@ +using System; +using System.Runtime.Serialization; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// The exception that is thrown when a non-fatal application error occurs related to Topology functionality. + /// + public class ShapefileException : ApplicationException + { + /// + /// Initializes a new instance of the ShapefileException class. + /// + public ShapefileException() { } + + /// + /// Initializes a new instance of the ShapefileException class with a specified error message. + /// + /// A message that describes the error. + public ShapefileException(string message) : base(message) { } + + /// + /// Initializes a new instance of the ShapefileException class with serialized data. + /// + /// The object that holds the serialized object data. + /// The contextual information about the source or destination. + public ShapefileException(SerializationInfo info,StreamingContext context) : base(info, context) { } + + /// + /// Initializes a new instance of the ShapefileException class with a specified error message and a reference to the inner exception that is the cause of this exception. + /// + /// The error message that explains the reason for the exception. + /// The exception that is the cause of the current exception. If the innerException parameter is not a null reference, the current exception is raised in a catch block that handles the inner exception + public ShapefileException(string message, Exception innerException) : base(message, innerException) { } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPartReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPartReader.cs new file mode 100644 index 0000000..03e1230 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPartReader.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Polygon or MultiPart SHP file reader. + /// + public class ShpMultiPartReader : ShpReader + { + /// + public ShpMultiPartReader(Stream shpStream) : base(shpStream) + { + if (!ShapeType.IsPolygon() && !ShapeType.IsPolyLine()) + throw GetUnsupportedShapeTypeException(); + } + + internal override void ReadShape(BinaryBufferReader shapeBinary) + { + shapeBinary.AdvancePastXYBoundingBox(); + var partCount = shapeBinary.ReadPartCount(); + var pointCount = shapeBinary.ReadPointCount(); + + shapeBinary.ReadPartOfsets(partCount, Shape); + shapeBinary.ReadPoints(pointCount, HasZ, HasM, Shape); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPointReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPointReader.cs new file mode 100644 index 0000000..199353f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpMultiPointReader.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// MultiPoint SHP file reader. + /// + public class ShpMultiPointReader : ShpReader + { + /// + public ShpMultiPointReader(Stream shpStream) : base(shpStream) + { + if (!ShapeType.IsMultiPoint()) + throw GetUnsupportedShapeTypeException(); + } + + internal override void ReadShape(BinaryBufferReader shapeBinary) + { + shapeBinary.AdvancePastXYBoundingBox(); + var pointCount = shapeBinary.ReadPointCount(); + + shapeBinary.ReadPoints(pointCount, HasZ, HasM, Shape); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpPointReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpPointReader.cs new file mode 100644 index 0000000..e777b18 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpPointReader.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Point SHP file reader. + /// + public class ShpPointReader : ShpReader + { + private ShpCoordinates PointBuffer = new ShpCoordinates(0.0, 0.0); // This sets Z=NaN, M=NaN (default constructor sets it to 0.0) + + /// + public ShpPointReader(Stream shpStream) : base(shpStream) + { + if (!ShapeType.IsPoint()) + throw GetUnsupportedShapeTypeException(); + } + + internal override void ReadShape(BinaryBufferReader shapeBinary) + { + shapeBinary.ReadPoint(HasZ, HasM, ref PointBuffer); + base.Shape.AddPoint(PointBuffer.X, PointBuffer.Y, PointBuffer.Z, PointBuffer.M); + } + + /// + /// Point shape. + /// + public ShpCoordinates Point => base.Shape.Points[0]; + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpReader.cs new file mode 100644 index 0000000..6540df7 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Readers/ShpReader.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Base class class for reading a fixed-length file header and variable-length records from a *.SHP file. + /// + public abstract class ShpReader : ManagedDisposable + { + private readonly Stream ShpStream; + private readonly int ShpEndPosition; + private readonly BinaryBufferReader Header = new BinaryBufferReader(Shapefile.FileHeaderSize); + private readonly BinaryBufferReader RecordContent = new BinaryBufferReader(); + internal readonly bool HasM; + internal readonly bool HasZ; + + /// + /// Shapefile Spec:
+ /// The one-to-one relationship between geometry and attributes is based on record number. + /// Attribute records in the dBASE file must be in the same order as records in the main file. + ///
+ /// + /// DBF does not have recor number attribute. + /// + private int RecordNumber = 1; + + + /// + /// Initializes a new instance of the reader class. + /// + /// SHP file stream. + public ShpReader(Stream shpStream) + { + ShpStream = shpStream ?? throw new ArgumentNullException("Uninitialized SHP stream.", nameof(shpStream)); + + if (ShpStream.Position != 0) + ShpStream.Seek(0, SeekOrigin.Begin); + + Header.LoadFrom(ShpStream, Shapefile.FileHeaderSize); + Header.ReadShpFileHeader(out var type, out var fileLength, BoundingBox); + ShpEndPosition = fileLength - 1; + + ShapeType = type; + HasM = type.HasM(); + HasZ = type.HasZ(); + + Debug.Assert(RecordContent.End, "Shapefile header", "Unexpected SHP binary reader position."); + } + + + internal void Restart() + { + ShpStream.Seek(Shapefile.FileHeaderSize, SeekOrigin.Begin); + } + + /// + /// Shape type. + /// + public ShapeType ShapeType { get; } = ShapeType.NullShape; + + /// + /// Current shape read from the underlying stream. + /// + public ShpShapeBuilder Shape { get; } = new ShpShapeBuilder(); + + /// + /// The minimum bounding rectangle orthogonal to the X and Y (and potentially the M and Z). + /// + public ShpBoundingBox BoundingBox { get; } = new ShpBoundingBox(); + + /// + /// Reads content of the from the underlying stream. + /// + /// Value indicating if reading next record was successful. + public bool Read() + { + Shape.Clear(); + + if (!ReadRecordContent()) + return false; + + var type = RecordContent.ReadGeometryType(); + if (type == ShapeType.NullShape) + { + return true; // Empty points collection + } + else if (type != ShapeType) + { + throw GetInvalidRecordTypeException(type); + } + + ReadShape(RecordContent); + return true; + } + + internal abstract void ReadShape(BinaryBufferReader shapeBinary); + + + internal bool ReadRecordContent() + { + if (ShpStream.Position >= ShpEndPosition) + return false; + + Header.LoadFrom(ShpStream, Shapefile.RecordHeaderSize); + Header.ReadShpRecordHeader(out var recordNumber, out var contentLength); + + RecordContent.LoadFrom(ShpStream, contentLength); + + Debug.Assert(recordNumber == RecordNumber++, "Shapefile record", $"Unexpected SHP record number: {recordNumber} (expected {RecordNumber})."); + return true; + } + + /// + protected override void DisposeManagedResources() + { + Header?.Reset(); + RecordContent?.Reset(); + + //Debug.Assert(ShpStream.Position == ShpEndPosition + 1, "Shapefile reader", "Unexpected SHP file length. This may happen when reading SHP file was not finished."); + base.DisposeManagedResources(); + } + + + internal Exception GetInvalidRecordTypeException(ShapeType type) + { + return new FileLoadException($"Ivalid shapefile record type. {GetType().Name} does not support { type } shapes."); + } + + internal Exception GetUnsupportedShapeTypeException() + { + throw new FileLoadException(GetType().Name + $" does not support {ShapeType} shapes."); + } + + internal static ShapeType GetShapeType(Stream shpStream) + { + var binary = new BinaryBufferReader(Shapefile.FileHeaderSize); + binary.LoadFrom(shpStream, Shapefile.FileHeaderSize); + + var fileCode = binary.ReadInt32BigEndian(); + if (fileCode != Shapefile.FileCode) + throw new FileLoadException("Invalid shapefile format."); + + binary.Advance(28); + return binary.ReadGeometryType(); + } + + /// + /// Reads shape type information from SHP file. + /// + /// Path to SHP file. + /// Shape type. + public static ShapeType GetShapeType(string shpPath) + { + if (Path.GetExtension(shpPath).ToLowerInvariant() != ".shp") + throw new FileLoadException("Specified file must have .shp extension."); + + using (var shpStream = new FileStream(shpPath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return GetShapeType(shpStream); + } + } + + + [Conditional("DEBUG_BINARY")] + internal void GetBinaryDiff(ShpReader other, List differences) + { + Header.GetBinaryDiff("SHP Header", other.Header, differences); + RecordContent.GetBinaryDiff("SHP RecordContent", other.RecordContent, differences); + } + + + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBinaryExtensions.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBinaryExtensions.cs new file mode 100644 index 0000000..e6c29c2 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBinaryExtensions.cs @@ -0,0 +1,345 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + + internal static class ShpBinaryExtensions + { + public static void WriteShpFileHeader(this BinaryBufferWriter binary, ShapeType type, int fileLength, ShpBoundingBox extent, bool hasZ, bool hasM) + { + binary.WriteInt32BigEndian(Shapefile.FileCode); + binary.WriteBytes(byte.MinValue, 20); + + binary.Write16BitWords(fileLength); // in 16-bit words, including the header + binary.WriteInt32LittleEndian(Shapefile.Version); + binary.WriteGeometryType(type); + + binary.WriteXYBoundingBox(extent); + binary.WriteZRange(extent, hasZ); + binary.WriteMRange(extent, hasM); + } + + public static void ReadShpFileHeader(this BinaryBufferReader binary, out ShapeType type, out int fileLength, ShpBoundingBox boundingBox) + { + var fileCode = binary.ReadInt32BigEndian(); + binary.Advance(20); + + fileLength = binary.Read16BitWords(); // in 16-bit words, including the header + var version = binary.ReadInt32LittleEndian(); + type = binary.ReadGeometryType(); + + binary.ReadXYBoundingBox(boundingBox); + binary.ReadZRange(boundingBox, type.HasZ()); + binary.ReadMRange(boundingBox, type.HasM()); + + if (fileCode != Shapefile.FileCode) + throw new FileLoadException("Invalid shapefile format."); + + + Debug.Assert(version == Shapefile.Version, "Shapefile version", $"Ivalid SHP version: {version} (expected: 1000)."); + } + + + public static void WriteShpRecordHeader(this BinaryBufferWriter shpRecordHeader, int recrodNumber, int contentLength) + { + shpRecordHeader.WriteInt32BigEndian(recrodNumber); + shpRecordHeader.Write16BitWords(contentLength); + } + public static void ReadShpRecordHeader(this BinaryBufferReader shpRecordHeader, out int recrodNumber, out int contentLength) + { + recrodNumber = shpRecordHeader.ReadInt32BigEndian(); + contentLength = shpRecordHeader.Read16BitWords(); + } + + + public static void WriteGeometryType(this BinaryBufferWriter binary, ShapeType type) + { + binary.WriteInt32LittleEndian((int)type); + } + public static ShapeType ReadGeometryType(this BinaryBufferReader binary) + { + return (ShapeType)binary.ReadInt32LittleEndian(); + } + + + public static void ReadXYCoordinate(this BinaryBufferReader shpRecordData, out double x, out double y) + { + x = shpRecordData.ReadDoubleLittleEndian(); + y = shpRecordData.ReadDoubleLittleEndian(); + } + private static void WriteXYCoordinate(this BinaryBufferWriter shpRecordData, double x, double y) + { + // Avoid performance costs (if you trying to pas NaN as X,Y then you're wrong). + // x = x.ToValidShpOrdinate(0.0); + // x = x.ToValidShpOrdinate(0.0); + + shpRecordData.WriteDoubleLittleEndian(x); + shpRecordData.WriteDoubleLittleEndian(y); + } + public static void WriteXYOrdinate(this BinaryBufferWriter shpRecordData, double x, double y, ShpBoundingBox shpExtent) + { + shpRecordData.WriteXYCoordinate(x, y); + shpExtent.X.Expand(x); + shpExtent.Y.Expand(y); + } + + + + private static void ReadXYCoordinates(this BinaryBufferReader shpRecordData, int count, ShpShapeBuilder points) + { + for (int i = 0; i < count; i++) + { + shpRecordData.ReadXYCoordinate(out var x, out var y); + points.AddPoint(x, y); + } + } + public static void WriteXYCoordinates(this BinaryBufferWriter shpRecordData, ShpShapeBuilder points) + { + for (int i = 0; i < points.PointCount; i++) + { + shpRecordData.WriteXYCoordinate(points[i].X, points[i].Y); + } + } + + + public static double ReadZCoordinate(this BinaryBufferReader shpRecordData) + { + return shpRecordData.ReadDoubleLittleEndian(); + } + private static void WriteZCoordinate(this BinaryBufferWriter shpRecordData, double z) + { + shpRecordData.WriteDoubleLittleEndian(z.ToValidShpCoordinate()); + } + + + private static void AdvancePastZRange(this BinaryBufferReader binary) + { + binary.Advance(2 * sizeof(double)); + } + private static void ReadZRange(this BinaryBufferReader binary, ShpBoundingBox shpExtent, bool hasZ) + { + if (hasZ) + { + shpExtent.Z.Expand(binary.ReadZCoordinate()); + shpExtent.Z.Expand(binary.ReadZCoordinate()); + } + } + public static void WriteZRange(this BinaryBufferWriter binary, ShpBoundingBox shpExtent, bool hasZ) + { + if (hasZ) + { + binary.WriteZCoordinate(shpExtent.Z.Min); + binary.WriteZCoordinate(shpExtent.Z.Max); + } + else + { + binary.WriteZCoordinate(0.0); // ArcMap uses zero as default. + binary.WriteZCoordinate(0.0); + } + } + + + private static void ReadZCoordinates(this BinaryBufferReader shpRecordData, int count, ShpShapeBuilder points) + { + for (int i = 0; i < count; i++) + { + points.Points[i].Z = shpRecordData.ReadZCoordinate(); + } + } + public static void WriteZCoordinates(this BinaryBufferWriter shpRecordData, ShpShapeBuilder points) + { + for (int i = 0; i < points.PointCount; i++) + { + shpRecordData.WriteZCoordinate(points.Points[i].Z); + } + } + + + public static double ReadMValue(this BinaryBufferReader shpRecordData) + { + var m = shpRecordData.ReadDoubleLittleEndian(); + if (m < Shapefile.MeasureMinValue) + return double.NaN; + + return m; + } + private static void WriteMValue(this BinaryBufferWriter shpRecordData, double m) + { + shpRecordData.WriteDoubleLittleEndian(m.ToValidShpMeasure()); + } + + + private static void AdvancePastMRange(this BinaryBufferReader binary) + { + binary.Advance(2 * sizeof(double)); + } + private static void ReadMRange(this BinaryBufferReader binary, ShpBoundingBox shpExtent, bool hasM) + { + if (hasM) + { + shpExtent.M.Expand(binary.ReadMValue()); + shpExtent.M.Expand(binary.ReadMValue()); + } + } + public static void WriteMRange(this BinaryBufferWriter binary, ShpBoundingBox shpExtent, bool hasM) + { + if (hasM) + { + binary.WriteMValue(shpExtent.M.Min); + binary.WriteMValue(shpExtent.M.Max); + } + else + { + binary.WriteMValue(0.0); // ArcMap uses zero as default. + binary.WriteMValue(0.0); + } + } + + + private static void ReadMValues(this BinaryBufferReader shpRecordData, int count, ShpShapeBuilder points) + { + for (int i = 0; i < count; i++) + { + points.Points[i].M = shpRecordData.ReadMValue(); + + } + } + public static void WriteMValues(this BinaryBufferWriter shpRecordData, ShpShapeBuilder points) + { + for (int i = 0; i < points.PointCount; i++) + { + shpRecordData.WriteMValue(points.Points[i].M); + } + } + + public static void AdvancePastXYBoundingBox(this BinaryBufferReader boundingBoxBinary) + { + boundingBoxBinary.Advance(4 * sizeof(double)); + } + public static void ReadXYBoundingBox(this BinaryBufferReader boundingBoxBinary, ShpBoundingBox boundingBox) + { + boundingBoxBinary.ReadXYCoordinate(out var xMin, out var yMin); + boundingBox.X.Expand(xMin); + boundingBox.Y.Expand(yMin); + + boundingBoxBinary.ReadXYCoordinate(out var xMax, out var yMax); + boundingBox.X.Expand(xMax); + boundingBox.Y.Expand(yMax); + } + public static void WriteXYBoundingBox(this BinaryBufferWriter boundingBoxBinary, ShpBoundingBox shpExtent) + { + boundingBoxBinary.WriteXYCoordinate(shpExtent.X.Min.ToValidShpCoordinate(), shpExtent.Y.Min.ToValidShpCoordinate()); + boundingBoxBinary.WriteXYCoordinate(shpExtent.X.Max.ToValidShpCoordinate(), shpExtent.Y.Max.ToValidShpCoordinate()); + } + + + public static int ReadPartCount(this BinaryBufferReader binary) + { + return binary.ReadInt32LittleEndian(); + } + public static void WritePartCount(this BinaryBufferWriter binary, int count) + { + binary.WriteInt32LittleEndian(count); + } + + + public static int ReadPointCount(this BinaryBufferReader binary) + { + return binary.ReadInt32LittleEndian(); + } + public static void WritePointCount(this BinaryBufferWriter binary, int count) + { + binary.WriteInt32LittleEndian(count); + } + + + public static void ReadPartOfsets(this BinaryBufferReader binary, int partCount, ShpShapeBuilder points) + { + for (int partIndex = 0; partIndex < partCount; partIndex++) + { + points.AddPartOffset(binary.ReadInt32LittleEndian()); + } + } + public static void WritePartOffsets(this BinaryBufferWriter binary, ShpShapeBuilder points) + { + for (int partIndex = 0; partIndex < points.PartCount; partIndex++) + { + binary.WriteInt32LittleEndian(points.GetPartOffset(partIndex)); + } + } + + + public static void ReadPoint(this BinaryBufferReader shpRecordData, bool hasZ, bool hasM, ref ShpCoordinates point) + { + shpRecordData.ReadXYCoordinate(out point.X, out point.Y); + + if (hasZ) + { + point.Z = shpRecordData.ReadZCoordinate(); + } + if (hasM) + { + point.M = shpRecordData.ReadMValue(); + } + } + public static void WritePoint(this BinaryBufferWriter shpRecordData, bool hasZ, bool hasM, ShpCoordinates point) + { + shpRecordData.WriteXYCoordinate(point.X, point.Y); + + if (hasZ) + { + shpRecordData.WriteZCoordinate(point.Z); + } + + if (hasM) + { + shpRecordData.WriteMValue(point.M); + } + } + + + public static void ReadPoints(this BinaryBufferReader shpRecordData, int pointCount, bool hasZ, bool hasM, ShpShapeBuilder points) + { + shpRecordData.ReadXYCoordinates(pointCount, points); + + if (hasZ) + { + shpRecordData.AdvancePastZRange(); + shpRecordData.ReadZCoordinates(pointCount, points); + } + + if (hasM) + { + shpRecordData.AdvancePastMRange(); + shpRecordData.ReadMValues(pointCount, points); + } + } + public static void WritePoints(this BinaryBufferWriter shpRecordData, bool hasZ, bool hasM, ShpShapeBuilder points) + { + shpRecordData.WriteXYCoordinates(points); + + if (hasZ) + { + shpRecordData.WriteZRange(points.Extent, hasZ); + shpRecordData.WriteZCoordinates(points); + } + + if (hasM) + { + shpRecordData.WriteMRange(points.Extent, hasM); + shpRecordData.WriteMValues(points); + } + } + + } + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBoundingBox.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBoundingBox.cs new file mode 100644 index 0000000..66775a7 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpBoundingBox.cs @@ -0,0 +1,156 @@ +using System; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// The Bounding Box in the main file header storing the actual extent of the shapes in the file. + /// + public class ShpBoundingBox + { + /// + /// Minimum and maximum X coordinate values. + /// + public ShpRange X { get; } + + /// + /// Minimum and maximum Y coordinate values. + /// + public ShpRange Y { get; } + + /// + /// Minimum and maximum Z coordinate values. + /// + public ShpRange Z { get; } + + /// + /// Minimum and maximum Measure values. + /// + public ShpRange M { get; } + + /// + /// Initializes new class instance. + /// + public ShpBoundingBox() + { + X = new ShpRange(); + Y = new ShpRange(); + Z = new ShpRange(); + M = new ShpRange(); + } + + /// + /// Clears the bounding box. + /// + public void Clear() + { + X.Clear(); + Y.Clear(); + Z.Clear(); + M.Clear(); + } + + + /// + /// Expands the boundign box by other bounding box. + /// + /// Bounding box used to expand this instance. + public void Expand(ShpBoundingBox other) + { + X.Expand(other.X); + Y.Expand(other.Y); + Z.Expand(other.Z); + M.Expand(other.M); + } + + /// + /// Expands the boundign box by point coordinates. + /// + /// Point coordinates. + public void Expand(ShpCoordinates point) + { + X.Expand(point.X); + Y.Expand(point.Y); + Z.Expand(point.Z); + M.Expand(point.M); + } + } + + + /// + /// Minimum and maximum values of coordinate. + /// + public class ShpRange + { + /// + /// Initializes empty class instance. + /// + public ShpRange() + { + Clear(); + } + + /// + /// Mimimum value. + /// + public double Min { get; private set; } + + /// + /// Maximum value. + /// + public double Max { get; private set; } + + /// + /// Specifies if this is emty. + /// + public bool IsEmpty => double.IsNaN(Min) || double.IsNaN(Max); + + /// + /// Expands the range by specified value. + /// + /// + public void Expand(double value) + { + if (double.IsNaN(value) || value == double.MinValue) // ArcMap 10.6 saves empty point coordinates as doubule.MinValue + return; + + if (double.IsNaN(Min)) // NaN > value => false; + { + Min = value; + } + else if (Min > value) // Min > NaN => false; + { + Min = value; + } + + if (double.IsNaN(Max)) // NaN < value => false; + { + Max = value; + } + else if (Max < value) // Max < NaN => false; + { + Max = value; + } + } + + /// + /// Expands the range by other range. + /// + /// Range used to expand this instance. + public void Expand(ShpRange other) + { + Expand(other.Min); + Expand(other.Max); + } + + /// + /// Clears the range. + /// + public void Clear() + { + this.Min = double.NaN; + this.Max = double.NaN; + } + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinateExtensions.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinateExtensions.cs new file mode 100644 index 0000000..88f867c --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinateExtensions.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Helper methods for ordinate converting as specified in the ESRI Shapefile Technical Description. + /// + public static class ShpCoordinateExtensions + { + + /// + /// Converts Z ordinate to value as specified in the ESRI Shapefile Technical Description. + /// + /// Z value. + /// + /// • 0.0 if specified value is
+ /// • if specified value is
+ /// • if specified value is
+ /// otherwise it returns specified value. + ///
+ /// + /// SHP Spec: Floating point numbers must be numeric values. Positive infinity, negative infinity, + /// and Not-a-Number(NaN) values are not allowed in shapefiles. + /// + public static double ToValidShpCoordinate(this double coordinate) + { + if (double.IsNaN(coordinate) || coordinate == double.MinValue) // ArcMap 10.6 saves empty point as doubule.MinValue coordinates + return 0.0; + + if (double.IsPositiveInfinity(coordinate)) + return double.MaxValue; + + if (double.IsNegativeInfinity(coordinate)) + return double.MinValue + double.Epsilon; // ArcMap 10.6 saves empty point as doubule.MinValue coordinates - add Epsilon. + + return coordinate; + } + + + /// + /// Converts Measure to value as specified in the ESRI Shapefile Technical Description. + /// + /// Measure value. + /// + /// • value less than –10E38 if specified value is
+ /// • if specified value is
+ /// • -10E38 if specified value is
+ /// otherwise it returns specified value. + ///
+ /// + /// SHP Spec: Floating point numbers must be numeric values. Positive infinity, negative infinity, + /// and Not-a-Number(NaN) values are not allowed in shapefiles. Nevertheless, shapefiles + /// support the concept of "no data" values, but they are currently used only for measures. + /// Any floating point number smaller than –10E38 is considered by a shapefile reader to represent a "no data" value. + /// + public static double ToValidShpMeasure(this double m) + { + if (double.IsNaN(m)) + return double.MinValue; // Shapefile.MeasureMinValue - 1; (Esri uses double.MinValue) + + if (double.IsPositiveInfinity(m)) + return double.MaxValue; + + if (double.IsNegativeInfinity(m)) + return Shapefile.MeasureMinValue; + + return m; + } + } + + + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinates.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinates.cs new file mode 100644 index 0000000..10f406e --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpCoordinates.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + + + /// + /// Point represented as X, Y, Z, M coordinates. + /// + public struct ShpCoordinates + { + /// + /// Represents the smallest positive coordinate value that is greater than zero. + /// + /// + /// This field is equal to 0.000000002777...7 in linear units and 0°00'00.00001" in decimal degrees (equivalent of ~0.3mm in metric units). + /// + public static double Epsilon = 0.00001 / 60.0 / 60.0; + + /// + /// Point representation of . + /// + public static ShpCoordinates NullPoint = new ShpCoordinates(double.NaN, double.NaN); + + /// + /// X coordinate + /// + public double X; + + + /// + /// Y coordinate + /// + public double Y; + + + /// + /// Z coordinate + /// + public double Z; + + + /// + /// Measure + /// + public double M; + + + /// + /// Initializes a new instance of the class. + /// + /// X coordinate + /// Y coordinate + /// Z coordinate + /// Measure + public ShpCoordinates(double x, double y, double z, double m) + { + X = x; + Y = y; + Z = z; + + if (m < Shapefile.MeasureMinValue) + M = double.NaN; + else + M = m; + } + + + /// + /// Initializes a new instance of the class. + /// + /// X coordinate + /// Y coordinate + /// Measure + public ShpCoordinates(double x, double y, double m) + { + X = x; + Y = y; + Z = double.NaN; + M = m; + } + + /// + /// Initializes a new instance of the class. + /// + /// X coordinate + /// Y coordinate + public ShpCoordinates(double x, double y) + { + X = x; + Y = y; + Z = double.NaN; + M = double.NaN; + } + + + + /// + /// Indicates whether this and a specified object are equal. + /// + /// The object to compare with the current . + /// true if obj is and have the same coordinates; otherwise, false. + public override bool Equals(object other) + { + return other is ShpCoordinates point && Equals(point); + } + + /// + /// Indicates whether this and a specified point are equal. + /// + /// The point to compare with the current . + /// true if both points have the same coordinates; otherwise, false. + public bool Equals(ShpCoordinates other) + { + return Equals(other.X, other.Y, other.Z, other.M); + } + + /// + /// Indicates whether this and a specified coordinates are equal. + /// + /// X coordinate. + /// Y coordinate. + /// Z coordinate. + /// Measure value. + /// true if specified coordinates are equal to this point coordinates; otherwise, false. + public bool Equals(double x, double y, double z, double m) + { + return Equals(X, x) && Equals(Y, y) && Equals(Z, z) && Equals(M, m); + } + + private bool Equals(double v1, double v2) + { + if (v1 == v2) + { + return true; + } + + // ESRI Shapefile Technical Description, page 9: + // The rings are closed (the first and last vertex of a ring MUST be the same). + + //if (Math.Abs(v1- v2) < Epsilon) + //{ + // return true; + //} + + return double.IsNaN(v1) && double.IsNaN(v2); + } + + /// + public override int GetHashCode() + { + return X.GetHashCode(); + } + + /// + public override string ToString() + { + if (IsNull) + return ShapeType.NullShape.ToString(); + + var fmt = (X < 1000 & Y < 1000) ? "" : "0.000"; // for latitudes and longitudes use full precision + var sb = new StringBuilder(); + sb.Append("X:" + X.ToString(fmt)); + sb.Append(", Y:"); + sb.Append(Y.ToString(fmt)); + if (HasZ) + { + sb.Append(", Z:"); + sb.Append(Z.ToString(fmt)); + } + if (HasM) + { + sb.Append(", M:"); + sb.Append(M.ToString(fmt)); + } + + return sb.ToString(); + } + + + /// + /// Indicates the point with no geometric data. + /// + /// + /// According to ESRI Shapefile Technical Description point feature + /// supports null - it is valid to have points and null points in the same shapefile. + /// + public bool IsNull => double.IsNaN(X) || double.IsNaN(Y) || X == double.MinValue || Y == double.MinValue; // ArcMap writes empty geometry as double.MinValue coordinates. + + + /// + /// Indicates wheter this inttance of contains Z coordinate. + /// + public bool HasZ => !double.IsNaN(Z); + + + /// + /// Indicates wheter this inttance of contains M coordinate. + /// + public bool HasM => !double.IsNaN(M); + } + + + + + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/ShpShapeBuilder.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpShapeBuilder.cs new file mode 100644 index 0000000..058295f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/ShpShapeBuilder.cs @@ -0,0 +1,371 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Shape coordiantes collection. + /// + public class ShpShapeBuilder : IReadOnlyList> + { + internal ShpCoordinates[] Points; + private int[] Offsets; + internal readonly ShpBoundingBox Extent = new ShpBoundingBox(); + + + /// + /// Creates ne instance of ShpPoints. + /// + public ShpShapeBuilder() + { + Reset(); + } + + + /// + /// Point count. + /// + public int PointCount { get; private set; } + + + /// + /// Part count. + /// + public int PartCount { get; private set; } + + + /// + /// Gets the point at specified index. + /// + /// The zero-based index of the point to get. + /// Editable reference to the poinat at the specified index. + public ShpCoordinates this[int index] + { + get + { + if (index < 0 || index >= PointCount) + throw new ArgumentOutOfRangeException(nameof(index)); + return Points[index]; + } + // set { } // This would involve recalculating Extent at every single point setting. + } + + internal bool FirstPointIsNull => PointCount < 1; // || Points[0].IsNull; + + + /// + /// Clear all parts and points. + /// + /// This method does not resize the internal buffer capacity. + public void Clear() + { + PointCount = 0; + PartCount = 0; + //Offsets[0] = 0; // First offset must always be present and must always be zero. + Extent.Clear(); + + // Assure that for ShpPointReader (NullShape case) + Points[0].X = double.NaN; + Points[0].Y = double.NaN; + Points[0].Z = double.NaN; + Points[0].M = double.NaN; + } + + /// + /// Clear all data from underlying buffer and resize internal buffer capacity to its initial state. + /// + public void Reset() + { + Points = new ShpCoordinates[1]; + Offsets = new int[1]; + + Clear(); // Reset new instances created above + } + + + /// + /// Start new PolyLine or Polygon part. + /// + public void StartNewPart() + { + if (PointCount < 1) + { + AddPartOffset(0); + return; + } + + if (PartCount < 1) // && PointCount > 0 + { + AddPartOffset(0); // First offset must always be zero. + + } + + // At this moment we always have a least one part. + if (Offsets[PartCount - 1] == PointCount) + { + return; // Do not duplicate the same part offset + } + + + AddPartOffset(PointCount); + } + + + internal void AddPartOffset(int offset) + { + if (Offsets.Length <= PartCount) + { + ArrayBuffer.Expand(ref Offsets); + } + + Offsets[PartCount] = offset; + Debug.Assert(PartCount < 1 || Offsets[PartCount - 1] < Offsets[PartCount], + GetType().Name + "." + nameof(AddPartOffset) + "()", + "Corrupted SHP file - iInvalid part offset sequence. Preceding part offset must be less than succeeding part offset."); + + PartCount++; + } + + /// + /// Gets index to first point in part. + /// + /// Part index. + /// Index to first point in part. + public int GetPartOffset(int partIndex) + { + if (partIndex < 0 || partIndex >= PartCount) + throw new IndexOutOfRangeException(nameof(partIndex)); + + return Offsets[partIndex]; + } + + /// + /// Adds a point. + /// + /// The point to be added. + public void AddPoint(ShpCoordinates point) + { + AddPoint(point.X, point.Y, point.Z, point.M); + } + + + /// + /// Adds a point. + /// + /// X coordinate. + /// Y coordinate. + /// Z coordinate. + /// Measure value. + public void AddPoint(double x, double y, double z, double m) + { + if (Points.Length <= PointCount) + { + ArrayBuffer.Expand(ref Points); + } + + Points[PointCount].X = x; + Points[PointCount].Y = y; + Points[PointCount].Z = z; + Points[PointCount].M = m; + PointCount++; + + Extent.X.Expand(x); + Extent.Y.Expand(y); + Extent.Z.Expand(z); + if (m >= Shapefile.MeasureMinValue) // ! + { + Extent.M.Expand(m); + } + } + + + /// + /// Adds a point. + /// + /// X coordinate. + /// Y coordinate. + /// Measure value. + public void AddPoint(double x, double y, double m) + { + AddPoint(x, y, double.NaN, m); + } + + + /// + /// Adds a point. + /// + /// X coordinate. + /// Y coordinate. + public void AddPoint(double x, double y) + { + AddPoint(x, y, double.NaN, double.NaN); + } + + + /// + /// Gets point count held by specific part. + /// + /// Part index. + /// Point count held by specific part. + public int GetPointCount(int partIndex) + { + if (partIndex < 0) + throw new IndexOutOfRangeException(nameof(partIndex)); + + if (partIndex < PartCount - 1) + return Offsets[partIndex + 1] - Offsets[partIndex]; + + if (partIndex == 0 && PartCount < 1) + return PointCount; + + if (partIndex == PartCount - 1) + return PointCount - Offsets[partIndex]; + + throw new IndexOutOfRangeException(nameof(partIndex)); + } + + + /// + /// Get all points divided into one or more PolyLine or Polygon parts. + /// + /// All points divided into parts. + /// A part is a connected sequence of two or more points. + public IReadOnlyList> GetParts() + { + var parts = new ShpCoordinates[Math.Max(PartCount, 1)][]; + for (int partIndex = 0; partIndex < parts.Length; partIndex++) + { + parts[partIndex] = GetPart(partIndex); + } + return parts; + } + + private ShpCoordinates[] GetPart(int partIndex) + { + var pointCount = GetPointCount(partIndex); + var partPoints = new ShpCoordinates[pointCount]; + Array.Copy(Points, Offsets[partIndex], partPoints, 0, partPoints.Length); + + return partPoints; + } + + /// + /// Determines whether the specified ShpPointCollection is equal to the current collection. + /// + /// The collection to compare with the current object. + /// true if the specified collection is equal to the current collection; otherwise, false. + public bool Equals(ShpShapeBuilder other) + { + if (PointCount != other.PointCount || PartCount != other.PartCount) + return false; + + // Start from Parts. There will be usually less to check. + for (int partIndex = 0; partIndex < PartCount; partIndex++) + { + if (Offsets[partIndex] != other.Offsets[partIndex]) + return false; + } + + for (int i = 0; i < PointCount; i++) + { + if (!Points[i].Equals(other.Points[i])) + return false; + } + + return true; + } + + /// + /// Creates copy of this point collection. + /// + /// ShpPoint collection. + public ShpShapeBuilder Copy() + { + var copy = new ShpShapeBuilder(); + + copy.Points = new ShpCoordinates[Math.Max(1, PointCount)]; + copy.PointCount = PointCount; + Array.Copy(Points, copy.Points, PointCount); + + copy.Offsets = new int[Math.Max(1, PartCount)]; + copy.PartCount = PartCount; + Array.Copy(Offsets, copy.Offsets, PartCount); + + copy.Extent.Expand(Extent); + return copy; + } + + /// + public override string ToString() + { + if (PartCount > 0) + return $"MultiPart [{PartCount}:{PointCount}]"; + + if (PointCount < 1) + return ShapeType.NullShape.ToString(); + + if (PointCount == 1) + return $"Point [{Points[0]}]"; + + return $"MultiPoint [{PointCount}]"; + + } + + + #region *** IReadOnlyCollection *** + + int IReadOnlyCollection>.Count => PartCount; + IReadOnlyList IReadOnlyList>.this[int partIndex] => GetPart(partIndex); + + IEnumerator> IEnumerable>.GetEnumerator() + { + return new ShpPartEnumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new ShpPartEnumerator(this); + } + + private class ShpPartEnumerator : IEnumerator> + { + private readonly ShpShapeBuilder Owner; + private int CurrentIndex; + + public IReadOnlyList Current { get; private set; } + object IEnumerator.Current => Current; + + public ShpPartEnumerator(ShpShapeBuilder owner) + { + Owner = owner ?? throw new ArgumentNullException(nameof(owner)); + Reset(); + } + + public void Reset() + { + CurrentIndex = 0; + } + + public bool MoveNext() + { + if (Owner.PartCount < 1 || CurrentIndex >= Owner.PartCount) + return false; + + Current = Owner.GetPart(CurrentIndex++); + return true; + } + + public void Dispose() + { + // Nothing to dispose + } + } + + #endregion + } + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPartWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPartWriter.cs new file mode 100644 index 0000000..755d8ee --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPartWriter.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Polygon or MultiPart SHP file writer. + /// + public class ShpMultiPartWriter : ShpWriter + { + /// + public ShpMultiPartWriter(Stream shpStream, Stream shxStream, ShapeType type) : base(shpStream, shxStream, type) + { + if (!ShapeType.IsPolygon() && !ShapeType.IsPolyLine()) + throw GetUnsupportedShapeTypeException(); + } + + internal override bool IsNull(ShpShapeBuilder shape) + { + return shape == null || shape.PartCount < 1 || shape.PointCount < 2; + } + + internal override void WriteShapeToBinary(BinaryBufferWriter shpRecordBinary) + { + shpRecordBinary.WriteXYBoundingBox(Shape.Extent); + shpRecordBinary.WritePartCount(Shape.PartCount); + shpRecordBinary.WritePointCount(Shape.PointCount); + + shpRecordBinary.WritePartOffsets(Shape); + shpRecordBinary.WritePoints(HasZ, HasM, Shape); + + Extent.Expand(Shape.Extent); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPointWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPointWriter.cs new file mode 100644 index 0000000..524d6a3 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpMultiPointWriter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// MultiPoint SHP file writer. + /// + public class ShpMultiPointWriter : ShpWriter + { + /// + public ShpMultiPointWriter(Stream shpStream, Stream shxStream, ShapeType type) : base(shpStream, shxStream, type) + { + if (!ShapeType.IsMultiPoint()) + throw GetUnsupportedShapeTypeException(); + } + + internal override bool IsNull(ShpShapeBuilder shape) + { + return shape == null || shape.PointCount < 1; + } + + internal override void WriteShapeToBinary(BinaryBufferWriter shpRecordBinary) + { + shpRecordBinary.WriteXYBoundingBox(Shape.Extent); + shpRecordBinary.WritePointCount(Shape.PointCount); + shpRecordBinary.WritePoints(HasZ, HasM, Shape); + + Extent.Expand(Shape.Extent); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpPointWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpPointWriter.cs new file mode 100644 index 0000000..bc86595 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpPointWriter.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Point SHP file writer. + /// + public class ShpPointWriter : ShpWriter + { + /// + public ShpPointWriter(Stream shpStream, Stream shxStream, ShapeType type) : base(shpStream, shxStream, type) + { + if (!ShapeType.IsPoint()) + throw GetUnsupportedShapeTypeException(); + } + + internal override bool IsNull(ShpShapeBuilder shape) + { + return shape == null || shape.PointCount < 1 || shape.FirstPointIsNull; + } + + internal override void WriteShapeToBinary(BinaryBufferWriter shpRecordBinary) + { + shpRecordBinary.WritePoint(HasZ, HasM, Point); + Extent.Expand(Shape.Extent); + } + + /// + /// Point shape. + /// + public ShpCoordinates Point + { + get { return Shape.Points[0]; } + set + { + Shape.Clear(); + Shape.AddPoint(value); // This updates extent. + } + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpWriter.cs new file mode 100644 index 0000000..a04f14f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shp/Writers/ShpWriter.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + + /// + /// Base class class for writing a fixed-length file header and variable-length records to a *.SHP file. + /// + public abstract class ShpWriter : ManagedDisposable + { + private readonly Stream ShpStream; + private readonly Stream ShxStream; + private readonly BinaryBufferWriter Header = new BinaryBufferWriter(Shapefile.FileHeaderSize); + private readonly BinaryBufferWriter RecordContent = new BinaryBufferWriter(Shapefile.FileHeaderSize); + private int RecordNumber = 1; // Shapefile specs: Record numbers begin at 1. + internal readonly bool HasM; + internal readonly bool HasZ; + + + /// + /// Initializes a new instance of the writer class. + /// + /// SHP file stream. + /// SHX file stream. + /// Shape type. + public ShpWriter(Stream shpStream, Stream shxStream, ShapeType type) + { + ShpStream = shpStream ?? throw new ArgumentNullException("Uninitialized SHP stream.", nameof(shpStream)); + ShxStream = shxStream ?? throw new ArgumentNullException("Uninitialized SHX stream.", nameof(shxStream)); + + ShapeType = type; + HasM = type.HasM(); + HasZ = type.HasZ(); + + // This advances streams position past header to to records start position + WriteFileHeader(ShpStream); + WriteFileHeader(ShxStream); + } + + internal abstract bool IsNull(ShpShapeBuilder shape); + + internal ShpBoundingBox Extent { get; private set; } = new ShpBoundingBox(); + + + /// + /// Shape type. + /// + public ShapeType ShapeType { get; } = ShapeType.NullShape; + + /// + /// Current shape to be written to the underlying stream. + /// + public ShpShapeBuilder Shape { get; } = new ShpShapeBuilder(); + + /// + /// Writes the to the underlying stream and then clears Shape's content. + /// + public void Write() + { + RecordContent.Clear(); + if (IsNull(Shape)) + { + RecordContent.WriteGeometryType(ShapeType.NullShape); + } + else + { + RecordContent.WriteGeometryType(ShapeType); + WriteShapeToBinary(RecordContent); + Extent.Expand(Shape.Extent); + } + + WriteRecordContent(); + Shape.Clear(); + } + + internal abstract void WriteShapeToBinary(BinaryBufferWriter shpRecordBinary); + + internal void WriteRecordContent() + { + Header.Clear(); + Header.WriteShxRecord((int)ShpStream.Position, RecordContent.Size); + Header.CopyTo(ShxStream); // SHX Record + + Header.Clear(); + Header.WriteShpRecordHeader(RecordNumber, RecordContent.Size); + Header.CopyTo(ShpStream); // SHP Record header + RecordContent.CopyTo(ShpStream); // SHP Record content + + RecordNumber++; + } + + private void WriteFileHeader(Stream stream) + { + if (stream == null) + return; + + Header.Clear(); + Header.WriteShpFileHeader(ShapeType, (int)stream.Length, Extent, HasZ, HasM); + + stream.Seek(0, SeekOrigin.Begin); + Header.CopyTo(stream); + } + + /// + protected override void DisposeManagedResources() + { + if (ShpStream != null && ShpStream.Position > Shapefile.FileHeaderSize) + { + WriteFileHeader(ShpStream); + WriteFileHeader(ShxStream); + } + + RecordContent?.Reset(); + Header?.Reset(); + + base.DisposeManagedResources(); // This will dispose owned ShpStream and ShxStream. + } + + internal Exception GetUnsupportedShapeTypeException() + { + throw new FileLoadException(GetType().Name + $" does not support {ShapeType} shapes."); + } + } + + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxReader.cs b/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxReader.cs new file mode 100644 index 0000000..fdbb5b0 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxReader.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + // public class ShxReader { } + + // SHX index file stores the offset and content length for each record in SHP file. + // As there is no additional value, this library ingnores SHX files during reading shapefiles. + +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxWriter.cs b/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxWriter.cs new file mode 100644 index 0000000..c3e7f72 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shx/IO/ShxWriter.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + // public class ShxWriter { } + + // Writing SHX data is handled directly by ShpWriter class. +} diff --git a/src/NetTopologySuite.IO.Esri.Core/Shx/ShxBinary.cs b/src/NetTopologySuite.IO.Esri.Core/Shx/ShxBinary.cs new file mode 100644 index 0000000..0aca9b3 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/Shx/ShxBinary.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile.Core +{ + internal static class ShxBinaryExtensions + { + // ESRI Shapefile Technical Description: The index file header is identical in organization to the SHP file header. + + public static void WriteShxFileHeader(this BinaryBufferWriter binary, ShapeType type, int fileLength, ShpBoundingBox extent, bool hasZ, bool hasM) + { + binary.WriteShpFileHeader(type, fileLength, extent, hasZ, hasM); + } + + public static void ReadShxFileHeader(this BinaryBufferReader binary, out ShapeType type, out int fileLength) + { + binary.ReadShpFileHeader(out type, out fileLength, new ShpBoundingBox()); + } + + + // SHX Record + + public static void WriteShxRecord(this BinaryBufferWriter shxRecord, int offset, int length) + { + shxRecord.Write16BitWords(offset); + shxRecord.Write16BitWords(length); + } + + public static void ReadShxRecord(this BinaryBufferReader shxRecord, out int offset, out int length) + { + offset = shxRecord.Read16BitWords(); + length = shxRecord.Read16BitWords(); + } + + + // ESRI Shapefile Technical Description: + + // The value for file length is the total length of the file in 16-bit words, + // including the fifty 16-bit words that make up the header (which is 100 bytes long). + + // The content length for a record is the length of the record contents section measured in 16-bit words.Each record + // Therefore, contributes (4 + content length) 16-bit words toward the total length of the file, as stored at Byte 24 in the file header. + + // The file length stored in the index file header is the total length of the index file in 16-bit + // words(the fifty 16-bit words of the header plus 4 times the number of records). + + // The offset of a record in the main file is the number of 16-bit words from the start of the main fileto the first byte of the record header for the record. + // Thus, the offset for the first record in the main file is 50, given the 100-byte header. + + public static void Write16BitWords(this BinaryBufferWriter binary, int value) + { + binary.WriteInt32BigEndian(value / 2); + } + public static int Read16BitWords(this BinaryBufferReader binary) + { + return binary.ReadInt32BigEndian() * 2; + } + } +} diff --git a/src/NetTopologySuite.IO.Esri.Core/dBASE.md b/src/NetTopologySuite.IO.Esri.Core/dBASE.md new file mode 100644 index 0000000..731df29 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri.Core/dBASE.md @@ -0,0 +1,93 @@ +# dBASE III format specification + + + +## File Header + +| Byte | Data type | Description | +| :------------------: | :----------------: | :----------------------------------------- | +| 1 ‑ 32 | byte[32] | Table descriptor (see below). | +| 32 ‑ 64 | byte[32] | Field Descriptor (see below). | +| 65 ‑ 96 | byte[32] | Field Descriptor. | +| ... | ... | Field Descriptors. | +| (n‑32) - n | byte[32] | Field Descriptor. Maximum [255 fields][limits]. | +| n+1 | byte | 0x0D stored as the file header terminator. | + +
+ +## Table descriptor + +| Byte | Data type | Sample content | Description | +| :---: | :----------------: | :---------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1 | byte | 0x03 | dBASE file version. | +| 2-4 | byte[3] | 121|01|16 | Date of last DBF file update in YYMMDD format. Each byte contains the number as a binary. Year starts from 1900, therefore possible year values are 1900-2155. | +| 5-8 | uint | 123 | Number of records in the table. Records limit in a table: [1 Billion][limits]. Unsigned 32 bit integer (little-endian). | +| 9-10 | ushort | 161 | Number of bytes in the file header (table descriptor header + field descriptor headers + header terminator char 0x0d). Unsigned 16 bit integer (little-endian). | +| 11-12 | ushort | 123 | Number of bytes in the record. Unsigned 16 bit integer (little-endian). | +| 13-29 | byte[17] | --- | Reserved. Filled with zeros. | +| 30 | byte | 0x23 | Encoding flag based on Language Driver ID (LDID). | +| 31-32 | byte[2] | --- | Reserved. Filled with zeros. | + +
+ +## Field Descriptor + +| Byte | Data type | Sample content | Description | +| :---: | :----------------: | :------------: | :----------------------------------------------------------------------------------------------------------------------------------------------- | +| 1-10 | byte[10] | "NAME" | Field name may contain any letter, number or the undersocre (_) character. Max [10 characters][dBaseIV] long. Empty space [zero-filled][header]. | +| 11 | byte | --- | Reserved. Filled with zero. | +| 12 | byte | 'N' | Field type in ASCII (C, D, F, N, L). | +| 13-16 | byte[4] | --- | Reserved. Filled with zeros. | +| 17 | byte | 19 | Field length. | +| 18 | byte | 15 | Decimal places count for numeric field. | +| 19-32 | byte[14] | --- | Reserved. Filled with zeros. | + +
+ +## Data Types + +| Symbol | Data type | Length | Decimal places | Sample content | Description | +| :----: | :-------: | :---------: | :------------: | :------------: | :-------------------------------------------------------------------------------------------- | +| C | Character | 1-254 | 0 | "NAME" | All OEM code page characters - padded with blanks to the width of the field. | +| D | Date | 8 | 0 | "20210116" | Date stored as a string in the format YYYYMMDD (8 bytes). Any date from AD 1 to AD 9999. | +| N | Numeric | [1-19][len] | [1-15][len] | "12.3456" | Number stored as a string, right justified, and padded with blanks to the width of the field. | +| F | Float | [1-19][len] | [1-15][len] | "12.3456" | Identical to Numeric. [Maintained for compatibility][field-types]. | +| L | Logical | 1 | 0 | 'T' | Initialized to 0x20 (space) otherwise 'T' or 'F'. | + +
+ +## Data records + +The records follow the header in the table file. Data records are preceded by one byte, +that is, a space (0x20) if the record is not deleted, an asterisk (0x2A) if the record is deleted. +Fields are packed into records without field separators or record terminators. +The end of the file is marked by a single byte, with the end-of-file marker, +an OEM code page character value of 26 (0x1A). + +
+ +## Reference + +- [Data File Header Structure for the dBASE Version 7 Table File][header] +- [dBASE Field types][field-types] +- [Understanding DBF Essentials][len] +- [Converting DBF file of dBASE II/III into micro CDS/ISIS](http://web.simmons.edu/~chen/nit/NIT%2789/89-127-han.html) +- [Data types in dBase](https://www.promotic.eu/en/pmdoc/Subsystems/Db/dBase/DataTypes.htm) +- [dBASE IV Basics][dBaseIV] +- [Null values][null] +- [Null value substitution in shapefiles and dBASE (.dbf) files][shp-null] +- [What are the limits to dBASE databases?][limits] +- [Xbase Data file (*.dbf)][xbase] +- [DBF and DBT/FPT file structure][dbf-fpt-format] + + + +[header]: http://www.dbase.com/KnowledgeBase/int/db7_file_fmt.htm +[field-types]: https://www.dbase.com/help/11_2/Design_Tables/IDH_TABLEDES_FIELD_TYPES.htm +[len]: http://www.sfu.ca/sasdoc/sashtml/accpc/z0214453.htm +[dBaseIV]: https://www.osti.gov/servlets/purl/10180088 +[null]: http://www.dbase.com/help/2_80/Plus-en.htm#Language_Definition/IDH_LDEF_NULLVALUES.htm +[shp-null]: https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm +[limits]: http://www.dbase.com/Knowledgebase/faq/dBASE_Limits_FAQ.html +[xbase]: https://www.clicketyclick.dk/databases/xbase/format/dbf.html +[dbf-fpt-format]: http://www.independent-software.com/dbase-dbf-dbt-file-format.html \ No newline at end of file diff --git a/src/NetTopologySuite.IO.Esri.Core/dBASE.png b/src/NetTopologySuite.IO.Esri.Core/dBASE.png new file mode 100644 index 0000000000000000000000000000000000000000..a621aaeab878912876b1f8ea561da7cc2c076899 GIT binary patch literal 20784 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 literal 0 HcmV?d00001 diff --git a/src/NetTopologySuite.IO.Esri/AssemblyInfo.cs b/src/NetTopologySuite.IO.Esri/AssemblyInfo.cs new file mode 100644 index 0000000..6b392e1 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/AssemblyInfo.cs @@ -0,0 +1,12 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: ComVisible(false)] +[assembly: Guid("b03e19e2-1a40-48bf-8b59-4b6bf11aea9d")] + +[assembly: InternalsVisibleTo("NetTopologySuite.IO.ShapeFile.Test, PublicKey=" + + "0024000004800000940000000602000000240000525341310004000001000100e5a9697e3d378d" + + "e4bdd1607b9a6ea7884823d3909f8de55b573416d9adb0ae25eebc39007d71a7228c500d6e846d" + + "54dcc2cd839056c38c0a5e86b73096d90504f753ea67c9b5e61ecfdb8edf0f1dfaf0455e9a0f9e" + + "124e16777baefcda2af9a5a9e48f0c3502891c79444dc2d75aa50b75d148e16f1401dcb18bc163" + + "8cc764a9")] diff --git a/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs b/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs new file mode 100644 index 0000000..20b869a --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs @@ -0,0 +1,215 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + ///

+ /// Feature helper methods. + /// + public static class FeatureExtensions + { + /// + /// Writes features to the shapefile. + /// + /// Features to be written. + /// Path to shapefile. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Projection metadata for the shapefile (.prj file). + public static void SaveToShapefile(this IEnumerable features, string shpPath, Encoding encoding = null, string projection = null) + { + if (features == null) + throw new ArgumentNullException(nameof(features)); + + var firstFeature = features.FirstOrDefault(); + if (firstFeature == null) + throw new ArgumentException(nameof(ShapefileWriter) + " requires at least one feature to be written."); + + var fields = firstFeature.Attributes.GetDbfFields(); + var shapeType = features.FindNonEmptyGeometry().GetShapeType(); + + using (var shpWriter = ShapefileWriter.Open(shpPath, shapeType, fields, encoding, projection)) + { + foreach (var feature in features) + { + shpWriter.Write(feature); + } + } + } + + + internal static Feature ToFeature(this Geometry geometry, AttributesTable attributes) + { + var feature = new Feature(geometry, attributes); + feature.BoundingBox = geometry.EnvelopeInternal; + return feature; + } + + + internal static AttributesTable GetAttributesTable(this DbfFieldCollection fields) + { + return new AttributesTable(fields.GetValues()); + } + + + internal static DbfField[] GetDbfFields(this IAttributesTable attributes) + { + var names = attributes.GetNames(); + var fields = new DbfField[names.Length]; + + for (int i = 0; i < names.Length; i++) + { + var name = names[i]; + var type = attributes.GetType(name); + fields[i] = DbfField.Create(name, type); + } + return fields; + } + + /// + /// Gets default for specified geometry. + /// + /// A Geometry object. + /// Shape type. + public static ShapeType GetShapeType(this Geometry geometry) + { + geometry = FindNonEmptyGeometry(geometry); + + if (geometry == null || geometry.IsEmpty) + return ShapeType.NullShape; + + var ordinates = geometry.GetOrdinates(); + + if (geometry is Point) + return GetPointType(ordinates); + + if (geometry is MultiPoint) + return GetMultiPointType(ordinates); + + if (geometry is LineString || geometry is MultiLineString) + return GetPolyLineType(ordinates); + + if (geometry is Polygon || geometry is MultiPolygon) + return GetPolygonType(ordinates); + + throw new ArgumentException("Unsupported shapefile geometry: " + geometry.GetType().Name); + } + + + private static Geometry FindNonEmptyGeometry(Geometry geometry) + { + if (geometry == null || geometry.IsEmpty) + return null; + + var geomColl = geometry as GeometryCollection; + + // Shapefile specification distinguish between Point and MultiPoint. + // That not the case for PolyLine and Polygon. + if (geometry is MultiPoint || geomColl == null) + { + return geometry; + } + + for (int i = 0; i < geomColl.Count; i++) + { + var geom = geomColl[i]; + + // GeometryCollection -> MultiPolygon -> Polygon + if (geom is GeometryCollection) + geom = FindNonEmptyGeometry(geometry); + + if (geom != null && !geom.IsEmpty) + return geom; + } + return null; + } + + internal static Geometry FindNonEmptyGeometry(this IEnumerable features) + { + if (features == null) + return null; + + foreach (var feature in features) + { + var geometry = FindNonEmptyGeometry(feature.Geometry); + if (geometry != null) + return geometry; + } + + return null; + } + + + private static Ordinates GetOrdinates(this Geometry geometry) + { + if (geometry == null) + throw new ArgumentNullException(nameof(geometry)); + + if (geometry is Point point) + return point.CoordinateSequence.Ordinates; + + if (geometry is LineString line) + return line.CoordinateSequence.Ordinates; + + if (geometry is Polygon polygon) + return polygon.Shell.CoordinateSequence.Ordinates; + + if (geometry.NumGeometries > 0) + return GetOrdinates(geometry.GetGeometryN(0)); + + throw new ArgumentException("Unsupported shapefile geometry: " + geometry.GetType().Name); + } + + + private static ShapeType GetPointType(Ordinates ordinates) + { + if (ordinates == Ordinates.XYM) + return ShapeType.PointM; + + if (ordinates == Ordinates.XYZ || ordinates == Ordinates.XYZM) + return ShapeType.PointZM; + + return ShapeType.Point; + } + + + private static ShapeType GetMultiPointType(Ordinates ordinates) + { + if (ordinates == Ordinates.XYM) + return ShapeType.MultiPointM; + + if (ordinates == Ordinates.XYZ || ordinates == Ordinates.XYZM) + return ShapeType.MultiPointZM; + + return ShapeType.MultiPoint; + } + + + private static ShapeType GetPolyLineType(Ordinates ordinates) + { + if (ordinates == Ordinates.XYM) + return ShapeType.PolyLineM; + + if (ordinates == Ordinates.XYZ || ordinates == Ordinates.XYZM) + return ShapeType.PolyLineZM; + + return ShapeType.PolyLine; + } + + + private static ShapeType GetPolygonType(Ordinates ordinates) + { + if (ordinates == Ordinates.XYM) + return ShapeType.PolygonM; + + if (ordinates == Ordinates.XYZ || ordinates == Ordinates.XYZM) + return ShapeType.PolygonZM; + + return ShapeType.Polygon; + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Extensions/ShpExtensions.cs b/src/NetTopologySuite.IO.Esri/Extensions/ShpExtensions.cs new file mode 100644 index 0000000..99e2a47 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Extensions/ShpExtensions.cs @@ -0,0 +1,120 @@ +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Text; +using NetTopologySuite.IO.Shapefile.Core; + +namespace NetTopologySuite.IO.Shapefile +{ + internal static class ShpExtensions + { + public static Point ToPoint(this ShpCoordinates shpPoint, bool hasZ, bool hasM) + { + if (hasZ && hasM) + { + return new Point(shpPoint.X, shpPoint.Y, shpPoint.Z) { M = shpPoint.M }; + } + else if (hasZ) + { + return new Point(shpPoint.X, shpPoint.Y, shpPoint.Z); + } + else if (hasM) + { + return new Point(shpPoint.X, shpPoint.Y) { M = shpPoint.M }; + } + else + { + return new Point(shpPoint.X, shpPoint.Y); + } + } + + + public static void SetCoordinates(this CoordinateSequence sequence, int index, ShpCoordinates coords, bool hasZ, bool hasM) + { + sequence.SetX(index, coords.X); + sequence.SetY(index, coords.Y); + + if (hasZ) + sequence.SetZ(index, coords.Z); + + if (hasM) + sequence.SetM(index, coords.M); + } + + + public static CoordinateSequence GetPartCoordinates(this ShpShapeBuilder shape, int partIndex, bool hasZ, bool hasM, bool closeSequence = false) + { + var partOffset = shape.GetPartOffset(partIndex); + var shpPartPointCount = shape.GetPointCount(partIndex); + + if (closeSequence) + { + var firstPoint = shape[partOffset]; + var lastPoint = shape[partOffset + shpPartPointCount - 1]; + + closeSequence = (shpPartPointCount > 2) && !firstPoint.Equals(lastPoint); + } + + var sequencePointCount = closeSequence ? shpPartPointCount + 1 : shpPartPointCount; + var points = CreateCoordinateSequence(sequencePointCount, hasZ, hasM); + + for (int i = 0; i < shpPartPointCount; i++) + { + var p = shape[partOffset + i]; + points.SetCoordinates(i, p, hasZ, hasM); + } + + if (closeSequence) + { + var firstPoint = shape[partOffset]; + var lastPointIndex = sequencePointCount - 1; + points.SetCoordinates(lastPointIndex, firstPoint, hasZ, hasM); + } + + return points; + } + + + private static CoordinateSequence CreateCoordinateSequence(int size, bool hasZ, bool hasM) + { + if (hasZ && hasM) + return GeometryFactory.Default.CoordinateSequenceFactory.Create(size, Ordinates.XYZM); + + if (hasZ) + return GeometryFactory.Default.CoordinateSequenceFactory.Create(size, Ordinates.XYZ); + + if (hasM) + return GeometryFactory.Default.CoordinateSequenceFactory.Create(size, Ordinates.XYM); + + return GeometryFactory.Default.CoordinateSequenceFactory.Create(size, Ordinates.XY); + } + + + internal static void AddPoint(this ShpShapeBuilder shape, Point point) + { + if (point == null || point == Point.Empty) + return; + + shape.AddPoint(point.X, point.Y, point.Z, point.M); + } + + + internal static void AddPart(this ShpShapeBuilder shape, CoordinateSequence coordinates) + { + shape.StartNewPart(); + + for (int i = 0; i < coordinates.Count; i++) + { + var x = coordinates.GetX(i); + var y = coordinates.GetY(i); + var z = coordinates.GetZ(i); + var m = coordinates.GetM(i); + shape.AddPoint(x, y, z, m); + } + } + + } + + + +} diff --git a/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj b/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj new file mode 100644 index 0000000..9f72726 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj @@ -0,0 +1,38 @@ + + + + $(ProjectDir)..\ + netstandard2.0 + NetTopologySuite.IO + false + + + + NetTopologySuite.IO.ShapeFile + + + + NetTopologySuite.IO.ShapeFile + NTS - Topology Suite - ShapeFile IO Libraries + NetTopologySuite - Team + NetTopologySuite - Team + LGPL-2.1-or-later + This package contains several IO libraries to cope with spatial data from various sources. + NTS;Shapefile + + + + + + + + + + + + + + + + + diff --git a/src/NetTopologySuite.IO.Esri/README.md b/src/NetTopologySuite.IO.Esri/README.md new file mode 100644 index 0000000..1fcbb7e --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/README.md @@ -0,0 +1,66 @@ +# NetTopologySuite.IO.Esri + +This library provides forward-only readers and writers for [Esri shapefiles](https://support.esri.com/en/white-paper/279). + +## Getting started + +**Writing features to a shapefile** + +```c# +var features = new List(); +for (int i = 1; i < 5; i++) +{ + var attributes = new AttributesTable(); + attributes.Add("date", new DateTime(2000, 1, i + 1)); + attributes.Add("float", i * 0.1); + attributes.Add("int", i); + attributes.Add("logical", i % 2 == 0); + attributes.Add("text", i.ToString("0.00")); + + var lineCoords = new List(); + lineCoords.Add(new CoordinateZ(i, i + 1, i)); + lineCoords.Add(new CoordinateZ(i, i, i)); + lineCoords.Add(new CoordinateZ(i + 1, i, i)); + var line = new LineString(lineCoords.ToArray()); + + var feature = new Feature(line, attributes); + features.Add(feature); +} + +features.SaveToShapefile(shpPath); +``` + +**Reading features from a shapefile** + +```c# +foreach (var feature in ShapefileReader.ReadAll(shpPath)) +{ + Console.WriteLine("Record ID: " + feature.Attributes["Id"]); + foreach (var attrName in feature.Attributes.GetNames()) + { + Console.WriteLine($" {attrName}: {feature.Attributes[attrName]}"); + } + Console.WriteLine($" SHAPE: {feature.Geometry}"); +} +``` + + +**Reading a SHP file geometries** + +```c# +foreach (var geom in ShapefileReader.ReadAllGeometries(shpPath)) +{ + Console.WriteLine(geom); +} +``` + +## Encoding + +The .NET Framework supports a large number of character encodings and code pages. +On the other hand, .NET Core only supports +[limited list](https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider.instance#remarks) of encodings. +To retrieve an encoding that is present in the .NET Framework on the Windows +desktop but not in .NET Core, you need to do the following: +1. Add to your project reference to to the [System.Text.Encoding.CodePages.dll](https://www.nuget.org/packages/System.Text.Encoding.CodePages/). +2. Put the following line somewhere in your code: + `Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);` \ No newline at end of file diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs new file mode 100644 index 0000000..4a48d79 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs @@ -0,0 +1,77 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// MultiPoint shapefile reader. + /// + public class ShapefileMultiPointReader : ShapefileReader + { + + /// + internal ShapefileMultiPointReader(string shpPath, Encoding encoding = null) : base(shpPath, encoding) + { } + + + internal override Core.ShapefileReader CreateReader(string shpPath, Encoding encoding) + { + return new Core.ShapefileMultiPointReader(shpPath, encoding); + } + + + /// + public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) + { + var readSucceed = ReadMultiPoint(out var multiPoint, out attributes, out deleted); + geometry = multiPoint; + return readSucceed; + } + + + /// + /// Reads geometry and feature attributes from underlying SHP and DBF files. + /// + /// Feature geometry. + /// Feature atrributes. + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool ReadMultiPoint(out MultiPoint geometry, out AttributesTable attributes, out bool deleted) + { + if (!Reader.Read(out deleted)) + { + geometry = null; + attributes = null; + return false; + } + + geometry = GetMultiPoint(Reader.Shape, HasZ, HasM); + attributes = Reader.Fields.GetAttributesTable(); + return true; + } + + + internal static MultiPoint GetMultiPoint(Core.ShpShapeBuilder shape, bool hasZ, bool hasM) + { + if (shape.PointCount < 1) + return MultiPoint.Empty; + + var pointCount = shape.PointCount; + var points = new Point[pointCount]; + + for (int i = 0; i < pointCount; i++) + { + points[i] = shape[i].ToPoint(hasZ, hasM); + } + + return new MultiPoint(points); + } + + } +} diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs new file mode 100644 index 0000000..8c0fb27 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs @@ -0,0 +1,71 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// MultiLine shapefile reader. + /// + public class ShapefilePointReader : ShapefileReader + { + + /// + internal ShapefilePointReader(string shpPath, Encoding encoding = null) : base(shpPath, encoding) + { } + + + internal override Core.ShapefileReader CreateReader(string shpPath, Encoding encoding) + { + return new Core.ShapefilePointReader(shpPath, encoding); + } + + + /// + public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) + { + var readSucceed = ReadPoint(out var point, out attributes, out deleted); + geometry = point; + return readSucceed; + } + + + /// + /// Reads geometry and feature attributes from underlying SHP and DBF files. + /// + /// Feature geometry. + /// Feature atrributes. + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool ReadPoint(out Point geometry, out AttributesTable attributes, out bool deleted) + { + if (!Reader.Read(out deleted)) + { + geometry = null; + attributes = null; + return false; + } + + geometry = GetPoint(Reader.Shape, HasZ, HasM); + attributes = Reader.Fields.GetAttributesTable(); + return true; + } + + + internal static Point GetPoint(Core.ShpShapeBuilder shape, bool hasZ, bool hasM) + { + if (shape.PointCount < 1) + return Point.Empty; + + Debug.Assert(shape.PointCount == 1, "Point " + nameof(Core.ShpShapeBuilder) + " has more than one point."); + + return shape[0].ToPoint(hasZ, hasM); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs new file mode 100644 index 0000000..efefa27 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs @@ -0,0 +1,84 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// MultiLine shapefile reader. + /// + public class ShapefilePolyLineReader : ShapefileReader + { + + /// + internal ShapefilePolyLineReader(string shpPath, Encoding encoding = null) : base(shpPath, encoding) + { } + + internal override Core.ShapefileReader CreateReader(string shpPath, Encoding encoding) + { + return new Core.ShapefileMultiPartReader(shpPath, encoding); + } + + /// + public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) + { + var readSucceed = ReadMultiLine(out var line, out attributes, out deleted); + geometry = line; + return readSucceed; + } + + + /// + /// Reads geometry and feature attributes from underlying SHP and DBF files. + /// + /// Feature geometry. + /// Feature atrributes. + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool ReadMultiLine(out MultiLineString geometry, out AttributesTable attributes, out bool deleted) + { + if (!Reader.Read(out deleted)) + { + geometry = null; + attributes = null; + return false; + } + + geometry = GetMultiLineString(Reader.Shape, HasZ, HasM); + attributes = Reader.Fields.GetAttributesTable(); + return true; + } + + + internal static MultiLineString GetMultiLineString(Core.ShpShapeBuilder shape, bool hasZ, bool hasM) + { + if (shape.PartCount < 1 || shape.PointCount < 2) + return MultiLineString.Empty; + + var lines = new List(shape.PartCount); + + for (int partIndex = 0; partIndex < shape.PartCount; partIndex++) + { + var partCoordinates = shape.GetPartCoordinates(partIndex, hasZ, hasM); + + // Line must have at least 2 points + if (partCoordinates.Count < 2) + continue; + + var line = new LineString(partCoordinates, GeometryFactory.Default); + lines.Add(line); + + } + + if (lines.Count < 1) + return MultiLineString.Empty; + + return new MultiLineString(lines.ToArray()); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs new file mode 100644 index 0000000..9d5d43f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs @@ -0,0 +1,168 @@ +using NetTopologySuite.Algorithm; +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// MultiPolygon shapefile reader. + /// + public class ShapefilePolygonReader : ShapefileReader + { + private static readonly LinearRing[] NoHoles = new LinearRing[0]; + + /// + internal ShapefilePolygonReader(string shpPath, Encoding encoding = null) : base(shpPath, encoding) + { } + + + internal override Core.ShapefileReader CreateReader(string shpPath, Encoding encoding) + { + return new Core.ShapefileMultiPartReader(shpPath, encoding); + } + + + /// + public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) + { + var readSucceed = ReadMultiPolygon(out var polygon, out attributes, out deleted); + geometry = polygon; + return readSucceed; + } + + + /// + /// Reads geometry and feature attributes from underlying SHP and DBF files. + /// + /// Feature geometry. + /// Feature atrributes. + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public bool ReadMultiPolygon(out MultiPolygon geometry, out AttributesTable attributes, out bool deleted) + { + if (!Reader.Read(out deleted)) + { + geometry = null; + attributes = null; + return false; + } + + geometry = GetMultiPolygon(Reader.Shape, HasZ, HasM); + attributes = Reader.Fields.GetAttributesTable(); + return true; + } + + + + internal static MultiPolygon GetMultiPolygon(Core.ShpShapeBuilder shape, bool hasZ, bool hasM) + { + if (shape.PartCount < 1 || shape.PointCount < 3) + return MultiPolygon.Empty; + + var (shells, holes) = GetShellsAndHoles(shape, hasZ, hasM); + + if (shells.Count < 1) + return MultiPolygon.Empty; + + // https://gis.stackexchange.com/a/147971/26684 + // There could be nested shells (nested outer rings). Add a hole to the smallest one. + shells.Sort(CompareLinearRingAreas); + + var polygons = new Polygon[shells.Count]; + for (int i = 0; i < shells.Count; i++) + { + var shell = shells[i]; + var shellHoles = PopHoles(shell, holes); + polygons[i] = new Polygon(shell, shellHoles); + } + + return new MultiPolygon(polygons); + } + + + private static LinearRing[] PopHoles(LinearRing shell, List holes) + { + if (holes.Count < 1) + return NoHoles; + + var shellHoles = new List(); + + for (int i = holes.Count - 1; i >= 0; i--) + { + var hole = holes[i]; + if (hole == null) + continue; + + var holePoint = hole.CoordinateSequence.GetCoordinate(0); + if (!shell.EnvelopeInternal.Contains(holePoint)) // Fast, but not precise. + continue; + + if (!PointLocation.IsInRing(holePoint, shell.CoordinateSequence)) + continue; + + shellHoles.Add(hole); + // holes.RemoveAt(i); // Avoid copying internal List's array over and over. + holes[i] = null; + } + + if (shellHoles.Count < 1) + return NoHoles; + + return shellHoles.ToArray(); + } + + + private static int CompareLinearRingAreas(LinearRing ring1, LinearRing ring2) + { + var area1 = Area.OfRing(ring1.CoordinateSequence); + var area2 = Area.OfRing(ring2.CoordinateSequence); + return area1.CompareTo(area2); + } + + private static (List Shells, List Holes) GetShellsAndHoles(Core.ShpShapeBuilder shape, bool hasZ, bool hasM) + { + var shells = new List(shape.PartCount); + var holes = new List(); + + for (int partIndex = 0; partIndex < shape.PartCount; partIndex++) + { + var partCoordinates = shape.GetPartCoordinates(partIndex, hasZ, hasM, true); + + // Polygon must have at least 3 points + if (partCoordinates.Count < 3) + continue; + + var ring = new LinearRing(partCoordinates, GeometryFactory.Default); + + // https://gis.stackexchange.com/a/147971/26684 + if (ring.IsCCW) + { + holes.Add(ring); + } + else + { + shells.Add(ring); + } + } + + // If there are only holes, without any shel (outer ring) + if (shells.Count < 1 && holes.Count > 0) + { + foreach (var hole in holes) + { + var reversedHole = new LinearRing(hole.CoordinateSequence.Reversed(), GeometryFactory.Default); + shells.Add(reversedHole); + } + holes.Clear(); + } + + return (shells, holes); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs new file mode 100644 index 0000000..97e1e47 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs @@ -0,0 +1,280 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// Base class for reading a shapefile. + /// + public abstract class ShapefileReader : Shapefile, IEnumerable + { + private protected readonly bool HasZ; + private protected readonly bool HasM; + private protected Core.ShapefileReader Reader { get; } + + /// + /// Initializes a new instance of the reader class. + /// + /// Path to SHP file. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + internal ShapefileReader(string shpPath, Encoding encoding) + { + try + { + Reader = CreateReader(shpPath, encoding); + HasZ = Reader.ShapeType.HasZ(); + HasM = Reader.ShapeType.HasM(); + + var bb = Reader.BoundingBox; + BoundingBox = new Envelope(bb.X.Min, bb.X.Max, bb.Y.Min, bb.Y.Max); + } + catch + { + DisposeManagedResources(); + throw; + } + } + + internal abstract Core.ShapefileReader CreateReader(string shpPath, Encoding encoding); + + + /// + public override ShapeType ShapeType => Reader.ShapeType; + + /// + public override DbfFieldCollection Fields => Reader.Fields; + + + /// + /// Encoding used by the shapefile. + /// + public Encoding Encoding => Reader.Encoding; + + + /// + /// Well-known text representation of coordinate reference system metadata from .prj file. + /// + /// + /// https://support.esri.com/en/technical-article/000001897 + /// /> + public string Projection => Reader.Projection; + + /// + /// The minimum bounding rectangle orthogonal to the X and Y. + /// + public Envelope BoundingBox { get; } = new Envelope(); + + + /// + /// Reads geometry and feature attributes from underlying SHP and DBF files. + /// + /// Feature geometry. + /// Feature atrributes. + /// Indicates if the record was marked as deleted. + /// + /// true if the enumerator was successfully advanced to the next record; + /// false if the enumerator has passed the end of the table. + /// + public abstract bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted); + + + /// + protected override void DisposeManagedResources() + { + Reader?.Dispose(); + base.DisposeManagedResources(); // This will dispose streams used by ShpReader and DbfReader. Do it at the end. + } + + internal void Restart() + { + Reader.Restart(); + } + + #region *** Enumerator *** + + IEnumerator IEnumerable.GetEnumerator() + { + return new FeatureEnumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return new FeatureEnumerator(this); + } + + private class FeatureEnumerator : IEnumerator + { + private readonly ShapefileReader Owner; + public Feature Current { get; private set; } + object IEnumerator.Current => Current; + + public FeatureEnumerator(ShapefileReader owner) + { + Owner = owner; + } + + public void Reset() + { + Owner.Restart(); + } + + public bool MoveNext() + { + if (!Owner.Read(out var geometry, out var attributes, out var deleted)) + { + return false; + } + + if (deleted) + { + return MoveNext(); + } + + Current = geometry.ToFeature(attributes); + return true; + } + + public void Dispose() + { + // Nothing to dispose + } + } + + #endregion + + + /// + /// Opens shapefile reader. + /// + /// Path to shapefile. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Shapefile reader. + public static ShapefileReader Open(string shpPath, Encoding encoding = null) + { + shpPath = Path.ChangeExtension(shpPath, ".shp"); + var shapeType = Core.ShpReader.GetShapeType(shpPath); + + if (shapeType.IsPoint()) + { + return new ShapefilePointReader(shpPath, encoding); + } + else if (shapeType.IsMultiPoint()) + { + return new ShapefileMultiPointReader(shpPath, encoding); + } + else if (shapeType.IsPolyLine()) + { + return new ShapefilePolyLineReader(shpPath, encoding); + } + else if (shapeType.IsPolygon()) + { + return new ShapefilePolygonReader(shpPath, encoding); + } + else + { + throw new FileLoadException("Unsupported shapefile type: " + shapeType, shpPath); + } + } + + /// + /// Reads all shapefile features. + /// + /// Path to shapefile. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Shapefile features collection. + public static Feature[] ReadAll(string shpPath, Encoding encoding = null) + { + using (var shpReader = Open(shpPath, encoding)) + { + return shpReader.ToArray(); + } + } + + /// + /// Reads all shapefile geometries. + /// + /// Path to SHP file. + /// Shapefile geometry collection. + public static Geometry[] ReadAllGeometries(string shpPath) + { + var shapeType = Core.ShpReader.GetShapeType(shpPath); + var hasZ = shapeType.HasZ(); + var hasM = shapeType.HasM(); + + using (var shpStream = new FileStream(shpPath, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + if (shapeType.IsPoint()) + { + return ReadAllPoints(shpStream, hasZ, hasM).ToArray(); + } + else if (shapeType.IsMultiPoint()) + { + return ReadAllMultiPoints(shpStream, hasZ, hasM).ToArray(); + } + else if (shapeType.IsPolyLine()) + { + return ReadAllPolyLines(shpStream, hasZ, hasM).ToArray(); + } + else if (shapeType.IsPolygon()) + { + return ReadAllPolygons(shpStream, hasZ, hasM).ToArray(); + } + else + { + throw new FileLoadException("Unsupported shapefile type: " + shapeType, shpPath); + } + } + } + + private static IEnumerable ReadAllPoints(Stream shpStream, bool hasZ, bool hasM) + { + using (var shpReader = new Core.ShpPointReader(shpStream)) + { + while (shpReader.Read()) + { + yield return ShapefilePointReader.GetPoint(shpReader.Shape, hasZ, hasM); + } + } + } + + private static IEnumerable ReadAllMultiPoints(Stream shpStream, bool hasZ, bool hasM) + { + using (var shpReader = new Core.ShpMultiPartReader(shpStream)) + { + while (shpReader.Read()) + { + yield return ShapefileMultiPointReader.GetMultiPoint(shpReader.Shape, hasZ, hasM); + } + } + } + + private static IEnumerable ReadAllPolyLines(Stream shpStream, bool hasZ, bool hasM) + { + using (var shpReader = new Core.ShpMultiPartReader(shpStream)) + { + while (shpReader.Read()) + { + yield return ShapefilePolyLineReader.GetMultiLineString(shpReader.Shape, hasZ, hasM); + } + } + } + + private static IEnumerable ReadAllPolygons(Stream shpStream, bool hasZ, bool hasM) + { + using (var shpReader = new Core.ShpMultiPartReader(shpStream)) + { + while (shpReader.Read()) + { + yield return ShapefilePolygonReader.GetMultiPolygon(shpReader.Shape, hasZ, hasM); + } + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseEnumerator.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseEnumerator.cs new file mode 100644 index 0000000..f1f1fca --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseEnumerator.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NetTopologySuite.Features; + +namespace NetTopologySuite.IO.ShapeFile.Extended +{ + internal class DbaseEnumerator : IEnumerator, IDisposable + { + private DbaseReader m_Reader; + private int m_CurrentAttrTbleIndex; + + public DbaseEnumerator(DbaseReader reader) + { + m_Reader = reader.Clone(); + m_CurrentAttrTbleIndex = 0; + } + + public IAttributesTable Current + { + get; + private set; + } + + public void Dispose() + { + m_Reader.Dispose(); + } + + object IEnumerator.Current => ((IEnumerator)this).Current; + + public bool MoveNext() + { + if (m_CurrentAttrTbleIndex == m_Reader.NumOfRecords) + { + return false; + } + + Current = m_Reader.ReadEntry(m_CurrentAttrTbleIndex); + m_CurrentAttrTbleIndex++; + + return true; + } + + public void Reset() + { + var newReader = m_Reader.Clone(); + m_Reader.Dispose(); + m_Reader = newReader; + m_CurrentAttrTbleIndex = 0; + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseReader.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseReader.cs new file mode 100644 index 0000000..f6fa471 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/DbaseReader.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using NetTopologySuite.Features; +using NetTopologySuite.IO.Streams; + +namespace NetTopologySuite.IO.ShapeFile.Extended +{ + public class DbaseReader : IEnumerable, IDisposable + { + private DbaseHeader m_Header = null; + //private readonly string m_Filename; + private readonly StreamProvider m_StreamProvider; + private BinaryReader m_FileReader; + private bool m_IsDisposed; + + /// + /// Initializes a new instance of the DbaseFileReader class. + /// + /// + public DbaseReader(string filename) + : this(new StreamProvider(StreamTypes.Data, filename, true)) + { + } + + public DbaseReader(StreamProvider streamProvider) + { + m_StreamProvider = streamProvider; + //ReadHeader(); + } + + ~DbaseReader() + { + Dispose(false); + } + + internal int NumOfRecords => m_Header.RecordCount; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + public IAttributesTable ReadEntry(int index) + { + if (m_IsDisposed) + { + throw new InvalidOperationException("Reader was disposed, cannot read from a disposed reader"); + } + + if (index < 0) + { + throw new ArgumentException("Index must be positive", "index"); + } + + int seekLocation = 1; // m_Header.FieldHeaderSize + (index * m_Header.RecordSize); + + if (seekLocation >= m_FileReader.BaseStream.Length) + { + throw new ArgumentOutOfRangeException("index", "No DBF entry with index " + index); + } + + m_FileReader.BaseStream.Seek(seekLocation, SeekOrigin.Begin); + + var tbl = new AttributesTable(); + var data = ReadCurrentEntry(); + + for (int i = 0; i < data.Count; i++) + { + tbl.Add(m_Header.Fields[i].Name, data[i]); + } + + return tbl; + } + + public IEnumerator GetEnumerator() + { + return new DbaseEnumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)this).GetEnumerator(); + } + + internal DbaseReader Clone() + { + return new DbaseReader(m_StreamProvider); + } + + private ArrayList ReadCurrentEntry() + { + ArrayList attrs = null; + + // retrieve the record length + int tempNumFields = 1; // m_Header.NumFields; + + // storage for the actual values + attrs = new ArrayList(tempNumFields); + + // read the deleted flag + char tempDeleted = (char)m_FileReader.ReadChar(); + + // read the record length + int tempRecordLength = 1; // for the deleted character just read. + + // read the Fields + for (int j = 0; j < tempNumFields; j++) + { + // find the length of the field. + int tempFieldLength = m_Header.Fields[j].Length; + tempRecordLength = tempRecordLength + tempFieldLength; + + // find the field type + char tempFieldType = (char)m_Header.Fields[j].FieldType; + + // read the data. + object tempObject = null; + switch (tempFieldType) + { + case 'L': // logical data type, one character (T,t,F,f,Y,y,N,n) + char tempChar = (char)m_FileReader.ReadByte(); + if ((tempChar == 'T') || (tempChar == 't') || (tempChar == 'Y') || (tempChar == 'y')) + tempObject = true; + else tempObject = false; + break; + + case 'C': // character record. + + if (m_Header.Encoding == null) + { + char[] sbuffer = m_FileReader.ReadChars(tempFieldLength); + tempObject = new string(sbuffer).Trim().Replace("\0", string.Empty); //.ToCharArray(); + } + else + { + byte[] buf = m_FileReader.ReadBytes(tempFieldLength); + tempObject = m_Header.Encoding.GetString(buf, 0, buf.Length).Trim(); + } + break; + + case 'D': // date data type. + char[] ebuffer = m_FileReader.ReadChars(8); + string tempString = new string(ebuffer, 0, 4); + + int year; + if (!int.TryParse(tempString, NumberStyles.Integer, CultureInfo.InvariantCulture, out year)) + break; + tempString = new string(ebuffer, 4, 2); + + int month; + if (!int.TryParse(tempString, NumberStyles.Integer, CultureInfo.InvariantCulture, out month)) + break; + tempString = new string(ebuffer, 6, 2); + + int day; + if (!int.TryParse(tempString, NumberStyles.Integer, CultureInfo.InvariantCulture, out day)) + break; + + try + { + if (day > 0 && year > 0 && month > 0 && month <= 12) // don't try to parse date when day is invalid - it will be useless and slow for large files + tempObject = new DateTime(year, month, day); + } + catch (Exception) + { + } + + break; + + case 'N': // number + case 'F': // floating point number + char[] fbuffer = m_FileReader.ReadChars(tempFieldLength); + tempString = new string(fbuffer); + + // if we can't format the number, just save it as a string + tempObject = tempString; + + double result; + var numberStyle = NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent; + if (double.TryParse(tempString, numberStyle, CultureInfo.InvariantCulture, out result)) + { + tempObject = result; + } + break; + + default: + throw new NotSupportedException("Do not know how to parse Field type " + tempFieldType); + } + + attrs.Add(tempObject); + } + + // ensure that the full record has been read. + if (tempRecordLength < m_Header.RecordSize) + { + m_FileReader.ReadBytes(m_Header.RecordSize - tempRecordLength); + } + return attrs; + } + + private void Dispose(bool disposing) + { + if (!m_IsDisposed) + { + if (m_FileReader != null) + { + m_FileReader.Close(); + } + + m_IsDisposed = true; + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/IShapefileFeature.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/IShapefileFeature.cs new file mode 100644 index 0000000..5b24910 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/IShapefileFeature.cs @@ -0,0 +1,9 @@ +using NetTopologySuite.Features; + +namespace NetTopologySuite.IO.ShapeFile.Extended.Entities +{ + public interface IShapefileFeature : IFeature + { + long FeatureId { get; } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/ShapefileFeature.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/ShapefileFeature.cs new file mode 100644 index 0000000..6c9373d --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/Entities/ShapefileFeature.cs @@ -0,0 +1,75 @@ +using System; +using System.Threading; +using System.Runtime.Serialization; + +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Handlers; + +namespace NetTopologySuite.IO.ShapeFile.Extended.Entities +{ + [Serializable] + internal class ShapefileFeature : IShapefileFeature, ISerializable + { + + public ShapefileFeature(ShapeReader shapeReader, DbaseReader dbfReader, ShapeLocationInFileInfo shapeLocation, GeometryFactory geoFactory) + { + FeatureId = shapeLocation.ShapeIndex; + + // removed "lazy" evaluation to avoid dispose issues (see #27) + var geom = shapeReader.ReadShapeAtOffset(shapeLocation.OffsetFromStartOfFile, geoFactory); + var attributes = dbfReader.ReadEntry(shapeLocation.ShapeIndex); + + Geometry = geom; + Attributes = attributes; + } + + private ShapefileFeature(SerializationInfo info, StreamingContext context) + { + var geom = (Geometry)info.GetValue("Geometry", typeof(Geometry)); + var attributes = (IAttributesTable)info.GetValue("Attributes", typeof(IAttributesTable)); + + FeatureId = info.GetInt64("FeatureId"); + Geometry = geom; + Attributes = attributes; + } + + public Geometry Geometry { get; } + + public Envelope BoundingBox => Geometry.EnvelopeInternal; + + public IAttributesTable Attributes { get; } + + public long FeatureId { get; } + + Geometry IFeature.Geometry + { + get => Geometry; + set => throw new NotSupportedException("Setting geometry on a shapefile reader is not supported!"); + } + + Envelope IFeature.BoundingBox + { + get => BoundingBox; + set => throw new InvalidOperationException("Setting BoundingBox not allowed for Shapefile feature"); + } + + IAttributesTable IFeature.Attributes + { + get => Attributes; + set => throw new NotSupportedException("Setting attributes on a shapefile reader is not supported!"); + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + if (info is null) + { + throw new ArgumentNullException(nameof(info)); + } + + info.AddValue("Geometry", Geometry); + info.AddValue("Attributes", Attributes); + info.AddValue("FeatureId", FeatureId); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeDataReader.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeDataReader.cs new file mode 100644 index 0000000..6431024 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeDataReader.cs @@ -0,0 +1,195 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using NetTopologySuite.Geometries; +using NetTopologySuite.Index; +using NetTopologySuite.Index.Strtree; +using NetTopologySuite.IO.Handlers; +using NetTopologySuite.IO.ShapeFile.Extended.Entities; +using NetTopologySuite.IO.Streams; + +namespace NetTopologySuite.IO.ShapeFile.Extended +{ + public class ShapeDataReader : IDisposable + { + private const string DBF_EXT = ".dbf"; + + private readonly ISpatialIndex m_SpatialIndex; + private readonly Task m_IndexCreationTask; + private bool m_IsIndexingComplete; + private readonly CancellationTokenSource m_CancellationTokenSrc; + private readonly DbaseReader m_DbfReader; + private readonly GeometryFactory m_GeoFactory; + private readonly ShapeReader m_ShapeReader; + + public ShapeDataReader(string shapeFilePath, ISpatialIndex index, GeometryFactory geoFactory, bool buildIndexAsync) + :this(new StreamProviderRegistry(shapeFilePath, true, true), index, geoFactory, buildIndexAsync) + { + } + + public ShapeDataReader(StreamProviderRegistry streamProviderRegistry , ISpatialIndex index, GeometryFactory geoFactory, bool buildIndexAsync) + { + + m_SpatialIndex = index; + m_GeoFactory = geoFactory; + + ValidateParameters(); + + m_ShapeReader = new ShapeReader(streamProviderRegistry); + + if (buildIndexAsync) + { + m_CancellationTokenSrc = new CancellationTokenSource(); + m_IndexCreationTask = Task.Factory.StartNew(FillSpatialIndex, m_CancellationTokenSrc.Token); + } + else + { + FillSpatialIndex(); + } + + m_DbfReader = new DbaseReader(streamProviderRegistry.DataStream); + } + + public ShapeDataReader(string shapeFilePath, ISpatialIndex index, GeometryFactory geoFactory) + : this(shapeFilePath, index, geoFactory, true) + { } + + public ShapeDataReader(string shapeFilePath, ISpatialIndex index) + : this(shapeFilePath, index, new GeometryFactory()) + { } + + public ShapeDataReader(string shapeFilePath) + : this(shapeFilePath, new STRtree()) + { } + + ~ShapeDataReader() + { + Dispose(false); + } + + public Envelope ShapefileBounds => m_ShapeReader.ShapefileHeader.Bounds; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Query shapefile by MBR. + /// MBR coordinates MUST be in the Shapefile's coordinate system. + /// + /// NOTE: If you are using the default ISpatialIndex (which is an instance of the STRtree NTS class), it has some limitations. + /// Since it works with MBRs rather than the shapes themselves, you can get some shapes that are not actually in the MBR + /// you provided just because their MBRs are bounded by the given envelope. + /// If you wish to avoid this behaviour, send true in the second paramter, but be weary of the consequences listed below. + /// + /// The envlope to query. + /// + /// False by default, true to double-check the returned geometries against given Envelope, to avoid index error margin. + /// + /// It is advisable that you implement your own ISpatialIndex with your required precision rather than set this to True. + /// + /// ********** + /// CAUTION: If you choose to set this parameter as True, it will greatly affect performance as it + /// will cancel any lazy mechanism implemented with reading the geometries from the file. + /// Do not set this to True unless you either: + /// A. Do not have any performance restrictions. + /// Or: + /// B. Absolutely need that precision in the geographic query. + /// ********** + /// + /// + public IEnumerable ReadByMBRFilter(Envelope envelope, bool testGeometriesActuallyInMBR = false) + { + if (envelope == null) + { + throw new ArgumentNullException("envelope"); + } + + // If index creation task wasnt completed, wait for it to complete. + if (!m_IsIndexingComplete) + { + m_IndexCreationTask.Wait(); + } + + var shapesInRegion = m_SpatialIndex.Query(envelope); + + if (shapesInRegion.Count == 0) + { + return Enumerable.Empty(); + } + + var results = shapesInRegion.Select(ReadFeature); + + if (!testGeometriesActuallyInMBR) + { + return results; + } + else + { + var envelopeGeo = new GeometryFactory().ToGeometry(envelope); + + return results.Where(feature => envelopeGeo.Intersects(feature.Geometry)); + } + } + + private IShapefileFeature ReadFeature(ShapeLocationInFileInfo shapeLocationInfo) + { + return new ShapefileFeature(m_ShapeReader, m_DbfReader, shapeLocationInfo, m_GeoFactory); + } + + /// + /// Check validity of parameters - null values and that all file needed to read shapes exist. + /// + private void ValidateParameters() + { + if (m_SpatialIndex == null) + { + throw new ArgumentNullException("index"); + } + if (m_GeoFactory == null) + { + throw new ArgumentNullException("GeoFactory"); + } + } + + private void FillSpatialIndex() + { + bool isAsync = m_CancellationTokenSrc != null; + + foreach (var mbrInfo in m_ShapeReader.ReadMBRs()) + { + if (isAsync && m_CancellationTokenSrc.IsCancellationRequested) + { + break; + } + + m_SpatialIndex.Insert(mbrInfo.ShapeMBR, mbrInfo.ShapeFileDetails); + } + + m_IsIndexingComplete = true; + } + + private void Dispose(bool disposing) + { + if (m_CancellationTokenSrc != null) + { + m_CancellationTokenSrc.Cancel(); + } + + if (m_DbfReader != null) + { + m_DbfReader.Dispose(); + } + + if (m_ShapeReader != null) + { + m_ShapeReader.Dispose(); + } + + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeReader.cs b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeReader.cs new file mode 100644 index 0000000..70bb16f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/ShapeFile.Extended/ShapeReader.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Handlers; +using NetTopologySuite.IO.Streams; + +namespace NetTopologySuite.IO.ShapeFile.Extended +{ + /// + /// A class to read from a set of files forming the ESRI-Shapefile + /// + public class ShapeReader : IDisposable + { + const long HEADER_LENGTH = 100; + + private BigEndianBinaryReader m_ShapeFileReader; + + //private readonly string m_ShapeFilePath; + private readonly StreamProviderRegistry m_StreamProviderRegistry; + private readonly ShapeHandler m_ShapeHandler; + private readonly Lazy m_ShapeOffsetCache; + private bool m_IsDisposed; + + /// + /// Creates an instance of this class to read from the Shapefile set of files defined by + /// + /// The path to the Shapefile + public ShapeReader(string shapefilePath) : this(new StreamProviderRegistry(shapefilePath, true)) + { + } + + public ShapeReader(StreamProviderRegistry streamProviderRegistry) + { + if (streamProviderRegistry == null) + throw new ArgumentNullException("streamProviderRegistry"); + + m_StreamProviderRegistry = streamProviderRegistry; + + ShapefileHeader = new ShapefileHeader(ShapeReaderStream); + m_ShapeHandler = Shapefile.GetShapeHandler(ShapefileHeader.ShapeType); + + m_ShapeOffsetCache = new Lazy(BuildOffsetCache, LazyThreadSafetyMode.ExecutionAndPublication); + + } + + /// + /// Finalizer + /// + ~ShapeReader() + { + Dispose(false); + } + + /// + /// Dispose method + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (m_IsDisposed) + { + return; + } + + m_IsDisposed = true; + CloseShapeFileHandle(); + } + /// + /// Gets a value indicating the header of the main Shapefile (*.shp) + /// + public ShapefileHeader ShapefileHeader { get; } + + private BigEndianBinaryReader ShapeReaderStream + { + get + { + ThrowIfDisposed(); + + if (m_ShapeFileReader == null) + { + lock (m_StreamProviderRegistry) + { + if (m_ShapeFileReader == null) + { + m_ShapeFileReader = new BigEndianBinaryReader(m_StreamProviderRegistry.ShapeStream.OpenRead()); + } + } + } + + return m_ShapeFileReader; + } + } + + /// + /// Function to read the bounding boxes of all geometries in the Shapefile (*.shp) + /// + /// An enumeration of bounding boxes + public IEnumerable ReadMBRs() + { + ThrowIfDisposed(); + + lock (m_StreamProviderRegistry) + { + var newReader = new BigEndianBinaryReader(m_StreamProviderRegistry.ShapeStream.OpenRead()); + return m_ShapeHandler.ReadMBRs(newReader); + } + } + + public IEnumerable ReadAllShapes(GeometryFactory geoFactory) + { + ThrowIfDisposed(); + + if (geoFactory == null) + { + throw new ArgumentNullException("geoFactory"); + } + + return m_ShapeOffsetCache.Value.Select(offset => ReadShapeAtOffset(offset, geoFactory)); + } + + public Geometry ReadShapeAtIndex(int index, GeometryFactory geoFactory) + { + ThrowIfDisposed(); + + if (geoFactory == null) + { + throw new ArgumentNullException("geoFactory"); + } + + if (index < 0 || index >= m_ShapeOffsetCache.Value.Length) + { + throw new ArgumentOutOfRangeException("index"); + } + + return ReadShapeAtOffset(m_ShapeOffsetCache.Value[index], geoFactory); + } + + /// + /// Read shape at a given offset. + /// + /// The offset at which the requested shape metadata begins. + /// + /// + public Geometry ReadShapeAtOffset(long shapeOffset, GeometryFactory geoFactory) + { + Geometry currGeomtry = null; + ThrowIfDisposed(); + + if (shapeOffset < HEADER_LENGTH || shapeOffset >= ShapeReaderStream.BaseStream.Length) + { + throw new IndexOutOfRangeException("Shape offset cannot be lower than header length (100) or higher than shape file size"); + } + + lock (ShapeReaderStream) + { + // Skip to shape size location in file. + ShapeReaderStream.BaseStream.Seek(shapeOffset + 4, SeekOrigin.Begin); + + int currShapeLengthInWords = ShapeReaderStream.ReadInt32BE(); + + currGeomtry = m_ShapeHandler.Read(ShapeReaderStream, currShapeLengthInWords, geoFactory); + } + + return currGeomtry; + } + + private long[] BuildOffsetCache() + { + using (var shapeFileReader = new BigEndianBinaryReader(m_StreamProviderRegistry.ShapeStream.OpenRead())) + { + return m_ShapeHandler.ReadMBRs(shapeFileReader) + .Select(mbrInfo => mbrInfo.ShapeFileDetails.OffsetFromStartOfFile) + .ToArray(); + } + + } + + private void ThrowIfDisposed() + { + if (m_IsDisposed) + { + throw new InvalidOperationException("Cannot use a disposed ShapeReader"); + } + } + + private void CloseShapeFileHandle() + { + if (m_ShapeFileReader != null) + { + m_ShapeFileReader.Close(); + m_ShapeFileReader = null; + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefileMultiPointWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefileMultiPointWriter.cs new file mode 100644 index 0000000..b77214f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefileMultiPointWriter.cs @@ -0,0 +1,54 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + + /// + /// MultiPoint shapefile writer. + /// + public class ShapefileMultiPointWriter : ShapefileWriter + { + /// + public ShapefileMultiPointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefileMultiPointWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { } + + + internal override Core.ShapefileWriter CreateWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + return new Core.ShapefileMultiPointWriter(shpPath, type, fields, encoding, projection); + } + + internal override void GetShape(Geometry geometry, Core.ShpShapeBuilder shape) + { + shape.Clear();; + if (geometry is MultiPoint multiPoint) + { + shape.StartNewPart(); + AddMultiPoint(shape, multiPoint); + } + else + { + throw GetUnsupportedGeometryTypeException(geometry); + } + } + + + private void AddMultiPoint(Core.ShpShapeBuilder shape, MultiPoint multiPoint) + { + for (int i = 0; i < multiPoint.NumGeometries; i++) + { + shape.AddPoint(multiPoint.GetGeometryN(i) as Point); + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs new file mode 100644 index 0000000..a98b175 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs @@ -0,0 +1,51 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + + /// + /// Point shapefile writer. + /// + public class ShapefilePointWriter : ShapefileWriter + { + /// + public ShapefilePointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefilePointWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { } + + + internal override Core.ShapefileWriter CreateWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + return new Core.ShapefilePointWriter(shpPath, type, fields, encoding, projection); + } + + internal override void GetShape(Geometry geometry, Core.ShpShapeBuilder shape) + { + shape.Clear(); + if (geometry is Point point) + { + shape.StartNewPart(); + AddPoint(shape, point); + } + else + { + throw GetUnsupportedGeometryTypeException(geometry); + } + } + + + private void AddPoint(Core.ShpShapeBuilder shape, Point point) + { + shape.AddPoint(point); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolyLineWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolyLineWriter.cs new file mode 100644 index 0000000..ea8775f --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolyLineWriter.cs @@ -0,0 +1,66 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + + /// + /// MultiLine shapefile writer. + /// + public class ShapefilePolyLineWriter : ShapefileWriter + { + /// + public ShapefilePolyLineWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefilePolyLineWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { } + + + internal override Core.ShapefileWriter CreateWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + return new Core.ShapefileMultiPartWriter(shpPath, type, fields, encoding, projection); + } + + internal override void GetShape(Geometry geometry, Core.ShpShapeBuilder shape) + { + shape.Clear(); + if (geometry is MultiLineString multiLine) + { + AddMultiLineString(multiLine, shape); + } + else if (geometry is LineString line) + { + AddLineString(line, shape); + } + else + { + throw GetUnsupportedGeometryTypeException(geometry); + } + } + + + private void AddMultiLineString(MultiLineString multiLine, Core.ShpShapeBuilder shape) + { + for (int i = 0; i < multiLine.NumGeometries; i++) + { + AddLineString(multiLine.GetGeometryN(i) as LineString, shape); + } + } + + + private void AddLineString(LineString line, Core.ShpShapeBuilder shape) + { + if (line == null || line == LineString.Empty) + return; + + shape.AddPart(line.CoordinateSequence); + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolygonWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolygonWriter.cs new file mode 100644 index 0000000..69e7955 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePolygonWriter.cs @@ -0,0 +1,77 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + + /// + /// MultiPolygon shapefile writer. + /// + public class ShapefilePolygonWriter : ShapefileWriter + { + /// + public ShapefilePolygonWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + : base(shpPath, type, fields, encoding, projection) + { } + + /// + public ShapefilePolygonWriter(string shpPath, ShapeType type, params DbfField[] fields) + : base(shpPath, type, fields) + { } + + + internal override Core.ShapefileWriter CreateWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + return new Core.ShapefileMultiPartWriter(shpPath, type, fields, encoding, projection); + } + + internal override void GetShape(Geometry geometry, Core.ShpShapeBuilder shape) + { + shape.Clear(); + if (geometry is MultiPolygon multiPolygon) + { + AddMultiPolygon(multiPolygon, shape); + } + else if (geometry is Polygon polygon) + { + AddPolygon(polygon, shape); + } + else + { + throw GetUnsupportedGeometryTypeException(geometry); + } + } + + + private void AddMultiPolygon(MultiPolygon multiPolygon, Core.ShpShapeBuilder shape) + { + shape.Clear(); + + for (int i = 0; i < multiPolygon.NumGeometries; i++) + { + AddPolygon(multiPolygon.GetGeometryN(i) as Polygon, shape); + } + } + + + private void AddPolygon(Polygon polygon, Core.ShpShapeBuilder shape) + { + if (polygon == null || polygon == Polygon.Empty) + return; + + // SHP Spec: Vertices for a single polygon are always in clockwise order. + var shellCoordinates = polygon.Shell.IsCCW ? polygon.Shell.CoordinateSequence.Reversed() : polygon.Shell.CoordinateSequence; + shape.AddPart(shellCoordinates); + + foreach (var hole in polygon.Holes) + { + // SHP Spec: Vertices of rings defining holes in polygons are in a counterclockwise direction. + var holeCoordinates = hole.IsCCW ? hole.CoordinateSequence : hole.CoordinateSequence.Reversed(); + shape.AddPart(holeCoordinates); + } + } + } +} diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefileWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefileWriter.cs new file mode 100644 index 0000000..9101c99 --- /dev/null +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefileWriter.cs @@ -0,0 +1,166 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.Shapefile +{ + /// + /// Base class for writing a shapefile. + /// + public abstract class ShapefileWriter : Shapefile + { + private readonly Core.ShapefileWriter Writer; + + + /// + /// Initializes a new instance of the writer class. + /// + /// Path to SHP file. + /// Shape type. + /// Shapefile attribute definitions. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Projection metadata for the shapefile (.prj file). + internal ShapefileWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + { + try + { + Writer = CreateWriter(shpPath, type, fields, encoding, projection); + ShapeType = type; + } + catch + { + DisposeManagedResources(); + throw; + } + } + + + /// + /// Initializes a new instance of the writer class. + /// + /// Path to SHP file. + /// Shape type. + /// Shapefile attribute definitions. + internal ShapefileWriter(string shpPath, ShapeType type, params DbfField[] fields) : this(shpPath, type, fields, null, null) + { + } + + internal abstract Core.ShapefileWriter CreateWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection); + + internal abstract void GetShape(Geometry geometry, Core.ShpShapeBuilder shape); + + /// + public override ShapeType ShapeType { get; } = ShapeType.NullShape; + + /// + public override DbfFieldCollection Fields => Writer.Fields; + + + /// + /// Writes geometry and feature attributes to underlying SHP and DBF files. + /// + public void Write(Geometry geometry, IAttributesTable attributes) + { + if (geometry != null && !geometry.IsEmpty) + { + GetShape(geometry, Writer.Shape); + } + else + { + Writer.Shape.Clear(); + } + + foreach (var field in Writer.Fields) + { + field.Value = attributes[field.Name]; + } + Writer.Write(); + } + + + /// + /// Writes geometry and feature attributes to underlying SHP and DBF files. + /// + public void Write(IFeature feature) + { + Write(feature.Geometry, feature.Attributes); + } + + + /// + /// Writes geometry and feature attributes to underlying SHP and DBF files. + /// + public void Write(IEnumerable features) + { + foreach (var feature in features) + { + Write(feature); + } + } + + + internal Exception GetUnsupportedGeometryTypeException(Geometry geometry) + { + return new ArgumentException(GetType().Name + " does not support " + geometry.GeometryType + " geometry."); + } + + + /// + protected override void DisposeManagedResources() + { + Writer?.Dispose(); + base.DisposeManagedResources(); // This will dispose streams used by ShpWriter and DbfWriter. Do it at the end. + } + + + /// + /// Opens shapefile writer. + /// + /// Path to shapefile. + /// Shape type. + /// Shapefile fields definitions. + /// DBF file encoding. If null encoding will be guess from related .CPG file or from reserved DBF bytes. + /// Projection metadata for the shapefile (.prj file). + /// Shapefile writer. + public static ShapefileWriter Open(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) + { + if (type.IsPoint()) + { + return new ShapefilePointWriter(shpPath, type, fields, encoding, projection); + } + else if (type.IsMultiPoint()) + { + return new ShapefileMultiPointWriter(shpPath, type, fields, encoding, projection); + } + else if (type.IsPolyLine()) + { + return new ShapefilePolyLineWriter(shpPath, type, fields, encoding, projection); + } + else if (type.IsPolygon()) + { + return new ShapefilePolygonWriter(shpPath, type, fields, encoding, projection); + } + else + { + throw new FileLoadException("Unsupported shapefile type: " + type, shpPath); + } + } + + /// + /// Opens shapefile writer. + /// + /// Path to shapefile. + /// Shape type. + /// Shapefile fields definitions. + /// Shapefile writer. + public static ShapefileWriter Open(string shpPath, ShapeType type, params DbfField[] fields) + { + return Open(shpPath, type, fields, null, null); + } + } +} diff --git a/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs index 54967e6..e544311 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/Internal/ShapefileFormatForwardOnlyReader.cs @@ -21,7 +21,11 @@ public ShapefileHeaderNG ReadHeader() GeneralIOHelpers.FillBufferOrThrow(_forwardOnlyReadableStream, scratchBuffer, 0, 100); ReadOnlySpan headerBytes = scratchBuffer; - int bigEndianFileLengthInWords = MemoryMarshal.Read(headerBytes.Slice(24, 4)); + + // TODO: This will lead to having different values on different machines. + // On mashines with BitConverter.IsLittleEndian == true this will give LittleEndian decoded values (int, ShapeTypeNG and double). + // On mashines with BitConverter.IsLittleEndian == false those values will be BigEndian decoded. + int bigEndianFileLengthInWords = MemoryMarshal.Read(headerBytes.Slice(24, 4)); // The value name is misleading. It should be littleEndianFileLengthInWords. It is converted to bigEndian in ShapefileHeaderNG() constructor. var shapeType = MemoryMarshal.Read(headerBytes.Slice(32, 4)); var boundingBox = MemoryMarshal.Cast(headerBytes.Slice(36)); return new ShapefileHeaderNG(bigEndianFileLengthInWords, shapeType, boundingBox[0], boundingBox[1], boundingBox[2], boundingBox[3], boundingBox[4], boundingBox[5], boundingBox[6], boundingBox[7]); diff --git a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs index 77d72d2..41613a4 100644 --- a/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs +++ b/src/NetTopologySuite.IO.ShapefileNG/ShapeRecords/MultiPointXYRecordNG.cs @@ -20,7 +20,11 @@ public MultiPointXYRecordNG(double minX, double minY, double maxX, double maxY, MinY = minY; MaxX = maxX; MaxY = maxY; - Points = points; + + // https://docs.microsoft.com/en-us/dotnet/api/system.readonlyspan-1?view=net-5.0 + // ReadOnlySpan is a ref struct that is allocated on the stack and can never escape to the managed heap. + // + Points = points; } } } diff --git a/test/NetTopologySuite.IO.Esri.Test/Attributes/AttributesTest.cs b/test/NetTopologySuite.IO.Esri.Test/Attributes/AttributesTest.cs new file mode 100644 index 0000000..4e25651 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Attributes/AttributesTest.cs @@ -0,0 +1,155 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Features; +using NUnit.Framework; +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.IO.Dbf; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test.Attributes +{ + public class AttributesTest + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + /// + /// + /// + public void Start() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + + // ReadFromShapeFile(); + // TestSharcDbf(); + TestShapeCreation(); + } + + private void TestShapeCreation() + { + var points = new Coordinate[3]; + points[0] = new Coordinate(0, 0); + points[1] = new Coordinate(1, 0); + points[2] = new Coordinate(1, 1); + + var line_string = new LineString(points); + + var attributes = new AttributesTable(); + attributes.Add("FOO", "FOO"); + + var feature = new Feature(Factory.CreateMultiLineString(new LineString[] { line_string }), attributes); + var features = new Feature[1]; + features[0] = feature; + + features.SaveToShapefile("line_string.shp"); + } + + [Test] + public void TestConstructor2() + { + IAttributesTable at = null; + /* + Assert.DoesNotThrow( + () => at = new AttributesTable(new[] {new[] {"key1", new object()}, new[] {"key2", new object()}})); + Assert.That(at, Is.Not.Null); + Assert.That(at.Count, Is.EqualTo(2)); + Assert.That(at.Exists("key1"), Is.True); + Assert.That(at.Exists("key2"), Is.True); + Assert.Throws( + () => at = new AttributesTable(new[] {new[] {"key1", new object()}, new[] {(object) "key2",}})); + Assert.Throws( + () => at = new AttributesTable(new[] {new[] {"key1", new object()}, new[] {new object(), "item2",}})); + */ + Assert.DoesNotThrow(() => at = new AttributesTable { { "key1", new object() }, { "key2", new object() } }); + Assert.That(at, Is.Not.Null); + Assert.That(at.Count, Is.EqualTo(2)); + Assert.That(at.Exists("key1"), Is.True); + Assert.That(at.Exists("key2"), Is.True); + } + + private void TestSharcDbf() + { + const string filename = @"Strade.dbf"; + if (!File.Exists(filename)) + throw new FileNotFoundException(filename + " not found at " + Environment.CurrentDirectory); + + using (var reader = new DbfReader(filename)) + { + Console.WriteLine("RecordSize: " + reader.RecordSize); + Console.WriteLine("Fields.Count: " + reader.Fields.Count); + Console.WriteLine("RecordCount: " + reader.RecordCount); + Console.WriteLine("LastUpdateDate: " + reader.LastUpdateDate); + + foreach (var field in reader.Fields) + { + Console.WriteLine("FieldName: " + field.Name); + Console.WriteLine("DBF Type: " + field.FieldType); + //Console.WriteLine("CLR Type: " + field.Type); + Console.WriteLine("Length: " + field.Length); + Console.WriteLine("Length: " + field.Length); + Console.WriteLine("Precision: " + field.Precision); + //Console.WriteLine("DataAddress: " + field.DataAddress); + } + + foreach (var record in reader) + { + foreach (var attr in record) + { + Console.WriteLine(" " + attr.Key + ": " + attr.Value); + } + } + } + Console.WriteLine(); + } + + private void ReadFromShapeFile() + { + const string filename = @"country"; + if (!File.Exists(filename + ".dbf")) + throw new FileNotFoundException(filename + " not found at " + Environment.CurrentDirectory); + + List featureCollection; + ShapeType shapeType; + DbfFieldCollection fields; + + using (var shpReader = ShapefileReader.Open(filename)) + { + shapeType = shpReader.ShapeType; + fields = shpReader.Fields; + featureCollection = shpReader.ToList(); + } + + int index = 0; + Console.WriteLine("Elements = " + featureCollection.Count); + foreach (var feature in featureCollection) + { + Console.WriteLine("Feature " + index++); + foreach (string name in feature.Attributes.GetNames()) + Console.WriteLine(name + ": " + feature.Attributes[name]); + } + + //Directory + string dir = CommonHelpers.TestShapefilesDirectory + Path.DirectorySeparatorChar; + + // Test write with stub header + string file = dir + "testWriteStubHeader"; + featureCollection.SaveToShapefile(file); + + + // Test write with header from a existing shapefile + file = dir + "testWriteShapefileHeader"; + using (var shpWriter = ShapefileWriter.Open(file, shapeType, fields)) + { + shpWriter.Write(featureCollection); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/CommonHelpers.cs b/test/NetTopologySuite.IO.Esri.Test/CommonHelpers.cs new file mode 100644 index 0000000..acbe7cd --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/CommonHelpers.cs @@ -0,0 +1,7 @@ +using System; +using System.IO; + +internal sealed class CommonHelpers +{ + public static readonly string TestShapefilesDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestShapefiles"); +} diff --git a/test/NetTopologySuite.IO.Esri.Test/DbfDateTest.cs b/test/NetTopologySuite.IO.Esri.Test/DbfDateTest.cs new file mode 100644 index 0000000..0ce2440 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/DbfDateTest.cs @@ -0,0 +1,57 @@ +using NetTopologySuite.IO.Dbf; +using NUnit.Framework; +using System; +using System.Collections; +using System.IO; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// + /// + [TestFixture] + public class DbfDateTest + { + /// + /// Initializes a new instance of the class. + /// + public DbfDateTest() + { + + } + + /// + /// + /// + [Test] + public void ReadDbfDate() + { + string file = Path.Combine(CommonHelpers.TestShapefilesDirectory, "date.dbf"); + + if (!File.Exists(file)) + throw new FileNotFoundException("file not found at " + Path.GetDirectoryName(file)); + + using (var reader = new DbfReader(file)) + { + var dateField = reader.Fields.FirstOrDefault(f => f is DbfDateField) as DbfDateField; + Assert.IsNotNull(dateField); + + var firstRecord = reader.FirstOrDefault(); + + Assert.IsNotNull(firstRecord); + Assert.AreEqual(2, firstRecord.Count); + + foreach (object item in firstRecord.Values) + Assert.IsNotNull(item); + + var date = dateField.DateValue.Value; + + Assert.AreEqual(10, date.Day); + Assert.AreEqual(3, date.Month); + Assert.AreEqual(2006, date.Year); + } + + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Features/UseOfIndexAndPreparedGeometry.cs b/test/NetTopologySuite.IO.Esri.Test/Features/UseOfIndexAndPreparedGeometry.cs new file mode 100644 index 0000000..1efe488 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Features/UseOfIndexAndPreparedGeometry.cs @@ -0,0 +1,240 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.Geometries.Utilities; +using NetTopologySuite.Index.Quadtree; +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics.Contracts; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test.Features +{ + + public class UseOfIndexAndPreparedGeometry + { + [TestCase(@"D:\Daten\Geofabrik\roads.shp")] + public void TestShapefile(string shapefile) + { + if (!System.IO.File.Exists(shapefile)) + throw new IgnoreException("file not present"); + + List featureCollection; + Envelope bbox; + + //var shp = new Extended.ShapeDataReader(shapefile); + using (var shp = ShapefileReader.Open(shapefile)) + { + bbox = shp.BoundingBox; + featureCollection = shp.Cast().ToList(); + } + + const double min1 = 0.4; + const double min2 = 0.5 - min1; + + var rnd = new System.Random(8888); + var queryBox = new Envelope( + bbox.MinX + (min1 + rnd.NextDouble() * min2) * bbox.Width, + bbox.MaxX - (min1 + rnd.NextDouble() * min2) * bbox.Width, + bbox.MinY + (min1 + rnd.NextDouble() * min2) * bbox.Height, + bbox.MaxY - (min1 + rnd.NextDouble() * min2) * bbox.Height); + + var shape = new SineStarFactory(GeometryFactory.Default) { Envelope = queryBox }.CreateSineStar(); + TestShapefilePlain(featureCollection, shape, "intersects"); + TestShapefilePlain(featureCollection, shape, "intersects"); + TestShapefilePrepared(featureCollection, shape, "intersects"); + TestShapefileIndexed(featureCollection, shape, "intersects"); + + } + + private void TestShapefilePrepared(ICollection features, Geometry queryGeom, string spatialPredicate) + { + System.Diagnostics.Debug.WriteLine("\nPrepared"); + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + System.Diagnostics.Debug.WriteLine("Setup collection: {0}ms", sw.ElapsedMilliseconds); + sw.Restart(); + var prep = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(queryGeom); + var lst = new List(2048); + foreach (var feature in features) + { + if (prep.Intersects(feature.Geometry)) + lst.Add(feature); + } + System.Diagnostics.Debug.WriteLine("Query collection: {0}ms", sw.ElapsedMilliseconds); + System.Diagnostics.Debug.WriteLine("Queried {0} features of a set of {1}", lst.Count, features.Count); + } + + private void TestShapefilePlain(ICollection features, Geometry queryGeom, string spatialPredicate) + { + System.Diagnostics.Debug.WriteLine("\nPlain"); + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + System.Diagnostics.Debug.WriteLine("Setup collection: {0}ms", sw.ElapsedMilliseconds); + sw.Restart(); + var lst = new List(2048); + foreach (var feature in features) + { + if (queryGeom.Intersects(feature.Geometry)) + lst.Add(feature); + } + System.Diagnostics.Debug.WriteLine("Query collection: {0}ms", sw.ElapsedMilliseconds); + System.Diagnostics.Debug.WriteLine("Queried {0} features of a set of {1}", lst.Count, features.Count); + } + + private void TestShapefileIndexed(ICollection features, Geometry queryGeom, string spatialPredicate) + { + System.Diagnostics.Debug.WriteLine("\nIndexed"); + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + var idxFeatureCollection = new IndexedFeatureColection(); + foreach (var feature in features) + idxFeatureCollection.Add(feature); + System.Diagnostics.Debug.WriteLine("Setup collection: {0}ms", sw.ElapsedMilliseconds); + sw.Restart(); + var lst = new List(idxFeatureCollection.Query(queryGeom, spatialPredicate)); + System.Diagnostics.Debug.WriteLine("Query collection: {0}ms", sw.ElapsedMilliseconds); + System.Diagnostics.Debug.WriteLine("Queried {0} features of a set of {1}", lst.Count, features.Count); + } + + } + + public class IndexedFeatureColection : Collection, ICollection + { + private Quadtree _featuresIndex; + + private class FeatureComparer : EqualityComparer + { + public override bool Equals(IFeature x, IFeature y) + { + if (x == null || y == null) throw new ArgumentNullException(); + + if (x.Attributes == null && y.Attributes != null) + return false; + + if (x.Attributes != null && y.Attributes == null) + return false; + + if (x.Attributes.Count != y.Attributes.Count) + return false; + + string[] names = x.Attributes.GetNames(); + foreach (string name in names) + { + object v1 = x.Attributes[name]; + object v2 = y.Attributes[name]; + if (!v1.Equals(v2)) return false; + } + + if (!x.Geometry.EqualsTopologically(y.Geometry)) + return false; + + return true; + } + + public override int GetHashCode(IFeature obj) + { + int res = obj.Geometry.GetHashCode(); + if (obj.Attributes != null) + { + foreach (object value in obj.Attributes.GetValues()) + res ^= value.GetHashCode(); + } + return res; + } + } + + private readonly FeatureComparer _featureComparer = new FeatureComparer(); + + public IndexedFeatureColection() + { + _featuresIndex = new Quadtree(); + } + + protected override void ClearItems() + { + base.ClearItems(); + _featuresIndex = new Quadtree(); + } + + protected override void InsertItem(int index, IFeature item) + { + base.InsertItem(index, item); + _featuresIndex.Insert(item.BoundingBox, index); + } + + protected override void RemoveItem(int index) + { + _featuresIndex.Remove(this[index].BoundingBox, index); + base.RemoveItem(index); + } + + protected override void SetItem(int index, IFeature item) + { + var oldItem = this[index]; + _featuresIndex.Remove(oldItem.Geometry.EnvelopeInternal, index); + base.SetItem(index, item); + _featuresIndex.Insert(item.Geometry.EnvelopeInternal, index); + } + + public new bool Contains(IFeature item) + { + var indices = _featuresIndex.Query(item.BoundingBox); + foreach (int tmpItem in indices) + { + var feature = this[tmpItem]; + if (_featureComparer.Equals(item, feature)) + return true; + } + return false; + } + + public IEnumerable Query(Geometry geom, string spatialPredicate) + { + if (geom == null) + throw new ArgumentNullException("geom"); + + var prepgeom = NetTopologySuite.Geometries.Prepared.PreparedGeometryFactory.Prepare(geom); + switch (spatialPredicate.Trim().ToLowerInvariant()) + { + case "intersects": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Intersects); + case "contains": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Contains); + case "containsproperly": + return QueryInternal(geom.EnvelopeInternal, prepgeom.ContainsProperly); + case "coveredby": + return QueryInternal(geom.EnvelopeInternal, prepgeom.CoveredBy); + case "covers": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Covers); + case "crosses": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Crosses); + case "disjoint": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Disjoint); + case "overlaps": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Overlaps); + case "within": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Within); + case "touches": + return QueryInternal(geom.EnvelopeInternal, prepgeom.Touches); + + } + return null; + } + + private IEnumerable QueryInternal(Envelope bbox, Func spatialPredicate) + { + Contract.Assert(bbox != null); + Contract.Assert(spatialPredicate != null); + + foreach (int index in _featuresIndex.Query(bbox)) + { + var feature = this[index]; + if (spatialPredicate(feature.Geometry)) + yield return feature; + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Geometries/LineStringSamples.cs b/test/NetTopologySuite.IO.Esri.Test/Geometries/LineStringSamples.cs new file mode 100644 index 0000000..36a79ca --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Geometries/LineStringSamples.cs @@ -0,0 +1,156 @@ +using NetTopologySuite.Geometries; +using System; +using NetTopologySuite.Operation.Buffer; + +namespace NetTopologySuite.IO.ShapeFile.Test.Geometries +{ + /// + /// + /// + public class LineStringSamples + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + private LineString line = null; + + /// + /// + /// + public LineStringSamples() : base() + { + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + + var coordinates = new Coordinate[] + { + new Coordinate(10, 10), + new Coordinate(20, 20), + new Coordinate(20, 10), + }; + line = Factory.CreateLineString(coordinates); + } + + /// + /// + /// + public void Start() + { + var pointInLine = Factory.CreatePoint(new Coordinate(20, 10)); + var pointOutLine = Factory.CreatePoint(new Coordinate(20, 31)); + var aLine = Factory.CreateLineString(new Coordinate[] { new Coordinate(23, 32.2), new Coordinate(922, 11) }); + var anotherLine = Factory.CreateLineString(new Coordinate[] { new Coordinate(0, 1), new Coordinate(30, 30) }); + + try + { + Write(line.Area); + Write(line.Boundary); + Write(line.BoundaryDimension); + Write(line.Centroid); + Write(line.Coordinate); + Write(line.Coordinates); + Write(line.CoordinateSequence); + Write(line.Dimension); + Write(line.EndPoint); + Write(line.Envelope); + Write(line.EnvelopeInternal); + Write(line.InteriorPoint); + Write(line.IsClosed); + Write(line.IsEmpty); + Write(line.IsRing); + Write(line.IsSimple); + Write(line.IsValid); + Write(line.Length); + Write(line.NumPoints); + Write(line.StartPoint); + if (line.UserData != null) + Write(line.UserData); + else Write("UserData null"); + + Write(line.Buffer(10)); + Write(line.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Flat })); + Write(line.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Square })); + Write(line.Buffer(10, 20)); + Write(line.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Flat })); + Write(line.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Square })); + Write(line.Contains(pointInLine)); + Write(line.Contains(pointOutLine)); + Write(line.Crosses(pointInLine)); + Write(line.Crosses(pointOutLine)); + Write(line.Difference(pointInLine)); + Write(line.Difference(pointOutLine)); + Write(line.Disjoint(pointInLine)); + Write(line.Disjoint(pointOutLine)); + Write(line.Distance(pointInLine)); + Write(line.Distance(pointOutLine)); + Write(line.EqualsTopologically(line.Copy() as LineString)); + Write(line.EqualsExact(line.Copy() as LineString)); + Write(line.ConvexHull()); + Write(line.Intersection(pointInLine)); + Write(line.Intersection(pointOutLine)); + Write(line.Intersection(aLine)); + Write(line.Intersects(pointInLine)); + Write(line.Intersects(pointOutLine)); + Write(line.Intersects(aLine)); + Write(line.IsWithinDistance(pointOutLine, 2)); + Write(line.IsWithinDistance(pointOutLine, 222)); + Write(line.Overlaps(pointInLine)); + Write(line.Overlaps(pointOutLine)); + Write(line.Overlaps(aLine)); + Write(line.Overlaps(anotherLine)); + Write(line.Relate(pointInLine)); + Write(line.Relate(pointOutLine)); + Write(line.Relate(aLine)); + Write(line.Relate(anotherLine)); + Write(line.SymmetricDifference(pointInLine)); + Write(line.SymmetricDifference(pointOutLine)); + Write(line.SymmetricDifference(aLine)); + Write(line.SymmetricDifference(anotherLine)); + Write(line.ToString()); + Write(line.AsText()); + Write(line.Touches(pointInLine)); + Write(line.Touches(pointOutLine)); + Write(line.Touches(aLine)); + Write(line.Touches(anotherLine)); + Write(line.Union(pointInLine)); + Write(line.Union(pointOutLine)); + Write(line.Union(aLine)); + Write(line.Union(anotherLine)); + Write(line.Within(pointInLine)); + Write(line.Within(pointOutLine)); + Write(line.Within(aLine)); + Write(line.Within(anotherLine)); + + string linestring = "LINESTRING (1.2 3.4, 5.6 7.8, 9.1 10.12)"; + string anotherlinestringg = "LINESTRING (12345 3654321, 685 7777.945677, 782 111.1)"; + var geom1 = Reader.Read(linestring); + Write(geom1.AsText()); + var geom2 = Reader.Read(anotherlinestringg); + Write(geom2.AsText()); + + byte[] bytes = line.AsBinary(); + var test1 = new WKBReader().Read(bytes); + Write(test1.ToString()); + + //bytes = new GDBWriter().Write(line); + //test1 = new GDBReader().Read(bytes); + //Write(test1.ToString()); + } + catch (Exception ex) + { + throw ex; + } + } + + protected void Write(object o) + { + Console.WriteLine(o.ToString()); + } + + protected void Write(string s) + { + Console.WriteLine(s); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Geometries/MultiPointSamples.cs b/test/NetTopologySuite.IO.Esri.Test/Geometries/MultiPointSamples.cs new file mode 100644 index 0000000..2a090d9 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Geometries/MultiPointSamples.cs @@ -0,0 +1,94 @@ +using NetTopologySuite.Geometries; +using System; +using NetTopologySuite.Operation.Buffer; + +namespace NetTopologySuite.IO.ShapeFile.Test.Geometries +{ + /// + /// + /// + public class MultiPointSamples + { + private MultiPoint multiPoint = null; + + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + /// + /// + /// + public MultiPointSamples() : base() + { + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + + var coordinates = new Coordinate[] + { + new Coordinate(100,100), + new Coordinate(200,200), + new Coordinate(300,300), + new Coordinate(400,400), + new Coordinate(500,500), + }; + multiPoint = Factory.CreateMultiPointFromCoords(coordinates); + } + + /// + /// + /// + public void Start() + { + try + { + Write(multiPoint.Area); + Write(multiPoint.Boundary); + Write(multiPoint.BoundaryDimension); + Write(multiPoint.Centroid); + Write(multiPoint.Coordinate); + Write(multiPoint.Coordinates); + Write(multiPoint.Dimension); + Write(multiPoint.Envelope); + Write(multiPoint.EnvelopeInternal); + Write(multiPoint.Geometries.Length); + Write(multiPoint.InteriorPoint); + Write(multiPoint.IsEmpty); + Write(multiPoint.IsSimple); + Write(multiPoint.IsValid); + Write(multiPoint.Length); + Write(multiPoint.NumGeometries); + Write(multiPoint.NumPoints); + + Write(multiPoint.Buffer(10)); + Write(multiPoint.Buffer(10, new BufferParameters {EndCapStyle = EndCapStyle.Flat })); + Write(multiPoint.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Square })); + Write(multiPoint.Buffer(10, 20)); + Write(multiPoint.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Flat })); + Write(multiPoint.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Square })); + Write(multiPoint.ConvexHull()); + + byte[] bytes = multiPoint.AsBinary(); + var test1 = new WKBReader().Read(bytes); + Write(test1.ToString()); + + //bytes = new GDBWriter().Write(multiPoint); + //test1 = new GDBReader().Read(bytes); + //Write(test1.ToString()); + } + catch (Exception ex) + { + throw ex; + } + } + + protected void Write(object o) + { + Console.WriteLine(o.ToString()); + } + + protected void Write(string s) + { + Console.WriteLine(s); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Geometries/PointSamples.cs b/test/NetTopologySuite.IO.Esri.Test/Geometries/PointSamples.cs new file mode 100644 index 0000000..2518248 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Geometries/PointSamples.cs @@ -0,0 +1,143 @@ +using NetTopologySuite.Geometries; +using System; +using NetTopologySuite.Operation.Buffer; + +namespace NetTopologySuite.IO.ShapeFile.Test.Geometries +{ + /// + /// + /// + public class PointSamples + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + private Point point = null; + + /// + /// + /// + public PointSamples() + { + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + + point = Factory.CreatePoint(new Coordinate(100, 100)); + } + + /// + /// + /// + public void Start() + { + var pInterior = Factory.CreatePoint(new Coordinate(100, 100)); + var pExterior = Factory.CreatePoint(new Coordinate(100, 101)); + + try + { + Write(point.Area); + Write(point.Boundary); + Write(point.BoundaryDimension); + Write(point.Centroid); + Write(point.Coordinate); + Write(point.Coordinates); + Write(point.CoordinateSequence); + Write(point.Dimension); + Write(point.Envelope); + Write(point.EnvelopeInternal); + Write(point.Factory); + Write(point.InteriorPoint); + Write(point.IsEmpty); + Write(point.IsSimple); + Write(point.IsValid); + Write(point.Length); + Write(point.NumPoints); + Write(point.PrecisionModel); + Write(point.X); + Write(point.Y); + + Write(point.Contains(pInterior)); + Write(point.Contains(pExterior)); + + Write(point.Buffer(10)); + Write(point.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Square })); + Write(point.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Flat })); + Write(point.Buffer(10, 20)); + Write(point.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Square })); + Write(point.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Flat })); + + Write(point.Crosses(pInterior)); + Write(point.Crosses(pExterior)); + Write(point.Difference(pInterior)); + Write(point.Difference(pExterior)); + Write(point.Disjoint(pInterior)); + Write(point.Disjoint(pExterior)); + Write(point.EqualsTopologically(pInterior)); + Write(point.EqualsTopologically(pExterior)); + Write(point.EqualsExact(pInterior)); + Write(point.EqualsExact(pExterior)); + Write(point.ConvexHull()); + Write(point.Intersection(pInterior)); + Write(point.Intersection(pExterior)); + Write(point.Intersects(pInterior)); + Write(point.Intersects(pExterior)); + Write(point.IsWithinDistance(pInterior, 0.001)); + Write(point.IsWithinDistance(pExterior, 0.001)); + Write(point.Overlaps(pInterior)); + Write(point.Overlaps(pExterior)); + Write(point.SymmetricDifference(pInterior)); + Write(point.SymmetricDifference(pExterior)); + Write(point.ToString()); + Write(point.AsText()); + Write(point.Touches(pInterior)); + Write(point.Touches(pExterior)); + Write(point.Union(pInterior)); + Write(point.Union(pExterior)); + Write(point.Within(pInterior)); + Write(point.Within(pExterior)); + + string pointstring = "POINT (100.22 100.33)"; + string anotherpointstring = "POINT (12345 3654321)"; + var geom1 = Reader.Read(pointstring); + Write(geom1.AsText()); + var geom2 = Reader.Read(anotherpointstring); + Write(geom2.AsText()); + + byte[] bytes = point.AsBinary(); + var test1 = new WKBReader().Read(bytes); + Write(test1.ToString()); + + bytes = Factory.CreatePoint(new Coordinate(double.MinValue, double.MinValue)).AsBinary(); + var testempty = new WKBReader().Read(bytes); + Write(testempty); + + //bytes = new GDBWriter().Write(geom1); + //test1 = new GDBReader().Read(bytes); + //Write(test1.ToString()); + + // Test Empty Geometries + Write(Point.Empty); + Write(LineString.Empty); + Write(Polygon.Empty); + Write(MultiPoint.Empty); + Write(MultiLineString.Empty); + Write(MultiPolygon.Empty); + Write(GeometryCollection.Empty); + } + catch (Exception ex) + { + throw ex; + } + } + + protected void Write(object o) + { + Console.WriteLine(o.ToString()); + } + + protected void Write(string s) + { + Console.WriteLine(s); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Geometries/PolygonSamples.cs b/test/NetTopologySuite.IO.Esri.Test/Geometries/PolygonSamples.cs new file mode 100644 index 0000000..8510b1a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Geometries/PolygonSamples.cs @@ -0,0 +1,170 @@ +using NetTopologySuite.Geometries; +using System; +using NetTopologySuite.Operation.Buffer; + +namespace NetTopologySuite.IO.ShapeFile.Test.Geometries +{ + public class PolygonSamples + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + private Polygon polygon = null; + private LinearRing shell = null; + private LinearRing hole = null; + + /// + /// + /// + public PolygonSamples() + { + this.Factory = new GeometryFactory(new PrecisionModel(PrecisionModels.Fixed)); + + shell = Factory.CreateLinearRing(new Coordinate[] { new Coordinate(100,100), + new Coordinate(200,100), + new Coordinate(200,200), + new Coordinate(100,200), + new Coordinate(100,100), }); + hole = Factory.CreateLinearRing(new Coordinate[] { new Coordinate(120,120), + new Coordinate(180,120), + new Coordinate(180,180), + new Coordinate(120,180), + new Coordinate(120,120), }); + polygon = Factory.CreatePolygon(shell, new LinearRing[] { hole, }); + } + + public void Start() + { + var interiorPoint = Factory.CreatePoint(new Coordinate(130, 150)); + var exteriorPoint = Factory.CreatePoint(new Coordinate(650, 1500)); + var aLine = Factory.CreateLineString(new Coordinate[] { new Coordinate(23, 32.2), new Coordinate(10, 222) }); + var anotherLine = Factory.CreateLineString(new Coordinate[] { new Coordinate(0, 1), new Coordinate(30, 30) }); + var intersectLine = Factory.CreateLineString(new Coordinate[] { new Coordinate(0, 1), new Coordinate(300, 300) }); + + try + { + Write(polygon.Area); + Write(polygon.Boundary); + Write(polygon.BoundaryDimension); + Write(polygon.Centroid); + Write(polygon.Coordinate); + Write(polygon.Coordinates.Length); + Write(polygon.Dimension); + Write(polygon.Envelope); + Write(polygon.EnvelopeInternal); + Write(polygon.ExteriorRing); + Write(polygon.InteriorPoint); + Write(polygon.InteriorRings.Length); + Write(polygon.IsEmpty); + Write(polygon.IsSimple); + Write(polygon.IsValid); + Write(polygon.Length); + Write(polygon.NumInteriorRings); + Write(polygon.NumPoints); + if (polygon.UserData != null) + Write(polygon.UserData); + else Write("UserData null"); + + Write(polygon.Buffer(10)); + Write(polygon.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Flat})); + Write(polygon.Buffer(10, new BufferParameters { EndCapStyle = EndCapStyle.Square })); + Write(polygon.Buffer(10, 20)); + Write(polygon.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Flat })); + Write(polygon.Buffer(10, new BufferParameters(20) { EndCapStyle = EndCapStyle.Square })); + Write(polygon.Contains(interiorPoint)); + Write(polygon.Contains(exteriorPoint)); + Write(polygon.Contains(aLine)); + Write(polygon.Contains(anotherLine)); + Write(polygon.Crosses(interiorPoint)); + Write(polygon.Crosses(exteriorPoint)); + Write(polygon.Crosses(aLine)); + Write(polygon.Crosses(anotherLine)); + Write(polygon.Difference(interiorPoint)); + Write(polygon.Difference(exteriorPoint)); + Write(polygon.Difference(aLine)); + Write(polygon.Difference(anotherLine)); + Write(polygon.Disjoint(interiorPoint)); + Write(polygon.Disjoint(exteriorPoint)); + Write(polygon.Disjoint(aLine)); + Write(polygon.Disjoint(anotherLine)); + Write(polygon.Distance(interiorPoint)); + Write(polygon.Distance(exteriorPoint)); + Write(polygon.Distance(aLine)); + Write(polygon.Distance(anotherLine)); + Write(polygon.Intersection(interiorPoint)); + Write(polygon.Intersection(exteriorPoint)); + Write(polygon.Intersection(aLine)); + Write(polygon.Intersection(anotherLine)); + Write(polygon.Intersects(interiorPoint)); + Write(polygon.Intersects(exteriorPoint)); + Write(polygon.Intersects(aLine)); + Write(polygon.Intersects(anotherLine)); + Write(polygon.IsWithinDistance(interiorPoint, 300)); + Write(polygon.IsWithinDistance(exteriorPoint, 300)); + Write(polygon.IsWithinDistance(aLine, 300)); + Write(polygon.IsWithinDistance(anotherLine, 300)); + Write(polygon.Overlaps(interiorPoint)); + Write(polygon.Overlaps(exteriorPoint)); + Write(polygon.Overlaps(aLine)); + Write(polygon.Overlaps(anotherLine)); + Write(polygon.Relate(interiorPoint)); + Write(polygon.Relate(exteriorPoint)); + Write(polygon.Relate(aLine)); + Write(polygon.Relate(anotherLine)); + Write(polygon.SymmetricDifference(interiorPoint)); + Write(polygon.SymmetricDifference(exteriorPoint)); + Write(polygon.SymmetricDifference(aLine)); + Write(polygon.SymmetricDifference(anotherLine)); + Write(polygon.ToString()); + Write(polygon.AsText()); + Write(polygon.Touches(interiorPoint)); + Write(polygon.Touches(exteriorPoint)); + Write(polygon.Touches(aLine)); + Write(polygon.Touches(anotherLine)); + Write(polygon.Union(interiorPoint)); + Write(polygon.Union(exteriorPoint)); + Write(polygon.Union(aLine)); + Write(polygon.Union(anotherLine)); + + string aPoly = "POLYGON ((20 20, 100 20, 100 100, 20 100, 20 20))"; + string anotherPoly = "POLYGON ((20 20, 100 20, 100 100, 20 100, 20 20), (50 50, 60 50, 60 60, 50 60, 50 50))"; + var geom1 = Reader.Read(aPoly); + Write(geom1.AsText()); + var geom2 = Reader.Read(anotherPoly); + Write(geom2.AsText()); + + // ExpandToInclude tests + var envelope = new Envelope(0, 0, 0, 0); + envelope.ExpandToInclude(geom1.EnvelopeInternal); + envelope.ExpandToInclude(geom2.EnvelopeInternal); + Write(envelope.ToString()); + + // The polygon is not correctly ordered! Calling normalize we fix the problem... + polygon.Normalize(); + + byte[] bytes = polygon.AsBinary(); + var test1 = new WKBReader().Read(bytes); + Write(test1.ToString()); + + //bytes = new GDBWriter().Write(polygon); + //test1 = new GDBReader().Read(bytes); + //Write(test1.ToString()); + } + catch (Exception ex) + { + throw ex; + } + } + + protected void Write(object o) + { + Console.WriteLine(o.ToString()); + } + + protected void Write(string s) + { + Console.WriteLine(s); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue123Test.cs b/test/NetTopologySuite.IO.Esri.Test/Issue123Test.cs new file mode 100644 index 0000000..f292033 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue123Test.cs @@ -0,0 +1,61 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.Operation.Union; +using NetTopologySuite.Operation.Valid; +using NUnit.Framework; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + [NtsIssueNumber(123)] + public class Issue123Test + { + [Test] + public void CascadedUnionError() + { + string[] wkt = + { + //MULTIPOLYGON (((-2.775 -37.382, -2.7694818956884695 -37.302294048833446, -4.381 -37.19, -4.379 -37.16, -2.7674053419183364 -37.272299383264858, -2.766 -37.252, -2.703 -37.257, -2.712 -37.386, -2.775 -37.382)), ((-0.558 -16.355, -0.556624473051351 -16.33528411373603, -2.168 -16.223, -2.165 -16.193, -0.55452706181921063 -16.305221219408683, -0.549 -16.226, -0.485 -16.23, -0.494 -16.36, -0.558 -16.355))) + "MULTIPOLYGON (((-2.775 -37.382, -2.7694818956884695 -37.302294048833446, -4.381 -37.19, -4.379 -37.16, -2.7674053419183364 -37.272299383264858, -2.766 -37.252, -2.703 -37.257, -2.712 -37.386, -2.775 -37.382)), ((-0.558 -16.355, -0.556624473051351 -16.33528411373603, -2.168 -16.223, -2.165 -16.193, -0.55452706181921063 -16.305221219408683, -0.549 -16.226, -0.485 -16.23, -0.494 -16.36, -0.558 -16.355)))", + //MULTIPOLYGON (((-4.218 -16.08, -4.216 -16.05, -2.924 -16.14, -2.926 -16.17, -4.218 -16.08)), ((-5.291 -18.097, -5.243 -17.415, -5.239 -17.352, -5.15929328747628 -17.357518157020873, -5.071 -16.091, -5.041 -16.093, -5.1292306097055169 -17.359599419328081, -5.109 -17.361, -5.114 -17.424, -5.161 -18.106, -5.291 -18.097))) + "MULTIPOLYGON (((-4.218 -16.08, -4.216 -16.05, -2.924 -16.14, -2.926 -16.17, -4.218 -16.08)), ((-5.291 -18.097, -5.243 -17.415, -5.239 -17.352, -5.15929328747628 -17.357518157020873, -5.071 -16.091, -5.041 -16.093, -5.1292306097055169 -17.359599419328081, -5.109 -17.361, -5.114 -17.424, -5.161 -18.106, -5.291 -18.097)))" + }; + + IList items = new List(); + var factory = GeometryFactory.Default; + var reader = new WKTReader(factory); + var geoms = reader.Read(wkt[0]); + for (int i = 0; i < geoms.NumGeometries; i++) + { + var geom = geoms.GetGeometryN(i); + items.Add(geom); + } + geoms = reader.Read(wkt[1]); + for (int i = 0; i < geoms.NumGeometries; i++) + { + var geom = geoms.GetGeometryN(i); + items.Add(geom); + } + + var op = new UnaryUnionOp(items, new GeometryFactory(new PrecisionModel(100))); + var result = op.Union(); + Assert.IsNotNull(result); + } + + [Test] + public void CascadedUnionError2() + { + var file = Path.Combine(CommonHelpers.TestShapefilesDirectory, "error_union.shp"); + var geoms = ShapefileReader.ReadAllGeometries(file).ToGeometryCollection(); + + var isValidOp = new IsValidOp(geoms); + Assert.That(!isValidOp.IsValid); + Assert.That(isValidOp.ValidationError.ErrorType, Is.EqualTo(TopologyValidationErrors.RingSelfIntersection)); + + Assert.That(geoms.Union, Throws.InstanceOf()); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue161.cs b/test/NetTopologySuite.IO.Esri.Test/Issue161.cs new file mode 100644 index 0000000..7cfe33f --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue161.cs @@ -0,0 +1,29 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System.IO; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + class Issue161 + { + [Test(Description = + "ShapefileDataReader error 'The output char buffer is too small to contain the decoded characters'")] + public void TestIssue161() + { + //SETUP + string filePath = Path.Combine(CommonHelpers.TestShapefilesDirectory, "LSOA_2011_EW_BGC.shp"); + if (!File.Exists(filePath)) Assert.Ignore("File '{0}' not present", filePath); + + //ATTEMPT + using (var reader = ShapefileReader.Open(filePath)) + { + while (reader.Read(out var geometry, out var attributes, out var deleted))//&& count++ < 3) + { + object val; + Assert.DoesNotThrow(() => val = attributes["LSOA11CD"]); + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue173Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue173Fixture.cs new file mode 100644 index 0000000..4e770d1 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue173Fixture.cs @@ -0,0 +1,48 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Features; +using NetTopologySuite.Geometries.Implementation; +using NUnit.Framework; +using System.Collections.Generic; +using System.IO; +using NetTopologySuite.IO.Shapefile; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [NtsIssueNumber(173)] + public class Issue173Fixture + { + [Test, Description("The NetTopologySuite.IO.GeoTools class method ShapeFile.GetGeometryType(Geometry geom) will always returns ShapeGeometryType.PointZM making all shapefile geometry GeometryZM.")] + public void Test() + { + var seq = DotSpatialAffineCoordinateSequenceFactory.Instance.Create(1, Ordinates.XY); + seq.SetOrdinate(0, Ordinate.X, -91.0454); + seq.SetOrdinate(0, Ordinate.Y, 32.5907); + var pt = new GeometryFactory(DotSpatialAffineCoordinateSequenceFactory.Instance).CreatePoint(seq); + + var attr = new AttributesTable(); + attr.Add("FirstName", "John"); + attr.Add("LastName", "Doe"); + + var features = new List(); + features.Add(new Feature(pt, attr)); + + string fileName = Path.GetTempFileName(); + fileName = fileName.Substring(0, fileName.Length - 4); + + features.SaveToShapefile(fileName); + + bool isPoint = false; + using (var reader = ShapefileReader.Open(fileName)) + { + isPoint = reader.ShapeType.ToString() == "Point"; + } + + foreach (string file in Directory.GetFiles(Path.GetTempPath(), Path.GetFileName(fileName) + ".*")) + { + File.Delete(file); + } + + Assert.IsTrue(isPoint); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue174.cs b/test/NetTopologySuite.IO.Esri.Test/Issue174.cs new file mode 100644 index 0000000..89521eb --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue174.cs @@ -0,0 +1,35 @@ +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [NtsIssueNumber(174)] + class Issue174 + { + [Test] + public void ensure_NetTopologySuite_IO_ShapeFile_assembly_is_strongly_named() + { + AssertStronglyNamedAssembly(typeof(ShapefileReader)); + } + + [Test] + public void ensure_NetTopologySuite_IO_GDB_assembly_is_strongly_named() + { + //AssertStronglyNamedAssembly(typeof(GDBReader)); + } + + [Test] + public void ensure_NetTopologySuite_IO_GeoTools_assembly_is_strongly_named() + { + AssertStronglyNamedAssembly(typeof(ShapefileWriter)); + } + + private void AssertStronglyNamedAssembly(Type typeFromAssemblyToCheck) + { + Assert.IsNotNull(typeFromAssemblyToCheck, "Cannot determine assembly from null"); + var assembly = typeFromAssemblyToCheck.Assembly; + StringAssert.DoesNotContain("PublicKeyToken=null", assembly.FullName, "Strongly named assembly should have a PublicKeyToken in fully qualified name"); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue178Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue178Fixture.cs new file mode 100644 index 0000000..91dda8d --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue178Fixture.cs @@ -0,0 +1,47 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System; +using System.IO; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + public class Issue178Fixture + { + [SetUp] + public void SetUp() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + } + + [Test] + public void TestCorruptedShapeFile() + { + var factory = GeometryFactory.Default; + const string filename = "christchurch-canterbury-h.shp"; + Assert.Throws(() => + { + ShapefileReader.ReadAll(filename).ToList(); + Assert.Fail("Invalid file: code should be unreachable"); + }); + + // ensure file isn't locked + string path = Path.Combine(Environment.CurrentDirectory, filename); + bool ok; + using (var file = File.OpenRead(path)) + { + using (var reader = new BinaryReader(file)) + { + // read a value + int val = reader.Read(); + Console.WriteLine("read a value: " + val); + ok = true; + } + } + Assert.That(ok, Is.True); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue36Tests.cs b/test/NetTopologySuite.IO.Esri.Test/Issue36Tests.cs new file mode 100644 index 0000000..7bfd826 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue36Tests.cs @@ -0,0 +1,74 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// see: https://github.com/NetTopologySuite/NetTopologySuite/issues/36 + /// + [TestFixture] + public class Issue36Tests + { + private int _numPassed; + + [SetUp] + public void SetUp() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + _numPassed = 0; + } + + [Test] + public void ok_when_writing_shapefile_with_features() + { + var xColumn = new DbfCharacterField("X", 10); + + IAttributesTable attributesTable = new AttributesTable(); + attributesTable.Add("X", "y"); + IFeature feature = new Feature(new Point(1, 2), attributesTable); + + + using (var writer = ShapefileWriter.Open(@"issue36", ShapeType.Point, xColumn)) + { + var features = new List(); + features.Add(feature); + Assert.DoesNotThrow(() => writer.Write(features)); + } + + _numPassed++; + } + + [Test] + public void ok_when_writing_shapefile_with_no_features() + { + var xColumn = new DbfCharacterField("X", 10); + + using (var writer = ShapefileWriter.Open(@"issue36", ShapeType.Point, xColumn)) + { + var features = new List(); + Assert.DoesNotThrow(() => writer.Write(features)); + } + + _numPassed++; + } + + [TearDown] + public void TearDown() + { + if (_numPassed < 2) return; + + // Clean up! + File.Delete("issue36.dbf"); + File.Delete("issue36.shp"); + File.Delete("issue36.shx"); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs new file mode 100644 index 0000000..8447652 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs @@ -0,0 +1,36 @@ +using NUnit.Framework; +using System.IO; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// + /// + [TestFixture] + [ShapeFileIssueNumber(46)] + public class Issue46Fixture + { + [Test] + public void Invalid_data_should_be_not_read_as_default() + { + var factory = GeometryFactory.Default; + + string shp_path = Path.Combine(CommonHelpers.TestShapefilesDirectory, "Victoria North.shp"); + Assert.True(File.Exists(shp_path)); + + var data = ShapefileReader.ReadAllGeometries(shp_path).ToGeometryCollection(); + Assert.IsNotNull(data); + Assert.IsNotEmpty(data); + Assert.AreEqual(2, data.Count); + + Assert.IsTrue(data[0].IsEmpty); + Assert.IsInstanceOf(data[0]); + Assert.IsTrue(factory.CreateMultiPolygon().EqualsExact(data[0])); + + Assert.IsFalse(data[1].IsEmpty); + Assert.IsInstanceOf(data[1]); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue4Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue4Fixture.cs new file mode 100644 index 0000000..500aa77 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue4Fixture.cs @@ -0,0 +1,89 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Features; +using NetTopologySuite.Geometries.Implementation; +using NUnit.Framework; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + public class Issue4Fixture + { + private static string CreateShapefilePath() + { + string path = Path.GetTempFileName(); + path = Path.ChangeExtension(path, string.Empty).TrimEnd('.'); + return path; + } + + private static Coordinate[] CreateCoords() + { + IList coordinates = new List(); + coordinates.Add(new Coordinate(0, 0)); + coordinates.Add(new Coordinate(1, 0)); + coordinates.Add(new Coordinate(1, 1)); + coordinates.Add(new Coordinate(0, 1)); + coordinates.Add(new Coordinate(0, 0)); + return coordinates.ToArray(); + } + + private static CoordinateSequence CopyToSequence(Coordinate[] coords, CoordinateSequence sequence) + { + for (int i = 0; i < coords.Length; i++) + { + sequence.SetOrdinate(i, Ordinate.X, coords[i].X); + sequence.SetOrdinate(i, Ordinate.Y, coords[i].Y); + } + return sequence; + } + + [Test] + public void shapefile_with_empty_attributes_table_should_not_thrown_errors() + { + // They should. + // https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm + // The dBASE file must contain at least one field. When you create a new shapefile or dBASE table, an integer ID field is created as a default. + + /* + IFeature feature = new Feature(new Point(0, 0), new AttributesTable()); + IList features = new List { feature }; + + string path = CreateShapefilePath(); + var header = ShapefileDataWriter.GetHeader(feature, features.Count); + var writer = new ShapefileDataWriter(path) { Header = header }; + writer.Write(features); + Assert.That(File.Exists(Path.ChangeExtension(path, ".shp")), Is.True); + */ + } + + [Test] + public void create_xyonly_geom_using_sequence_and_dimension_two() + { + var coords = CreateCoords(); + + var factory = CoordinateArraySequenceFactory.Instance; + var sequence = CopyToSequence(coords, factory.Create(coords.Length, 2)); + + var polygon = GeometryFactory.Default.CreatePolygon(sequence); + Assert.That(polygon, Is.Not.Null); + Assert.That(polygon.Shell, Is.Not.Null); + Assert.That(polygon.Shell.CoordinateSequence.Dimension, Is.EqualTo(2)); + } + + [Test] + public void create_xyonly_geom_using_sequence_and_ordinates_xy() + { + var coords = CreateCoords(); + + var factory = CoordinateArraySequenceFactory.Instance; + var sequence = CopyToSequence(coords, factory.Create(coords.Length, Ordinates.XY)); + + var polygon = GeometryFactory.Default.CreatePolygon(sequence); + Assert.That(polygon, Is.Not.Null); + Assert.That(polygon.Shell, Is.Not.Null); + Assert.That(polygon.Shell.CoordinateSequence.Dimension, Is.EqualTo(2)); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue60Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue60Fixture.cs new file mode 100644 index 0000000..73afa2d --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Issue60Fixture.cs @@ -0,0 +1,42 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NUnit.Framework; +using System.Collections.Generic; +using System.IO; +using NetTopologySuite.IO.Shapefile; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + [ShapeFileIssueNumber(60)] + public class Issue60Fixture + { + /// + /// + /// + /// without fix results into System.OverflowException + [Test] + public void Feature_without_fields_should_be_written_correctly() + { + // They should not. + // https://desktop.arcgis.com/en/arcmap/latest/manage-data/shapefiles/geoprocessing-considerations-for-shapefile-output.htm + // The dBASE file must contain at least one field. When you create a new shapefile or dBASE table, an integer ID field is created as a default. + + /* + string test56 = Path.Combine(CommonHelpers.TestShapefilesDirectory, "test60.shp"); + var factory = new GeometryFactory(); + var attributes = new AttributesTable(); + var feature = new Feature(factory.CreatePoint(new Coordinate(1, 2)), attributes); + var features = new[] { feature }; + + features.SaveToShapefile(test56); + + foreach (var readFeature in ShapefileReader.ReadAll(test56)) + { + Assert.AreEqual(feature.Geometry.AsText(), readFeature.Geometry.AsText()); + } + */ + } + + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/NetTopologySuite.IO.Esri.Test.csproj b/test/NetTopologySuite.IO.Esri.Test/NetTopologySuite.IO.Esri.Test.csproj new file mode 100644 index 0000000..ca570f7 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/NetTopologySuite.IO.Esri.Test.csproj @@ -0,0 +1,33 @@ + + + + netcoreapp3.1 + + false + + true + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/NetTopologySuite.IO.Esri.Test/NtsIssueNumberAttribute.cs b/test/NetTopologySuite.IO.Esri.Test/NtsIssueNumberAttribute.cs new file mode 100644 index 0000000..102ed81 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/NtsIssueNumberAttribute.cs @@ -0,0 +1,19 @@ +using System; +using NUnit.Framework; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// The issue number used in this test (or fixture) actually refers to an + /// issue on https://github.com/NetTopologySuite/NetTopologySuite, back + /// before this project was split out on its own. + /// + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] + public sealed class NtsIssueNumberAttribute : PropertyAttribute + { + public NtsIssueNumberAttribute(int issueNumber) + : base("NetTopologySuite issue", issueNumber) + { + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/DbaseReaderTests.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/DbaseReaderTests.cs new file mode 100644 index 0000000..f1f941a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/DbaseReaderTests.cs @@ -0,0 +1,292 @@ +using System; +using System.IO; +using System.Linq; +using NetTopologySuite.Features; +using NetTopologySuite.IO.ShapeFile.Extended; +using NUnit.Framework; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + /// + /// Summary description for DbfFileReaderTests + /// + [TestFixture] + public class DbaseReaderTests + { + private static readonly DateTime DATE_SAVED_IN_DBF = new DateTime(1990, 1, 1); + + private DbaseReader m_Reader; + private TempFileWriter m_TmpFile; + + [Test] + public void Ctor_SendNullPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_Reader = new DbaseReader((string)null); + }); + } + + [Test] + public void Ctor_SendEmptyString_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_Reader = new DbaseReader(string.Empty); + }); + } + + [Test] + public void Ctor_SendWhitespaceString_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_Reader = new DbaseReader(" \t "); + }); + } + + [Test] + public void Ctor_SendNonExistantPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_Reader = new DbaseReader(@"C:\this\is\sheker\path\should\never\exist\on\ur\pc"); + }); + } + + [Test] + public void Ctor_SendValidParameters_ShouldReturnNotNull() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("line_ed50_geo")); + + // Act. + m_Reader = new DbaseReader(m_TmpFile.Path); + + // Assert. + Assert.IsNotNull(m_Reader); + } + + [Test] + public void ReadEntry_SendNegativeIndex_ShouldThrowException() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadEntry(-1); + }); + } + + [Test] + public void ReadEntry_SendOutOfBoundIndex_ShouldThrowException() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadEntry(3); + }); + } + + [Test] + public void ReadEntry_TryReadAfterDisposed_ShouldThrowException() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + m_Reader.Dispose(); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadEntry(1); + }); + } + + [Test] + public void ReadEntry_ReadEntryValues_ShoudReturnCorrectValues() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + var expectedTable = new + { + Ids = new double[] + { + 3, 2, 1 + }, + Strings = new string[] + { + "str3", "str2", "str1" + }, + WholeNums = new double[] + { + 3, 2, 1 + }, + DecNums = new double[] + { + 3, 2, 1 + }, + }; + + // Act. + var results = new IAttributesTable[] + { + m_Reader.ReadEntry(0), + m_Reader.ReadEntry(1), + m_Reader.ReadEntry(2) + }; + + // Assert. + int currResIndex = 0; + foreach (var res in results) + { + object id = res["id"]; + object str = res["str"]; + object wholeNum = res["wholeNum"]; + object decNum = res["decNum"]; + object date = res["dt"]; + + Assert.IsNotNull(id); + Assert.IsNotNull(str); + Assert.IsNotNull(wholeNum); + Assert.IsNotNull(decNum); + Assert.IsNotNull(date); + + Assert.IsInstanceOf(id); + Assert.IsInstanceOf(str); + Assert.IsInstanceOf(wholeNum); + Assert.IsInstanceOf(decNum); + Assert.IsInstanceOf(date); + + Assert.AreEqual(id, expectedTable.Ids[currResIndex]); + Assert.AreEqual(str, expectedTable.Strings[currResIndex]); + Assert.AreEqual(wholeNum, expectedTable.WholeNums[currResIndex]); + Assert.AreEqual(decNum, expectedTable.DecNums[currResIndex]); + Assert.AreEqual(date, DATE_SAVED_IN_DBF); + + currResIndex++; + } + } + + [Test] + public void ReadEntry_ReadNonExistantKeyFromEntry_ShoudReturnCorrectValues() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + var results = m_Reader.ReadEntry(0); + + // Act. + Assert.Catch(() => + { + object a = results["a"]; + }); + } + + [Test] + public void ForEachIteration_ReadEntryValues_ShoudReturnCorrectValues() + { + // Arrange + m_TmpFile = new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")); + m_Reader = new DbaseReader(m_TmpFile.Path); + + var expectedTable = new + { + Ids = new double[] + { + 3, 2, 1 + }, + Strings = new string[] + { + "str3", "str2", "str1" + }, + WholeNums = new double[] + { + 3, 2, 1 + }, + DecNums = new double[] + { + 3, 2, 1 + }, + }; + + // Act. + var results = m_Reader.ToArray(); + + Assert.AreEqual(results.Length, 3); + + // Assert. + int currResIndex = 0; + foreach (var res in results) + { + object id = res["id"]; + object str = res["str"]; + object wholeNum = res["wholeNum"]; + object decNum = res["decNum"]; + object date = res["dt"]; + + Assert.IsNotNull(id); + Assert.IsNotNull(str); + Assert.IsNotNull(wholeNum); + Assert.IsNotNull(decNum); + Assert.IsNotNull(date); + + Assert.IsInstanceOf(id); + Assert.IsInstanceOf(str); + Assert.IsInstanceOf(wholeNum); + Assert.IsInstanceOf(decNum); + Assert.IsInstanceOf(date); + + Assert.AreEqual(id, expectedTable.Ids[currResIndex]); + Assert.AreEqual(str, expectedTable.Strings[currResIndex]); + Assert.AreEqual(wholeNum, expectedTable.WholeNums[currResIndex]); + Assert.AreEqual(decNum, expectedTable.DecNums[currResIndex]); + Assert.AreEqual(date, DATE_SAVED_IN_DBF); + + currResIndex++; + } + } + + [TearDown] + public void TestCleanup() + { + if (m_Reader != null) + { + m_Reader.Dispose(); + m_Reader = null; + } + + if (m_TmpFile != null) + { + m_TmpFile.Dispose(); + m_TmpFile = null; + } + } + } + + static class DbfFiles + { + public static byte[] Read(string filename) + { + string file = Path.ChangeExtension(filename, ".dbf"); + string path = Path.Combine(CommonHelpers.TestShapefilesDirectory, file); + Assert.That(File.Exists(path), Is.True); + return File.ReadAllBytes(path); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/HelperMethods.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/HelperMethods.cs new file mode 100644 index 0000000..5fc2e35 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/HelperMethods.cs @@ -0,0 +1,71 @@ +using System; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Handlers; +using Assert = NUnit.Framework.Assert; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + public static class HelperMethods + { + private static readonly double REQUIRED_PRECISION = Math.Pow(10, -9); + + public static void AssertEnvelopesEqual(Envelope env1, Envelope env2) + { + AssertEnvelopesEqual(env1, env2, REQUIRED_PRECISION); + } + + public static void AssertEnvelopesEqual(Envelope env1, Envelope env2, double requiredPrecision, string errorMessage = "") + { + AssertDoubleValuesEqual(env1.MaxX, env2.MaxX, requiredPrecision, errorMessage); + AssertDoubleValuesEqual(env1.MaxY, env2.MaxY, requiredPrecision, errorMessage); + AssertDoubleValuesEqual(env1.MinX, env2.MinX, requiredPrecision, errorMessage); + AssertDoubleValuesEqual(env1.MinY, env2.MinY, requiredPrecision, errorMessage); + } + + public static void AssertPolygonsEqual(Polygon poly1, Polygon poly2) + { + Assert.IsNotNull(poly1); + Assert.IsNotNull(poly2); + + LineString line1 = poly1.Shell; + LineString line2 = poly2.Shell; + + Assert.AreEqual(line1.Coordinates.Length, line2.Coordinates.Length, "Number of coordinates between polygons doesn't match"); + + for (int i = 0; i < line2.Coordinates.Length; i++) + { + AssertCoordinatesEqual(line2.Coordinates[i], line1.Coordinates[i]); + } + } + + public static void AssertCoordinatesEqual(Coordinate coord1, Coordinate coord2) + { + AssertDoubleValuesEqual(coord1.X, coord2.X); + AssertDoubleValuesEqual(coord1.Y, coord2.Y); + } + + public static void AssertDoubleValuesEqual(double num1, double num2) + { + AssertDoubleValuesEqual(num1, num2, REQUIRED_PRECISION); + } + + public static void AssertDoubleValuesEqual(double num1, double num2, double requiredPrecision, string errorMessage = "") + { + if (string.IsNullOrWhiteSpace(errorMessage)) + { + Assert.AreEqual(num1, num2, requiredPrecision); + } + else + { + Assert.AreEqual(num1, num2, requiredPrecision, errorMessage); + } + } + + public static void AssertMBRInfoEqual(MBRInfo info1, MBRInfo info2) + { + Assert.AreEqual(info1.ShapeFileDetails.OffsetFromStartOfFile, info2.ShapeFileDetails.OffsetFromStartOfFile); + Assert.AreEqual(info1.ShapeFileDetails.ShapeIndex, info2.ShapeFileDetails.ShapeIndex); + AssertEnvelopesEqual(info1.ShapeMBR, info2.ShapeMBR); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeDataReaderTests.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeDataReaderTests.cs new file mode 100644 index 0000000..26dea7b --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeDataReaderTests.cs @@ -0,0 +1,656 @@ +using System; +using System.IO; +using System.Linq; +using NetTopologySuite.Geometries; +using NetTopologySuite.Index.Strtree; +using NetTopologySuite.IO.Handlers; +using NetTopologySuite.IO.ShapeFile.Extended; +using NetTopologySuite.IO.ShapeFile.Extended.Entities; +using NetTopologySuite.IO.ShapeFile.Test; +using NUnit.Framework; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + [TestFixture] + public class ShapeDataReaderTests + { + private TempFileWriter[] m_TempFiles; + private ShapeDataReader m_shapeDataReader; + + [Test] + public void Ctor_SendNullPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader((string)null); + }); + } + + [Test] + public void Ctor_SendEmptyPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(string.Empty); + }); + } + + [Test] + public void Ctor_SendWhitespacePath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(" \t "); + }); + } + + [Test] + public void Ctor_SendNonExistantFilePath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(@"C:\this\is\sheker\path\should\never\exist\on\ur\pc"); + }); + } + + [Test] + public void Ctor_SendShpWithNoDbf_ShouldThrowException() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + }; + + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + }); + } + + [Test] + public void Ctor_SendNullSpatialIndex_ShouldThrowException() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path, null); + }); + } + + [Test] + public void Ctor_SendNullGeometryFactory_ShouldThrowException() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + // Act. + Assert.Catch(() => + { + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path, new STRtree(), null); + }); + } + + [Test] + public void Ctor_SendShpWithNoPrj_ShouldReturnNotNull() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + // Act. + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + Assert.IsNotNull(m_shapeDataReader); + } + + [Test] + public void Ctor_SetAsyncIndexToTrue_ShouldReturnNotNull() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")) + }; + + // Act. + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path, new STRtree(), new GeometryFactory(), true); + + // Assert. + Assert.IsNotNull(m_shapeDataReader); + } + + [Test] + public void Ctor_SetAsyncIndexToFalse_ShouldReturnNotNull() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + // Act. + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path, new STRtree(), new GeometryFactory(), false); + + // Assert. + Assert.IsNotNull(m_shapeDataReader); + } + + [Test] + public void ShapeFileBounds_ReadPointED50Geo_ShouldReturnCorrectEnvelope() + { + // Arrange. + var expectedMBR = new Envelope(34.14526022208882, 34.28293070132935, 31.85116738930965, 31.92063218020455); + + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("point_ed50_geo")), + new TempFileWriter(".dbf", DbfFiles.Read("point_ed50_geo")), + }; + + // Act. + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Assert. + HelperMethods.AssertEnvelopesEqual(expectedMBR, m_shapeDataReader.ShapefileBounds); + } + + [Test] + public void ReadByGeoFilter_ReadAllInBounds_ShouldReturnAllShapesAndCorrectDbfData() + { + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + string[] expectedShapeMetadata = new string[] { "Rectangle", "Triangle" }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(m_shapeDataReader.ShapefileBounds); + + // Assert. + Assert.IsNotNull(results); + + int currIndex = 0; + foreach (var result in results) + { + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + var sf = (ShapefileFeature)result; + Assert.AreEqual(sf.FeatureId, currIndex); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedResult[currIndex]); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata[currIndex++]); + } + } + + [Test] + public void ReadByGeoFilter_ReadWithWholeTriangleInBounds_ShouldReturnTriangle() + { + var boundsWithWholeTriangle = new Envelope(-0.62331, 0.63774, -0.02304, 0.76942); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })); + + string expectedShapeMetadata = "Triangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 1); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithWholeRectangleInBounds_ShouldReturnRectangle() + { + var boundsWithWholeTriangle = new Envelope(-1.39510, -0.12716, -1.13938, -0.22977); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + string expectedShapeMetadata = "Rectangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 0); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithWholeRectangleInBoundsAndFlagSetToTrue_ShouldReturnRectangle() + { + var boundsWithWholeTriangle = new Envelope(-1.39510, -0.12716, -1.13938, -0.22977); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + string expectedShapeMetadata = "Rectangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle, true); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 0); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithRectanglePartiallyInBounds_ShouldReturnRectangle() + { + var boundsWithWholeTriangle = new Envelope(-0.93340, -0.38902, -0.73281, -0.29179); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + string expectedShapeMetadata = "Rectangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 0); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithRectanglePartiallyInBoundsAndFlagSetToTrue_ShouldReturnRectangle() + { + var boundsWithWholeTriangle = new Envelope(-0.93340, -0.38902, -0.73281, -0.29179); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + string expectedShapeMetadata = "Rectangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle, true); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 0); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithRectangleMBRPartiallyInBoundsAndFlagSetToTrue_ShouldReturnNoGeometries() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -0.80861); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle, true); + + // Assert. + Assert.IsNotNull(results); + Assert.IsFalse(results.Any()); + } + + // TODO: Don't know how bad it is that this tests passes. + // I give it as a parameter a rectangle that partially intersects only with the MBR of the + // shape, and doesn't intersect with the shape itself at all. + // It only works because the default index is RTree, use a different index? + [Test] + public void ReadByGeoFilter_ReadWithRectangleMBRPartiallyInBounds_ShouldReturnRectangle() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -0.80861); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + var expectedTriangle = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + string expectedShapeMetadata = "Rectangle"; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + + var result = results.Single(); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + Assert.AreEqual(((ShapefileFeature)result).FeatureId, 0); + Assert.IsNotNull(result.Attributes); + + HelperMethods.AssertPolygonsEqual(result.Geometry as Polygon, expectedTriangle); + + object shapeNameData = result.Attributes["ShapeName"]; + Assert.IsInstanceOf(shapeNameData); + + Assert.AreEqual((string)shapeNameData, expectedShapeMetadata); + } + + [Test] + public void ReadByGeoFilter_ReadWithNoShapeInBounds_ShouldReturnEmptyEnumerable() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -1.5); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + Assert.IsFalse(results.Any()); + } + + [Test] + public void ReadByGeoFilter_ReadWithNoShapeInBoundsAndFlagSetToTrue_ShouldReturnEmptyEnumerable() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -1.5); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle, true); + + // Assert. + Assert.IsNotNull(results); + Assert.IsFalse(results.Any()); + } + + [Test, ShapeFileIssueNumber(27)] + public void ReadByGeoFilter_ReadDbfDataAfterReaderObjectDisposed_ShouldNotThrowException() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -0.80861); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + var result = results.Single(); + + // Dispose of the reader object. + m_shapeDataReader.Dispose(); + + // Try reading data. + Assert.IsNotNull(result.Attributes); + } + + [Test, ShapeFileIssueNumber(27)] + public void ReadByGeoFilter_ReadShapeDataAfterReaderObjectDisposed_ShouldNotThrowException() + { + var boundsWithWholeTriangle = new Envelope(-1.17459, -1.00231, -1.09803, -0.80861); + + // Arrange. + m_TempFiles = new TempFileWriter[] + { + new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")), + new TempFileWriter(".dbf", DbfFiles.Read("UnifiedChecksMaterial")), + }; + + m_shapeDataReader = new ShapeDataReader(m_TempFiles[0].Path); + + // Act. + var results = m_shapeDataReader.ReadByMBRFilter(boundsWithWholeTriangle); + + // Assert. + Assert.IsNotNull(results); + var result = results.Single(); + + // Dispose of the reader object. + m_shapeDataReader.Dispose(); + + // Try reading data. + Assert.IsNotNull(result.Geometry); + } + + [TearDown] + public void TestCleanup() + { + if (m_shapeDataReader != null) + { + m_shapeDataReader.Dispose(); + m_shapeDataReader = null; + } + + if (m_TempFiles != null) + { + foreach (var tempFile in m_TempFiles) + { + tempFile.Dispose(); + } + + m_TempFiles = null; + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeReaderTests.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeReaderTests.cs new file mode 100644 index 0000000..75ca282 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapeReaderTests.cs @@ -0,0 +1,1254 @@ +using System; +using System.IO; +using System.Linq; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Handlers; +using NUnit.Framework; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + [TestFixture] + public class ShapeReaderTests + { + private IO.ShapeFile.Extended.ShapeReader m_Reader; + private TempFileWriter m_TmpFile; + + [Test] + public void Ctor_SendNullPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + new IO.ShapeFile.Extended.ShapeReader((string)null); + }); + } + + [Test] + public void Ctor_SendEmptyPath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + new IO.ShapeFile.Extended.ShapeReader(string.Empty); + }); + } + + [Test] + public void Ctor_SendWhitespacePath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + new IO.ShapeFile.Extended.ShapeReader(" \t "); + }); + } + + [Test] + public void Ctor_SendNonExistantFilePath_ShouldThrowException() + { + // Act. + Assert.Catch(() => + { + new IO.ShapeFile.Extended.ShapeReader(@"C:\this\is\sheker\path\should\never\exist\on\ur\pc"); + }); + } + + [Test] + public void Ctor_SendValidParameters_ShouldReturnNotNull() + { + // Arrange + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("line_ed50_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Assert. + Assert.IsNotNull(m_Reader); + } + + [Test] + public void FileHeader_ReadPoint_ShouldReturnCorrectValues() + { + // Arrange. + var expectedMBR = new Envelope(34.14526022208882, 34.28293070132935, 31.85116738930965, 31.92063218020455); + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("point_ed50_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Assert. + Assert.IsNotNull(m_Reader); + Assert.IsNotNull(m_Reader.ShapefileHeader); + Assert.AreEqual(m_Reader.ShapefileHeader.ShapeType, ShapeGeometryType.Point); + HelperMethods.AssertEnvelopesEqual(m_Reader.ShapefileHeader.Bounds, expectedMBR); + } + + [Test] + public void FileHeader_ReadLine_ShouldReturnCorrectValues() + { + // Arrange. + var expectedMBR = new Envelope(639384.5630270261, 662946.9241196744, 3505730.839052265, 3515879.236960234); + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("line_ed50_utm36")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Assert. + Assert.IsNotNull(m_Reader); + Assert.IsNotNull(m_Reader.ShapefileHeader); + Assert.AreEqual(m_Reader.ShapefileHeader.ShapeType, ShapeGeometryType.LineString); + HelperMethods.AssertEnvelopesEqual(m_Reader.ShapefileHeader.Bounds, expectedMBR); + } + + [Test] + public void FileHeader_ReadPolygon_ShouldReturnCorrectValues() + { + // Arrange. + var expectedMBR = new Envelope(33.47383821246188, 33.75452922072821, 32.0295864794076, 32.1886342399706); + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon_wgs84_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Assert. + Assert.IsNotNull(m_Reader); + Assert.IsNotNull(m_Reader.ShapefileHeader); + Assert.AreEqual(m_Reader.ShapefileHeader.ShapeType, ShapeGeometryType.Polygon); + HelperMethods.AssertEnvelopesEqual(m_Reader.ShapefileHeader.Bounds, expectedMBR); + } + + [Test] + public void ReadMBRs_ReadPoint_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(new Coordinate(34.282930701329349, 31.851167389309651)), + 100, + 0), + new MBRInfo(new Envelope(new Coordinate(34.145260222088822, 31.864369159253059)), + 128, + 1), + new MBRInfo(new Envelope(new Coordinate(34.181721116813314, 31.920632180204553)), + 156, + 2), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("point_ed50_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(3, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadMBRs_ReadUnifiedWithNullAtStart_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(-1.151515151515152, -0.353535353535354, -0.929292929292929, -0.419191919191919), + 112, + 1), + new MBRInfo(new Envelope(-0.457070707070707, 0.421717171717172, 0.070707070707071, 0.578282828282829), + 248, + 2), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtStart")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(expectedInfos.Length, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadMBRs_ReadUnifiedWithNullInMiddle_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(-1.151515151515152, -0.353535353535354, -0.929292929292929, -0.419191919191919), + 100, + 0), + new MBRInfo(new Envelope(-0.457070707070707, 0.421717171717172, 0.070707070707071, 0.578282828282829), + 248, + 2), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullInMiddle")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(expectedInfos.Length, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadMBRs_ReadUnifiedWithNullAtEnd_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(-1.151515151515152, -0.353535353535354, -0.929292929292929, -0.419191919191919), + 100, + 0), + new MBRInfo(new Envelope(-0.457070707070707, 0.421717171717172, 0.070707070707071, 0.578282828282829), + 236, + 1), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtEnd")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(expectedInfos.Length, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadMBRs_ReadLine_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(34.573027972716453, 34.628034609274806, 31.803273460424684, 31.895998933480186), + 100, + 0), + new MBRInfo(new Envelope(34.396692412092257, 34.518021336158107, 31.778756216701534, 31.864880893370035), + 236, + 1), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("line_wgs84_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(2, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadMBRs_ReadPolygon_ShouldReturnCorrectValues() + { + // Arrange. + MBRInfo[] infos = null; + + var expectedInfos = new[] + { + new MBRInfo(new Envelope(33.719047819505683, 33.78096814177016, 31.928805665809271, 32.025301664150398), + 100, + 0), + new MBRInfo(new Envelope(33.819000337359398, 33.929011051318348, 31.97406740944362, 32.072449163771559), + 252, + 1), + }; + + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon_ed50_geo")); + + // Act. + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + infos = m_Reader.ReadMBRs().ToArray(); + + // Assert. + Assert.IsNotNull(infos); + Assert.AreEqual(2, infos.Length); + + int currIndex = 0; + + foreach (var expectedInfo in expectedInfos) + { + HelperMethods.AssertMBRInfoEqual(expectedInfo, infos[currIndex++]); + } + } + + [Test] + public void ReadShapeAtOffset_SendNegativeOffset_shouldThrowException() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon intersecting line")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadShapeAtOffset(-1, factory); + }); + } + + [Test] + public void ReadShapeAtOffset_SendOffsetAtEndOfFile_shouldThrowException() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon intersecting line")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadShapeAtOffset(ShpFiles.Read("polygon intersecting line").Length, factory); + }); + } + + [Test] + public void ReadShapeAtOffset_ReadPolygonWithIntersectingLine_shouldReturnInvalidGeo() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon intersecting line")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + long[] shapeOffsets = { 100, 236 }; + + bool[] expectedValidityResults = new bool[] { false, true }; + + // Act. + for (int i = 0; i < shapeOffsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(shapeOffsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.AreEqual(geo.IsValid, expectedValidityResults[i]); + } + } + + [Test] + public void ReadShapeAtOffset_ReadPoint_shouldReturnCorrectValue() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("point_ed50_geo")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + long[] shapeOffsets = { 100, 128, 156 }; + + double[,] expectedCoordinates = {{ 34.282930701329349, 31.851167389309651 }, + { 34.145260222088822, 31.864369159253059 }, + { 34.181721116813314, 31.920632180204553 }}; + + // Act. + for (int i = 0; i < shapeOffsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(shapeOffsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenPoint = geo as Point; + + HelperMethods.AssertDoubleValuesEqual(givenPoint.X, expectedCoordinates[i, 0]); + HelperMethods.AssertDoubleValuesEqual(givenPoint.Y, expectedCoordinates[i, 1]); + } + } + + [Test] + public void ReadShapeAtOffset_ReadLines_shouldReturnCorrectValue() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("line_wgs84_geo")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + long[] shapeOffsets = { 100, 236 }; + + var expectedLines = new Coordinate[,] + { + { + new Coordinate(34.574599590903837, 31.884368958893564), + new Coordinate(34.57648553272869, 31.803273460424684), + new Coordinate(34.628034609274806, 31.875882220681703), + new Coordinate(34.573027972716453, 31.895998933480186), + new Coordinate(34.582143358203268, 31.886883547993374) + }, + { + new Coordinate(34.448555812275849, 31.864880893370035), + new Coordinate(34.396692412092257, 31.778756216701534), + new Coordinate(34.468672525074325, 31.794158074937872), + new Coordinate(34.484703030585621, 31.844135533296601), + new Coordinate(34.518021336158107, 31.838163384184551) + } + }; + + // Act. + for (int i = 0; i < shapeOffsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(shapeOffsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenLine = geo as LineString; + + for (int j = 0; j < givenLine.Coordinates.Length; j++) + { + var currPoint = givenLine.Coordinates[j]; + + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedLines[i, j].X); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedLines[i, j].Y); + } + } + } + + [Test] + public void ReadShapeAtOffset_ReadPolygon_shouldReturnCorrectValue() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("polygon_ed50_geo")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + long[] shapeOffsets = { 100, 252 }; + + var expectedLines = new Coordinate[,] + { + { + new Coordinate(33.719047819505683, 31.989469320254013), + new Coordinate(33.730049025918099, 32.025301664150398), + new Coordinate(33.771538712027194, 32.008956957757299), + new Coordinate(33.78096814177016, 31.993555297099103), + new Coordinate(33.744507207486457, 31.928805665809271), + new Coordinate(33.719047819505683, 31.989469320254013) + }, + { + new Coordinate(33.821829475819285, 32.051075573685317), + new Coordinate(33.860176141775888, 32.072449163771559), + new Coordinate(33.927125440097875, 32.054847113210094), + new Coordinate(33.929011051318348, 31.97878189417845), + new Coordinate(33.819000337359398, 31.97406740944362), + new Coordinate(33.821829475819285, 32.051075573685317) + } + }; + + // Act. + for (int i = 0; i < shapeOffsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(shapeOffsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenPoly = geo as Polygon; + + Assert.IsNotNull(givenPoly.ExteriorRing); + Assert.AreSame(givenPoly.ExteriorRing, givenPoly.Shell); + Assert.AreEqual(givenPoly.Shell.Coordinates.Length, expectedLines.GetLength(1)); + + LineString givenLine = givenPoly.Shell; + + for (int j = 0; j < givenLine.Coordinates.Length; j++) + { + var currPoint = givenLine.Coordinates[j]; + + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedLines[i, j].X); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedLines[i, j].Y); + } + } + } + + [Test] + public void ReadShapeAtOffset_ReadAllPolygonsFromUnifiedWithNullAtStart_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtStart")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + var expectedResult = new Coordinate[][] + { + new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + }, + new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + } + }; + long[] offsets = { 112, 248 }; + + // Act. + for (int i = 0; i < offsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(offsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenPoly = geo as Polygon; + + Assert.IsNotNull(givenPoly.ExteriorRing); + Assert.AreSame(givenPoly.ExteriorRing, givenPoly.Shell); + Assert.AreEqual(givenPoly.Shell.Coordinates.Length, expectedResult[i].Length); + + LineString givenLine = givenPoly.Shell; + + for (int j = 0; j < givenLine.Coordinates.Length; j++) + { + var currPoint = givenLine.Coordinates[j]; + + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedResult[i][j].X); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedResult[i][j].Y); + } + } + } + + [Test] + public void ReadShapeAtOffset_ReadAllPolygonsFromUnifiedWithNullInMiddle_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullInMiddle")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + var expectedResult = new Coordinate[][] + { + new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + }, + new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + } + }; + long[] offsets = { 100, 248 }; + + // Act. + for (int i = 0; i < offsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(offsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenPoly = geo as Polygon; + + Assert.IsNotNull(givenPoly.ExteriorRing); + Assert.AreSame(givenPoly.ExteriorRing, givenPoly.Shell); + Assert.AreEqual(givenPoly.Shell.Coordinates.Length, expectedResult[i].Length); + + LineString givenLine = givenPoly.Shell; + + for (int j = 0; j < givenLine.Coordinates.Length; j++) + { + var currPoint = givenLine.Coordinates[j]; + + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedResult[i][j].X); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedResult[i][j].Y); + } + } + } + + [Test] + public void ReadShapeAtOffset_ReadAllPolygonsFromUnifiedWithNullAtEnd_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtEnd")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + var expectedResult = new Coordinate[][] + { + new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + }, + new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + } + }; + long[] offsets = { 100, 236 }; + + // Act. + for (int i = 0; i < offsets.Length; i++) + { + var geo = m_Reader.ReadShapeAtOffset(offsets[i], factory); + + // Assert. + Assert.IsNotNull(geo); + Assert.IsTrue(geo.IsValid); + Assert.IsInstanceOf(geo); + var givenPoly = geo as Polygon; + + Assert.IsNotNull(givenPoly.ExteriorRing); + Assert.AreSame(givenPoly.ExteriorRing, givenPoly.Shell); + Assert.AreEqual(givenPoly.Shell.Coordinates.Length, expectedResult[i].Length); + + LineString givenLine = givenPoly.Shell; + + for (int j = 0; j < givenLine.Coordinates.Length; j++) + { + var currPoint = givenLine.Coordinates[j]; + + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedResult[i][j].X); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedResult[i][j].Y); + } + } + } + + [Test] + public void ReadShapeAtOffset_TryReadAfterDisposed_shouldThrowException() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("line_wgs84_geo")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + m_Reader.Dispose(); + Assert.Catch(() => + { + m_Reader.ReadShapeAtOffset(108, factory); + }); + } + + [Test] + public void ReadAllShapes_SendNullFactory_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadAllShapes(null); + }); + } + + [Test] + public void ReadAllShapes_ReadEmptyShapeFile_ShouldReturnEmptyEnumerable() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("EmptyShapeFile")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + // Act. + var geos = m_Reader.ReadAllShapes(factory); + + // Assert. + Assert.IsNotNull(geos); + Assert.IsFalse(geos.Any()); + } + + [Test] + public void ReadAllShapes_ReadPointZM_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("shape_PointZM")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + double errorMargin = Math.Pow(10, -6); + + double[,] expectedValues = {{-11348202.6085706, 4503476.68482375}, + {-601708.888562033, 3537065.37906758}, + {-7366588.02885523, -637831.461799072}}; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory); + + // Assert. + Assert.IsNotNull(shapes); + var shapesArr = shapes.ToArray(); + Assert.AreEqual(shapesArr.Length, 3); + + for (int i = 0; i < shapesArr.Length; i++) + { + Assert.IsInstanceOf(shapesArr[i]); + var currPoint = shapesArr[i] as Point; + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedValues[i, 0], errorMargin); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedValues[i, 1], errorMargin); + HelperMethods.AssertDoubleValuesEqual(currPoint.Z, 0); + HelperMethods.AssertDoubleValuesEqual(currPoint.M, double.NaN); + } + } + + [Test] + public void ReadAllShapes_ReadPointZMWithMissingMValues_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("shape_pointZM_MissingM values")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + double errorMargin = Math.Pow(10, -6); + + double[,] expectedValues = {{-11348202.6085706, 4503476.68482375}, + {-601708.888562033, 3537065.37906758}, + {-7366588.02885523, -637831.461799072}}; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory); + + // Assert. + Assert.IsNotNull(shapes); + var shapesArr = shapes.ToArray(); + Assert.AreEqual(shapesArr.Length, 3); + + for (int i = 0; i < shapesArr.Length; i++) + { + Assert.IsInstanceOf(shapesArr[i]); + var currPoint = shapesArr[i] as Point; + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedValues[i, 0], errorMargin); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedValues[i, 1], errorMargin); + HelperMethods.AssertDoubleValuesEqual(currPoint.Z, 0); + HelperMethods.AssertDoubleValuesEqual(currPoint.M, double.NaN); + } + } + + [Test] + public void ReadAllShapes_ReadPointM_ShouldReturnCorrectValues() + { + // Arrange. + GeometryFactory factory = new GeometryFactory(); + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("shape_pointM")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + double[,] expectedValues = {{-133.606621226874, 66.8997078870497}, + {-68.0564751703992, 56.4888023369036}, + {-143.246348588121, 40.6796494644596}, + {-82.3232716650438, -21.014605647517}}; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory); + + // Assert. + Assert.IsNotNull(shapes); + var shapesArr = shapes.ToArray(); + Assert.AreEqual(shapesArr.Length, 4); + + for (int i = 0; i < shapesArr.Length; i++) + { + Assert.IsInstanceOf(shapesArr[i]); + var currPoint = shapesArr[i] as Point; + HelperMethods.AssertDoubleValuesEqual(currPoint.X, expectedValues[i, 0]); + HelperMethods.AssertDoubleValuesEqual(currPoint.Y, expectedValues[i, 1]); + HelperMethods.AssertDoubleValuesEqual(currPoint.Z, double.NaN); + HelperMethods.AssertDoubleValuesEqual(currPoint.M, double.NaN); + } + } + + [Test] + public void ReadAllShapes_ReadUnifiedChecksMaterial_ShouldRead2ShapesAndCorrectValues() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory).ToArray(); + + Assert.IsNotNull(shapes); + Assert.AreEqual(shapes.Length, 2); + + for (int i = 0; i < shapes.Length; i++) + { + Assert.IsInstanceOf(shapes[i]); + HelperMethods.AssertPolygonsEqual(shapes[i] as Polygon, expectedResult[i]); + } + } + + [Test] + public void ReadAllShapes_ReadAllPolygonsFromUnifiedWithNullAtStart_ShouldReturnCorrectValues() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtStart")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory).ToArray(); + + Assert.IsNotNull(shapes); + Assert.AreEqual(shapes.Length, 2); + + for (int i = 0; i < shapes.Length; i++) + { + Assert.IsInstanceOf(shapes[i]); + HelperMethods.AssertPolygonsEqual(shapes[i] as Polygon, expectedResult[i]); + } + } + + [Test] + public void ReadAllShapes_ReadAllPolygonsFromUnifiedWithNullInMiddle_ShouldReturnCorrectValues() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullInMiddle")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory).ToArray(); + + Assert.IsNotNull(shapes); + Assert.AreEqual(shapes.Length, 2); + + for (int i = 0; i < shapes.Length; i++) + { + Assert.IsInstanceOf(shapes[i]); + HelperMethods.AssertPolygonsEqual(shapes[i] as Polygon, expectedResult[i]); + } + } + + [Test] + public void ReadAllShapes_ReadAllPolygonsFromUnifiedWithNullAtEnd_ShouldReturnCorrectValues() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtEnd")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + var shapes = m_Reader.ReadAllShapes(factory).ToArray(); + + Assert.IsNotNull(shapes); + Assert.AreEqual(shapes.Length, 2); + + for (int i = 0; i < shapes.Length; i++) + { + Assert.IsInstanceOf(shapes[i]); + HelperMethods.AssertPolygonsEqual(shapes[i] as Polygon, expectedResult[i]); + } + } + + [Test] + public void ReadAllShapes_TryReadAfterDisposed_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + // Act. + m_Reader.Dispose(); + Assert.Catch(() => + { + m_Reader.ReadAllShapes(factory); + }); + } + + [Test] + public void ReadShapeAtIndex_SendNullFactory_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadShapeAtIndex(0, null); + }); + } + + [Test] + public void ReadShapeAtIndex_SendNegativeIndex_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadShapeAtIndex(-1, factory); + }); + } + + [Test] + public void ReadShapeAtIndex_SendOutOfBoundIndex_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + // Act. + Assert.Catch(() => + { + m_Reader.ReadShapeAtIndex(2, factory); + }); + } + + [Test] + public void ReadShapeAtIndex_ReadFirstUnifiedCheckMaterialShape_ShouldReturnRectangle() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + var expectedPolygon = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })); + + // Act. + var polygon = m_Reader.ReadShapeAtIndex(0, factory); + + Assert.IsNotNull(polygon); + Assert.IsInstanceOf(polygon); + HelperMethods.AssertPolygonsEqual(polygon as Polygon, expectedPolygon); + } + + [Test] + public void ReadShapeAtIndex_ReadSecondUnifiedCheckMaterialShape_ShouldReturnTriangle() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + var expectedPolygon = new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })); + + // Act. + var polygon = m_Reader.ReadShapeAtIndex(1, factory); + + Assert.IsNotNull(polygon); + Assert.IsInstanceOf(polygon); + HelperMethods.AssertPolygonsEqual(polygon as Polygon, expectedPolygon); + } + + [Test] + public void ReadShapeAtIndex_ReadUnifiedCheckMaterialWithNullAtStart_ShouldReturnBothShapesCorrectly() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtStart")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + for (int i = 0; i < expectedResult.Length; i++) + { + var result = m_Reader.ReadShapeAtIndex(i, factory); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + + HelperMethods.AssertPolygonsEqual(expectedResult[i], result as Polygon); + } + } + + [Test] + public void ReadShapeAtIndex_ReadUnifiedCheckMaterialWithNullAtEnd_ShouldReturnBothShapesCorrectly() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullAtEnd")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + for (int i = 0; i < expectedResult.Length; i++) + { + var result = m_Reader.ReadShapeAtIndex(i, factory); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + + HelperMethods.AssertPolygonsEqual(expectedResult[i], result as Polygon); + } + } + + [Test] + public void ReadShapeAtIndex_ReadUnifiedCheckMaterialWithNulLInMiddle_ShouldReturnBothShapesCorrectly() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterialNullInMiddle")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + Polygon[] expectedResult = new Polygon[] + { + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(-0.815656565656566, -0.439393939393939), + new Coordinate(-0.353535353535354, -0.795454545454545), + new Coordinate(-0.888888888888889,-0.929292929292929), + new Coordinate(-1.151515151515152, -0.419191919191919), + new Coordinate(-0.815656565656566,-0.439393939393939), + })), + new Polygon(new LinearRing(new Coordinate[] + { + new Coordinate(0.068181818181818,0.578282828282829), + new Coordinate(0.421717171717172,0.070707070707071), + new Coordinate(-0.457070707070707,0.080808080808081), + new Coordinate(0.068181818181818,0.578282828282829), + })) + }; + + // Act. + for (int i = 0; i < expectedResult.Length; i++) + { + var result = m_Reader.ReadShapeAtIndex(i, factory); + + Assert.IsNotNull(result); + Assert.IsInstanceOf(result); + + HelperMethods.AssertPolygonsEqual(expectedResult[i], result as Polygon); + } + } + + [Test] + public void ReadShapeAtIndex_TryReadAfterDisposed_ShouldThrowException() + { + // Arrange. + m_TmpFile = new TempFileWriter(".shp", ShpFiles.Read("UnifiedChecksMaterial")); + m_Reader = new IO.ShapeFile.Extended.ShapeReader(m_TmpFile.Path); + GeometryFactory factory = new GeometryFactory(); + + // Act. + m_Reader.Dispose(); + Assert.Catch(() => + { + m_Reader.ReadShapeAtIndex(0, factory); + }); + } + + [TearDown] + public void TestCleanup() + { + if (m_Reader != null) + { + m_Reader.Dispose(); + m_Reader = null; + } + + if (m_TmpFile != null) + { + m_TmpFile.Dispose(); + m_TmpFile = null; + } + } + } + + static class ShpFiles + { + public static byte[] Read(string filename) + { + string file = Path.ChangeExtension(filename, "shp"); + string path = Path.Combine(CommonHelpers.TestShapefilesDirectory, file); + Assert.That(File.Exists(path), Is.True, "file not found: " + filename); + return File.ReadAllBytes(path); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapefileDataWriterTests.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapefileDataWriterTests.cs new file mode 100644 index 0000000..55e11bc --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/ShapefileDataWriterTests.cs @@ -0,0 +1,90 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NUnit.Framework; +using System; +using System.Linq; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + /// + /// Contains tests for the shapefile data writer. + /// + [TestFixture] + public class ShapefileDataWriterTests + { + /// + /// Tests creating a header from a feature. + /// + [Test] + public void TestGetHeaderFromFeature() + { + var feature = new Feature(new Point(0, 0), + new AttributesTable()); + feature.Attributes.Add("c_long", (long)12345678900000000); + feature.Attributes.Add("c_ulong", (ulong)12345678900000000); + feature.Attributes.Add("c_int", int.MinValue); + feature.Attributes.Add("c_uint", uint.MinValue); + feature.Attributes.Add("c_short", short.MaxValue); + feature.Attributes.Add("c_ushort", ushort.MaxValue); + feature.Attributes.Add("c_string", string.Empty); + feature.Attributes.Add("c_double", double.MinValue); + feature.Attributes.Add("c_bool", false); + feature.Attributes.Add("c_datetime", new DateTime(1999, 01, 01)); + + var header = ShapefileDataWriter.GetHeader(feature, 1); + + Assert.IsNotNull(header); + Assert.AreEqual(10, header.Fields.Count); + var field = header.Fields.FirstOrDefault(x => x.Name == "c_long"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(18, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_ulong"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(18, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_int"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(10, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_uint"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(10, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_short"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(10, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_ushort"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(10, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_string"); + Assert.IsNotNull(field); + Assert.AreEqual(67, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(254, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_double"); + Assert.IsNotNull(field); + Assert.AreEqual(78, field.FieldType); + Assert.AreEqual(8, field.DecimalCount); + Assert.AreEqual(18, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_bool"); + Assert.IsNotNull(field); + Assert.AreEqual(76, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(1, field.Length); + field = header.Fields.FirstOrDefault(x => x.Name == "c_datetime"); + Assert.IsNotNull(field); + Assert.AreEqual(68, field.FieldType); + Assert.AreEqual(0, field.DecimalCount); + Assert.AreEqual(8, field.Length); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/TempFileWriter.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/TempFileWriter.cs new file mode 100644 index 0000000..216f5b2 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFile.Extended/TempFileWriter.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; + +using NUnit.Framework; + +namespace NetTopologySuite.IO.Tests.ShapeFile.Extended +{ + internal sealed class TempFileWriter : IDisposable + { + public TempFileWriter(string ext, byte[] data) + { + this.Path = System.IO.Path.GetFullPath(System.IO.Path.ChangeExtension(TestContext.CurrentContext.Test.ID, ext)); + File.WriteAllBytes(this.Path, data); + } + + ~TempFileWriter() => this.InternalDispose(); + + public string Path { get; } + + public void Dispose() + { + this.InternalDispose(); + GC.SuppressFinalize(this); + } + + private void InternalDispose() + { + try + { + File.Delete(this.Path); + } + catch + { + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs new file mode 100644 index 0000000..f6e6f57 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs @@ -0,0 +1,263 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Geometries.Implementation; +using NetTopologySuite.IO.Shapefile; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + public class ShapeFileDataReaderTest + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + [SetUp] + public void SetUp() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + } + + // see https://code.google.com/p/nettopologysuite/issues/detail?id=175 + [Test] + public void TestIssue175_ReadingShapeFileUsingShpExtension() + { + using (var reader = Shapefile.Core.ShapefileReader.Open("crustal_test.shp")) + { + int length = reader.Fields.Count; + while (reader.Read(out _)) + { + Debug.WriteLine(reader.Fields[(length - 1)]); + } + } + } + + [Test] + public void TestReadingCrustalTestShapeFile() + { + // Original file with characters '°' in NAME field. + using (var reader = Shapefile.Core.ShapefileReader.Open("crustal_test_bugged.shp")) + { + int length = reader.Fields.Count; + while (reader.Read(out _)) + { + Debug.WriteLine(reader.Fields[length - 1]); + } + } + + // Removed NAME field characters + using (var reader = Shapefile.Core.ShapefileReader.Open("crustal_test.shp")) + { + int length = reader.Fields.Count; + while (reader.Read(out _)) + { + Debug.WriteLine(reader.Fields[(length - 1)]); + } + } + } + + [Test] + [Ignore("File aaa.shp not exists")] + public void TestReadingAaaShapeFile() + { + Assert.Catch(() => + { + using (var reader = Shapefile.Core.ShapefileReader.Open("aaa")) + { + int length = reader.Fields.Count; + while (reader.Read(out _)) + { + Debug.WriteLine(reader.Fields[(length - 1)]); + } + } + Assert.Fail(); + }); + } + + [Test] + public void TestReadingShapeFileWithNulls() + { + using (var reader = ShapefileReader.Open("AllNulls")) + { + foreach (var feature in reader) + { + Assert.IsNotNull(feature.Geometry); + Assert.IsNotNull(feature.Attributes); + } + } + } + [Test] + public void TestReadingShapeFileZ() + { + //Use a factory with a coordinate sequence factor that can handle measure values + var factory = new GeometryFactory(DotSpatialAffineCoordinateSequenceFactory.Instance); + + const int distance = 500; + using (var reader = ShapefileReader.Open("with_M")) + { // "" + int index = 0; + + reader.Read(out var geom, out var attributes, out _); + double firstM = geom.GetOrdinates(Ordinate.M).First(); + Assert.AreEqual(400, firstM); + + while (reader.Read(out geom, out attributes, out _)) + { + Assert.IsNotNull(geom); + Assert.IsTrue(geom.IsValid); + Debug.WriteLine(string.Format("Geom {0}: {1}", index++, geom)); + + var buff = geom.Buffer(distance); + Assert.IsNotNull(buff); + + foreach (double m in geom.GetOrdinates(Ordinate.M)) + { + Assert.IsFalse(double.IsNaN(m)); + } + } + } + } + + [Test] + public void TestReadingShapeFileAfvalbakken() + { + var factory = GeometryFactory.Default; + var polys = new List(); + const int distance = 500; + using (var reader = ShapefileReader.Open("afvalbakken.shp")) + { + int index = 0; + foreach (var feature in reader) + { + Assert.IsNotNull(feature.Geometry); + Assert.IsTrue(feature.Geometry.IsValid); + Debug.WriteLine(string.Format("Geom {0}: {1}", index++, feature.Geometry)); + + var buff = feature.Geometry.Buffer(distance); + Assert.IsNotNull(buff); + + var mpg = (MultiPolygon)feature.Geometry; + polys.Add((Polygon)mpg[0]); + } + } + + var multiPolygon = factory.CreateMultiPolygon(polys.ToArray()); + Assert.IsNotNull(multiPolygon); + Assert.IsTrue(multiPolygon.IsValid); + + var multiBuffer = (MultiPolygon)multiPolygon.Buffer(distance); + Assert.IsNotNull(multiBuffer); + Assert.IsTrue(multiBuffer.IsValid); + + // ShapefileGeometryWriter.WriteGeometryCollection(@"test_buffer", multiBuffer); + } + + [Test] + public void TestSeptPolygones() + { + const string wktGeom9 = + "MULTIPOLYGON ( " + + "((-73.8706030450129 45.425307895968558, -73.8691180248536 45.425712901466682, -73.862907940551338 45.425949154673731, -73.862739188260548 45.423181617104319, -73.864662964375952 45.423384119853267, -73.8654729753718 45.42220285381751, -73.865979232244342 45.421730347403241, -73.866822993698463 45.42088658594912, -73.866485489116826 45.420481580450996, -73.865202971706537 45.42041407953468, -73.864629213917681 45.421325341905117, -73.864156707503412 45.422236604275611, -73.863481698340081 45.422405356566514, -73.863414197423765 45.421899099693974, -73.863414197423765 45.421190340072485, -73.8635491992564 45.4200765749531, -73.864122957045254 45.419165312582606, -73.864797966208585 45.419064061208076, -73.866316736825922 45.419030310749974, -73.867092997363727 45.419266563957194, -73.867295500112789 45.419536567622515, -73.867396751487263 45.420751584116317, -73.867092997363727 45.421527844654122, -73.866384237742238 45.422506607941045, -73.866046733160658 45.423215367562364, -73.8669579955311 45.423721624434904, -73.868881771646556 45.423485371227684, -73.8694555294353 45.423417870311312, -73.8700630376822 45.423991628100168, -73.870434292722109 45.424497884972709, -73.8706030450129 45.425307895968558), " + + "(-73.86921927622808 45.425139143677825, -73.868983023020974 45.424464134514437, -73.868544267064863 45.423991628100168, -73.86813926156691 45.423991628100168, -73.867092997363727 45.423991628100168, -73.86533797353917 45.423620373060317, -73.864966718499375 45.424059129016484, -73.864966718499375 45.424497884972709, -73.865304223081068 45.42534164642683, -73.866451738658668 45.425409147343146, -73.86756550377811 45.425274145510514, -73.86921927622808 45.425139143677825), " + + "(-73.865937695291677 45.419884197388171, -73.865599517078863 45.419585804847259, -73.86432637557175 45.4198046260438, -73.864167232883347 45.4205605538138, -73.864565089604355 45.420500875305606, -73.865937695291677 45.419884197388171)), " + + "((-73.868038010192436 45.424869140012561, -73.866620490949458 45.424869140012561, -73.865844230411653 45.424970391386921, -73.865742979037179 45.42436288314002, -73.865979232244342 45.42402537855844, -73.866687991865717 45.424295382223704, -73.867869257901532 45.424396633598121, -73.868038010192436 45.424869140012561), " + + "(-73.86744733356926 45.424703767127937, -73.867371896498639 45.42446991220919, -73.867002254852821 45.424454824795021, -73.866232796733016 45.424432193673908, -73.866345952338861 45.4246509611786, -73.86744733356926 45.424703767127937)), " + + "((-73.86512208901371 45.419923983060187, -73.864604875276427 45.420301946945074, -73.8644059469159 45.420043340076518, -73.86512208901371 45.419923983060187)))"; + + var factory = GeometryFactory.Default; //new GeometryFactory(new PrecisionModel(Math.Pow(10, 13))); + var wktReader = new WKTReader(factory); + var polys = new List(); + using (var reader = ShapefileReader.Open("Sept_polygones")) + { + int index = 0; + foreach (var feature in reader) + { + var geom = feature.Geometry; + Assert.IsNotNull(geom); + Assert.IsTrue(geom.IsValid); + geom.Normalize(); + Debug.WriteLine(string.Format("Geom {0}: {1}", ++index, geom)); + polys.Add(geom); + } + } + + var expected = wktReader.Read(wktGeom9); + expected.Normalize(); + + var e1 = expected.EnvelopeInternal; + var e2 = polys[8].EnvelopeInternal; + Assert.IsTrue(e1.Equals(e2), string.Format("{0}\ndoes not match\n{1}", e1, e2)); + Assert.IsTrue(expected.EqualsTopologically(polys[8]), string.Format("{0}\ndoes not match\n{1}", expected, polys[8])); + } + + [Test] + // see https://code.google.com/p/nettopologysuite/issues/detail?id=167 + public void Issue167_EnsureAllBinaryContentIsReaded() + { + int i = 0; + foreach (var geom in ShapefileReader.ReadAllGeometries("Issue167.shp")) + { + Assert.That(geom, Is.Not.Null, "geom null"); + Console.WriteLine("geom {0}: {1}", ++i, geom); + } + Assert.That(i, Is.EqualTo(201)); + } + + [Test()] + // see https://github.com/NetTopologySuite/NetTopologySuite/issues/112 + public void Issue_GH_112_ReadingShapeFiles() + { + /* + * In this case SHP file is broken. It's records have invalid Content Length value. + * SHX file has correct Content Legnth value, so it could be used instead. + * But what to do with opposite case when SHX file is broken and SHP is not? + * + * Bearing in mind that nowadays SHX is useless this issue won't be fixed. + + int i = 0; + foreach (var geom in ShapefileReader.ReadAllGeometries("Volume2.shp")) + { + Assert.That(geom, Is.Not.Null, "geom null"); + Console.WriteLine("geom {0}: {1}", ++i, geom); + } + */ + } + + [Test] + [NtsIssueNumber(39)] // see also #52 for input data + public void EnsureSpecifiedEncodingIsUsed() + { + /* + * https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding?redirectedfrom=MSDN&view=net-5.0 + * 936 gb2312 Chinese Simplified (GB2312) + */ + + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + var encoding = Encoding.GetEncoding(936); + Assert.IsNotNull(encoding); + + using (var reader = Shapefile.Core.ShapefileReader.Open("chinese_encoding.shp", encoding)) + { + Assert.AreEqual(encoding, reader.Encoding); + Trace.WriteLine(string.Join(",", reader.Fields.Select(f => f.Name))); + int length = reader.Fields.Count; + while (reader.Read(out _)) + { + Assert.AreEqual("安徽", reader.Fields[1].Value); + } + + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs new file mode 100644 index 0000000..e2fbbcd --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs @@ -0,0 +1,743 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Algorithm.Match; +using NetTopologySuite.Features; +using NetTopologySuite.Geometries.Implementation; +using NUnit.Framework; +using System; +using System.Collections.ObjectModel; +using System.IO; +using System.Text; +using System.Collections.Generic; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.IO.Dbf; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + + [TestFixture] + public class ShapeFileDataWriterTest + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + public ShapeFileDataWriterTest() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + } + + [Test] + public void TestCreateEmptyShapefile() + { + const string filename = "__empty"; + const string emptyShp = filename + ".shp"; + const string emptyShx = filename + ".shx"; + const string emptyDbf = filename + ".dbf"; + if (File.Exists(emptyShp)) + File.Delete(emptyShp); + if (File.Exists(emptyShx)) + File.Delete(emptyShx); + if (File.Exists(emptyDbf)) + File.Delete(emptyDbf); + + var idField = new DbfNumericField("Id"); + using (var writer = ShapefileWriter.Open(filename, ShapeType.Point, idField)) + { + writer.Write(new IFeature[0]); + } + + Assert.That(File.Exists(emptyShp), Is.True); + Assert.That(File.Exists(emptyShx), Is.True); + Assert.That(File.Exists(emptyDbf), Is.True); + } + + [Test] + public void TestWriteZValuesShapeFile() + { + TestWriteZMValuesShapeFile(false); + } + + [Test] + public void TestWriteZMValuesShapeFile() + { + TestWriteZMValuesShapeFile(true); + } + + private void TestWriteZMValuesShapeFile(bool testM) + { + var points = new Coordinate[3]; + points[0] = new Coordinate(0, 0); + points[1] = new Coordinate(1, 0); + points[2] = new Coordinate(1, 1); + + var csFactory = DotSpatialAffineCoordinateSequenceFactory.Instance; + var sequence = csFactory.Create(3, Ordinates.XYZM); + for (int i = 0; i < 3; i++) + { + sequence.SetOrdinate(i, Ordinate.X, points[i].X); + sequence.SetOrdinate(i, Ordinate.Y, points[i].Y); + sequence.SetOrdinate(i, Ordinate.Z, 1 + i); + if (testM) + sequence.SetOrdinate(i, Ordinate.M, 11 + i); + } + var lineString = Factory.CreateLineString(sequence); + + var attributes = new AttributesTable(); + attributes.Add("FOO", "Trond"); + + var feature = new Feature(Factory.CreateMultiLineString(new[] { lineString }), attributes); + var features = new Feature[1]; + features[0] = feature; + + features.SaveToShapefile("ZMtest"); + + // Now let's read the file and verify that we got Z and M back + var factory = new GeometryFactory(DotSpatialAffineCoordinateSequenceFactory.Instance); + + using (var reader = ShapefileReader.Open("ZMtest")) + { + var firstFeature = reader.First(); + var geom = firstFeature.Geometry; + + for (int i = 0; i < 3; i++) + { + var c = geom.Coordinates[i]; + Assert.AreEqual(i + 1, c.Z); + } + + if (testM) + { + sequence = ((LineString)geom).CoordinateSequence; + for (int i = 0; i < 3; i++) + { + Assert.AreEqual(sequence.GetOrdinate(i, Ordinate.M), 11 + i); + } + } + + // Run a simple attribute test too + string v = reader.Fields[1].Value?.ToString(); + Assert.AreEqual(v, "Trond"); + } + } + + [Test] + public void TestWriteSimpleShapeFile() + { + var p1 = Factory.CreatePoint(new Coordinate(100, 100)); + var p2 = Factory.CreatePoint(new Coordinate(200, 200)); + + var coll = new GeometryCollection(new Geometry[] { p1, p2, }); + coll.ToFeatures().SaveToShapefile(@"test_arcview"); + + // Not read by ArcView!!! + } + + [Test] + public void TestReadWritePoint() + { + var geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Point, Ordinates.XY); + DoTest(geomsWrite, Ordinates.XY); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Point, Ordinates.XYM); + DoTest(geomsWrite, Ordinates.XYM); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Point, Ordinates.XYZM); + DoTest(geomsWrite, Ordinates.XYZM); + } + + [Test] + public void TestReadWriteMultiPoint() + { + var geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.MultiPoint, Ordinates.XY); + DoTest(geomsWrite, Ordinates.XY); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.MultiPoint, Ordinates.XYM); + DoTest(geomsWrite, Ordinates.XYM); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.MultiPoint, Ordinates.XYZM); + DoTest(geomsWrite, Ordinates.XYZM); + } + + [Test] + public void TestReadWriteLineal() + { + var geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.LineString, Ordinates.XY); + DoTest(geomsWrite, Ordinates.XY); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.LineString, Ordinates.XYM); + DoTest(geomsWrite, Ordinates.XYM); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.LineString, Ordinates.XYZM); + DoTest(geomsWrite, Ordinates.XYZM); + } + + [Test] + public void TestReadWritePolygonal() + { + var geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Polygon, Ordinates.XY); + DoTest(geomsWrite, Ordinates.XY); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Polygon, Ordinates.XYM); + DoTest(geomsWrite, Ordinates.XYM); + geomsWrite = ShapeFileShapeFactory.CreateShapes(OgcGeometryType.Polygon, Ordinates.XYZM); + DoTest(geomsWrite, Ordinates.XYZM, false); + } + + private static void DoTest(GeometryCollection geomsWrite, Ordinates ordinates, bool testGetOrdinate = true) + { + string fileName = string.Empty; + + try + { + + fileName = Path.GetTempFileName(); + fileName = Path.ChangeExtension(fileName, "shp"); + + var attr = new AttributesTable(); + attr.Add("Id", 1); + var features = geomsWrite.Select(g => new Feature(g, attr)); + features.SaveToShapefile(fileName); + + var geomsRead = ShapefileReader.ReadAllGeometries(fileName).ToGeometryCollection(); + + // This tests x- and y- values + if (!geomsWrite.EqualsExact(geomsRead)) + { + Assert.AreEqual(geomsWrite.NumGeometries, geomsRead.NumGeometries); + // + // This akward test is necessary since EqualsTopologically throws currently exceptions + bool equal = true; + for (int i = 0; i < geomsRead.NumGeometries; i++) + { + var gw = geomsWrite.GetGeometryN(i); + var gr = geomsRead.GetGeometryN(i); + if (gw.IsEmpty && gr.IsEmpty) + { + if ((gw is ILineal && gr is ILineal) || + (gw is IPolygonal && gr is IPolygonal)) + { + // suppose these are equal + } + else + { + Console.WriteLine(string.Format("Geometries don't match at index {0}", i)); + Console.WriteLine(string.Format(" written: {0}", gw.AsText())); + Console.WriteLine(string.Format(" read : {0}", gr.AsText())); + equal = false; + Assert.IsTrue(equal, "Differenced found in geometries written and read!"); + } + } + else if (!gw.EqualsExact(gr)) + { + double hsm = new HausdorffSimilarityMeasure().Measure(gw, gr); + double asm = new AreaSimilarityMeasure().Measure(gw, gr); + double smc = SimilarityMeasureCombiner.Combine(hsm, asm); + if (!gw.EqualsNormalized(gr) || (1d - smc) > 1e-7) + { + Console.WriteLine(string.Format("Geometries don't match at index {0}", i)); + Console.WriteLine(string.Format(" written: {0}", gw.AsText())); + Console.WriteLine(string.Format(" read : {0}", gr.AsText())); + equal = false; + Assert.IsTrue(equal, "Differenced found in geometries written and read!"); + } + } + } + + //For polygons this has a tendency to fail, since the polygonhandler might rearrange the whole thing + if (testGetOrdinate) + { + if ((ordinates & Ordinates.Z) == Ordinates.Z) + { + double[] writeZ = geomsWrite.GetOrdinates(Ordinate.Z); + double[] readZ = geomsRead.GetOrdinates(Ordinate.Z); + Assert.IsTrue(ArraysEqual(writeZ, readZ)); + } + + if ((ordinates & Ordinates.M) == Ordinates.M) + { + double[] writeM = geomsWrite.GetOrdinates(Ordinate.M); + double[] readM = geomsRead.GetOrdinates(Ordinate.M); + Assert.IsTrue(ArraysEqual(writeM, readM)); + } + } + + } + + // delete sample files + File.Delete(fileName); + File.Delete(Path.ChangeExtension(fileName, "shx")); + File.Delete(Path.ChangeExtension(fileName, "dbf")); + } + catch (AssertionException ex) + { + Console.WriteLine("Failed test with {0}", ordinates); + Console.WriteLine(ex.Message); + Console.WriteLine(" Testfile '{0}' not deleted!", fileName); + throw; + } + + } + + private static bool ArraysEqual(double[] writeZ, double[] readZ) + { + if (writeZ == null ^ readZ == null) + return false; + + if (writeZ == null) + return true; + + if (writeZ.Length != readZ.Length) + return false; + + for (int i = 0; i < writeZ.Length; i++) + if (Math.Abs(writeZ[i] - readZ[i]) > 1E-7) return false; + + return true; + } + + private static class ShapeFileShapeFactory + { + public static GeometryCollection CreateShapes(OgcGeometryType type, Ordinates ordinates, int number = 50) + { + bool[] empty = new bool[number]; + empty[Rnd.Next(2, number / 2)] = true; + empty[Rnd.Next(number / 2, number)] = true; + + var result = new Geometry[number]; + for (int i = 0; i < number; i++) + { + switch (type) + { + case OgcGeometryType.Point: + result[i] = CreatePoint(ordinates, empty[i]); + break; + case OgcGeometryType.MultiPoint: + result[i] = CreateMultiPoint(ordinates, empty[i]); + break; + + case OgcGeometryType.LineString: + case OgcGeometryType.MultiLineString: + result[i] = CreateLineal(ordinates, empty[i]); + break; + case OgcGeometryType.Polygon: + case OgcGeometryType.MultiPolygon: + result[i] = CreatePolygonal(ordinates, empty[i]); + break; + } + + /* + // Ensure no empty elements + if (result[i] == null || (result[i].IsEmpty && result[i].OgcGeometryType == OgcGeometryType.GeometryCollection)) + i--; + */ + // Ensure not null and not geometry collection + if (result[i] == null || result[i].OgcGeometryType == OgcGeometryType.GeometryCollection) + i--; + } + + return Factory.CreateGeometryCollection(result); + } + + private static readonly Random Rnd = new Random(9936528); + + private static readonly CoordinateSequenceFactory CsFactory = + DotSpatialAffineCoordinateSequenceFactory.Instance; + + public static readonly GeometryFactory FactoryRead = new GeometryFactory(new PrecisionModel(PrecisionModels.Floating), 4326, CsFactory); + + public static readonly GeometryFactory Factory = new GeometryFactory(new PrecisionModel(1000), 4326, CsFactory); + + private static Geometry CreatePoint(Ordinates ordinates, bool empty) + { + if (empty) + { + return Factory.CreatePoint((CoordinateSequence)null); + } + + var seq = CsFactory.Create(1, ordinates); + foreach (var o in ToOrdinateArray(ordinates)) + seq.SetOrdinate(0, o, RandomOrdinate(o, Factory.PrecisionModel)); + return Factory.CreatePoint(seq); + } + + private static Geometry CreateMultiPoint(Ordinates ordinates, bool empty) + { + if (empty) + { + return Factory.CreateMultiPoint((CoordinateSequence)null); + } + int numPoints = Rnd.Next(75, 101); + var seq = CsFactory.Create(numPoints, ordinates); + for (int i = 0; i < numPoints; i++) + foreach (var o in ToOrdinateArray(ordinates)) + seq.SetOrdinate(i, o, RandomOrdinate(o, Factory.PrecisionModel)); + + return Factory.CreateMultiPoint(seq); + } + + private static Geometry CreateLineal(Ordinates ordinates, bool empty) + { + switch (Rnd.Next(2)) + { + case 0: + return CreateLineString(ordinates, empty); + default: + return CreateMultiLineString(ordinates, empty); + } + } + + private static Geometry CreateLineString(Ordinates ordinates, bool empty) + { + if (empty) + { + return Factory.CreateLineString((CoordinateSequence)null); + } + + int numPoints = Rnd.Next(75, 101); + var seq = CsFactory.Create(numPoints, ordinates); + for (int i = 0; i < numPoints; i++) + foreach (var o in ToOrdinateArray(ordinates)) + seq.SetOrdinate(i, o, RandomOrdinate(o, Factory.PrecisionModel)); + + return Factory.CreateLineString(seq); + } + + private static Geometry CreateMultiLineString(Ordinates ordinates, bool empty) + { + if (empty) + { + Factory.CreateMultiLineString(null); + } + + int numLineStrings = Rnd.Next(0, 11); + if (numLineStrings <= 2) + numLineStrings = 0; + + var lineString = new LineString[numLineStrings]; + for (int i = 0; i < numLineStrings; i++) + lineString[i] = (LineString)CreateLineString(ordinates, false); + + return Factory.CreateMultiLineString(lineString); + } + + private static Geometry CreatePolygonal(Ordinates ordinates, bool empty) + { + if (Rnd.Next(2) == 0) + return CreatePolygon(ordinates, empty); + return CreateMultiPolygon(ordinates, empty); + } + + private static Geometry CreatePolygon(Ordinates ordinates, bool empty, int nextKind = -1) + { + if (empty) + { + Factory.CreatePolygon((CoordinateSequence)null); + } + if (nextKind == -1) nextKind = Rnd.Next(0, 5); + + double x = RandomOrdinate(Ordinate.X, Factory.PrecisionModel); + double y = RandomOrdinate(Ordinate.Y, Factory.PrecisionModel); + + switch (nextKind) + { + case 0: // circle + var ring = CreateCircleRing(ordinates, x, y, 3 * Rnd.NextDouble()); + return Factory.CreatePolygon(ring, null); + case 1: // rectangle + ring = CreateRectangleRing(ordinates, x, y, 6 * Rnd.NextDouble(), 3 * Rnd.NextDouble()); + return Factory.CreatePolygon(ring, null); + case 2: // cirle with hole + double radius = 3 * Rnd.NextDouble(); + var shell = CreateCircleRing(ordinates, x, y, radius); + var hole = CreateCircleRing(ordinates, x, y, 0.66 * radius, true); + return Factory.CreatePolygon(shell, new[] { hole }); + case 3: // rectanglee with hole + double width = 6 * Rnd.NextDouble(); + double height = 3 * Rnd.NextDouble(); + shell = CreateRectangleRing(ordinates, x, y, width, height); + hole = CreateRectangleRing(ordinates, x, y, 0.66 * width, 0.66 * height, true); + return Factory.CreatePolygon(shell, new[] { hole }); + case 4: // rectanglee with hole + width = 6 * Rnd.NextDouble(); + height = 3 * Rnd.NextDouble(); + shell = CreateRectangleRing(ordinates, x, y, width, height); + hole = CreateCircleRing(ordinates, x, y, 0.33 * Math.Min(width, height), true); + return Factory.CreatePolygon(shell, new[] { hole }); + default: + throw new NotSupportedException(); + } + } + + private static LinearRing CreateCircleRing(Ordinates ordinates, double x, double y, double radius, bool reverse = false) + { + var seq = CsFactory.Create(4 * 12 + 1, ordinates); + double angle = Math.PI * 2; + const double quandrantStep = Math.PI / 2d / 12d; + int k = 0; + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 12; j++) + { + double dx = radius * Math.Cos(angle); + double dy = radius * Math.Sin(angle); + seq.SetOrdinate(k, Ordinate.X, Factory.PrecisionModel.MakePrecise(x + dx)); + seq.SetOrdinate(k, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y + dy)); + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.Z, RandomOrdinate(Ordinate.Z, Factory.PrecisionModel)); + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.M, RandomOrdinate(Ordinate.M, Factory.PrecisionModel)); + k++; + angle -= quandrantStep; + } + } + seq.SetOrdinate(k, Ordinate.X, seq.GetOrdinate(0, Ordinate.X)); + seq.SetOrdinate(k, Ordinate.Y, seq.GetOrdinate(0, Ordinate.Y)); + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.Z, seq.GetOrdinate(0, Ordinate.Z)); + if ((ordinates & Ordinates.M) == Ordinates.M) + seq.SetOrdinate(k, Ordinate.M, seq.GetOrdinate(0, Ordinate.M)); + + return Factory.CreateLinearRing(reverse ? seq.Reversed() : seq); + } + + private static LinearRing CreateRectangleRing(Ordinates ordinates, double x, double y, double width, double height, bool reverse = false) + { + double dx = Factory.PrecisionModel.MakePrecise(width / 2); + double dy = Factory.PrecisionModel.MakePrecise(height / 2); + + var seq = CsFactory.Create(5, ordinates); + + seq.SetOrdinate(0, Ordinate.X, Factory.PrecisionModel.MakePrecise(x - dx)); + seq.SetOrdinate(0, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y - dy)); + seq.SetOrdinate(1, Ordinate.X, Factory.PrecisionModel.MakePrecise(x - dx)); + seq.SetOrdinate(1, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y + dy)); + seq.SetOrdinate(2, Ordinate.X, Factory.PrecisionModel.MakePrecise(x + dx)); + seq.SetOrdinate(2, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y + dy)); + seq.SetOrdinate(3, Ordinate.X, Factory.PrecisionModel.MakePrecise(x + dx)); + seq.SetOrdinate(3, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y - dy)); + seq.SetOrdinate(4, Ordinate.X, Factory.PrecisionModel.MakePrecise(x - dx)); + seq.SetOrdinate(4, Ordinate.Y, Factory.PrecisionModel.MakePrecise(y - dy)); + + if ((ordinates & (Ordinates.Z | Ordinates.M)) != Ordinates.None) + { + int k = 0; + for (; k < 4; k++) + { + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.Z, RandomOrdinate(Ordinate.Z, Factory.PrecisionModel)); + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.M, RandomOrdinate(Ordinate.M, Factory.PrecisionModel)); + } + if ((ordinates & Ordinates.Z) == Ordinates.Z) + seq.SetOrdinate(k, Ordinate.Z, seq.GetOrdinate(0, Ordinate.Z)); + if ((ordinates & Ordinates.M) == Ordinates.M) + seq.SetOrdinate(k, Ordinate.M, seq.GetOrdinate(0, Ordinate.M)); + } + + return Factory.CreateLinearRing(reverse ? seq.Reversed() : seq); + } + + private static Geometry CreateMultiPolygon(Ordinates ordinates, bool empty) + { + if (empty) + { + Factory.CreateMultiPolygon(null); + } + + switch (Rnd.Next(2)) + { + case 0: + int numPolygons = Rnd.Next(4); + var polygons = new Polygon[numPolygons]; + for (int i = 0; i < numPolygons; i++) + polygons[i] = (Polygon)CreatePolygon(ordinates, false); + return Factory.BuildGeometry(new Collection(polygons)).Union(); + + case 1: + polygons = new Polygon[2]; + double radius = 5 * Rnd.NextDouble(); + double x = RandomOrdinate(Ordinate.X, Factory.PrecisionModel); + double y = RandomOrdinate(Ordinate.Y, Factory.PrecisionModel); + var shell = CreateCircleRing(ordinates, x, y, radius); + var hole = CreateCircleRing(ordinates, x, y, 0.66 * radius, true); + polygons[0] = Factory.CreatePolygon(shell, new[] { hole }); + shell = CreateCircleRing(ordinates, x, y, 0.5 * radius); + hole = CreateCircleRing(ordinates, x, y, 0.15 * radius, true); + polygons[1] = Factory.CreatePolygon(shell, new[] { hole }); + return Factory.CreateMultiPolygon(polygons); + + default: + throw new NotSupportedException(); + } + } + + private static double RandomOrdinate(Ordinate o, PrecisionModel pm) + { + switch (o) + { + case Ordinate.X: + return pm.MakePrecise(-180 + 360 * Rnd.NextDouble()); + case Ordinate.Y: + return pm.MakePrecise(-90 + 180 * Rnd.NextDouble()); + case Ordinate.Z: + return 200 * Rnd.NextDouble(); + case Ordinate.M: + return 200 + 200 * Rnd.NextDouble(); + default: + throw new NotSupportedException(); + } + } + } + + [Test /*, ExpectedException(typeof(ArgumentException))*/] + // see https://code.google.com/p/nettopologysuite/issues/detail?id=146 + public void Issue146_ShapeCreationWithInvalidAttributeName() + { + var points = new Coordinate[3]; + points[0] = new Coordinate(0, 0); + points[1] = new Coordinate(1, 0); + points[2] = new Coordinate(1, 1); + var ls = new LineString(points); + var mls = GeometryFactory.Default.CreateMultiLineString(new LineString[] { ls }); + + var attrs = new AttributesTable(); + attrs.Add("Simulation name", "FOO"); + + var features = new[] { new Feature(mls, attrs) }; + + Assert.Throws(() => features.SaveToShapefile("invalid_line_string")); + + //Assert.Throws(() => shp_writer.Write(features)); + } + + [Test/*, ExpectedException(typeof(ArgumentException))*/] + // see: https://github.com/NetTopologySuite/NetTopologySuite/issues/111 + public void issue_111_pointhandler_with_invalid_values() + { + var factory = GeometryFactory.Default; + + var p = factory.CreatePoint(new CoordinateZ(0, 0)); + Geometry[] arr = { p, GeometryCollection.Empty }; + var geometries = factory.CreateGeometryCollection(arr); + var features = geometries.ToFeatures(); + + var shapeType = geometries.GetShapeType(); + Assert.AreEqual(ShapeType.PointZM, shapeType); + + string tempPath = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); + Assert.Throws(() => features.SaveToShapefile(tempPath)); + } + + [Test/*, ExpectedException(typeof(ArgumentException))*/] + // see: https://github.com/NetTopologySuite/NetTopologySuite/issues/111 + public void issue_111_multiPointhandler_with_invalid_values() + { + var factory = GeometryFactory.Default; + + var p = factory.CreatePoint(new CoordinateZ(0, 0)); + var mp = factory.CreateMultiPoint(new[] { p }); + Geometry[] arr = new[] { mp, GeometryCollection.Empty }; + var geometries = factory.CreateGeometryCollection(arr); + var features = geometries.ToFeatures(); + + var shapeType = geometries.GetShapeType(); + Assert.AreEqual(ShapeType.MultiPointZM, shapeType); + + string tempPath = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); + Assert.Throws(() => features.SaveToShapefile(tempPath)); + + } + + [Test/*, ExpectedException(typeof(ArgumentException))*/] + // see: https://github.com/NetTopologySuite/NetTopologySuite/issues/111 + public void issue_111_multilinehandler_with_invalid_values() + { + var factory = GeometryFactory.Default; + + var points = new Coordinate[3]; + points[0] = new CoordinateZ(0, 0); + points[1] = new CoordinateZ(1, 0); + points[2] = new CoordinateZ(1, 1); + var ls = factory.CreateLineString(points); + + var mls = factory.CreateMultiLineString(new[] { ls }); + Geometry[] arr = new[] { mls, GeometryCollection.Empty }; + var geometries = factory.CreateGeometryCollection(arr); + var features = geometries.ToFeatures(); + + var shapeType = geometries.GetShapeType(); + Assert.AreEqual(ShapeType.PolyLineZM, shapeType); + + string tempPath = Path.GetFileNameWithoutExtension(Path.GetTempFileName()); + Assert.Throws(() => features.SaveToShapefile(tempPath)); + } + + [Test/*, ExpectedException(typeof(ArgumentException))*/] + // see: https://github.com/NetTopologySuite/NetTopologySuite/issues/111 + public void issue_111_polygonhandler_with_invalid_values() + { + var factory = GeometryFactory.Default; + + var points = new Coordinate[5]; + points[0] = new CoordinateZ(0, 0); + points[1] = new CoordinateZ(1, 0); + points[2] = new CoordinateZ(1, 1); + points[3] = new CoordinateZ(0, 1); + points[4] = new CoordinateZ(0, 0); + var polygon = factory.CreatePolygon(points); + + var multiPoligon = factory.CreateMultiPolygon(new[] { polygon }); + Geometry[] arr = new[] { multiPoligon, GeometryCollection.Empty }; + var geometries = factory.CreateGeometryCollection(arr); // { MultiPolygon, GeometryCollection } + + var shapeType = geometries.GetShapeType(); + Assert.AreEqual(ShapeType.PolygonZM, shapeType); + + string tempPath = Path.GetTempFileName(); + var features = geometries.ToFeatures(); + + Assert.Throws(() => features.SaveToShapefile(tempPath)); + } + + private static Ordinate[] ToOrdinateArray(Ordinates ordinates) + { + var result = new Ordinate[OrdinatesUtility.OrdinatesToDimension(ordinates)]; + int nextIndex = 0; + for (int i = 0; i < 32; i++) + { + if (ordinates.HasFlag((Ordinates)(1 << i))) + { + result[nextIndex++] = (Ordinate)i; + } + } + + return result; + } + + [Test, ShapeFileIssueNumber(24)] + public void WriteShouldWriteMultiPoints() + { + var attribs = new AttributesTable + { + { "Id", 10 } + }; + var coors = new Coordinate[2] + { + new Coordinate(123.0, 023.0), + new Coordinate(123.0, 100.0) + }; + var points = Factory.CreateMultiPointFromCoords(coors); + var feature = new Feature(points, attribs); + var features = new[] { feature }; + + var filename = Path.ChangeExtension(Path.GetTempFileName(), ".shp"); + features.SaveToShapefile(filename); + + foreach (var readFeature in ShapefileReader.ReadAll(filename)) + { + Assert.IsNotNull(readFeature.Geometry); + Assert.IsInstanceOf(readFeature.Geometry); + Assert.AreEqual("Id", feature.Attributes.GetNames()[0]); + Assert.AreEqual(10, feature.Attributes["Id"]); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs new file mode 100644 index 0000000..718a1a6 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs @@ -0,0 +1,53 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using NUnit.Framework; +using System.Collections.Generic; +using System.Text; +using NetTopologySuite.IO.Shapefile; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + public class ShapeFileEncodingTest + { + [SetUp] + public void Setup() + { + var idColumn = new DbfNumericField("id", 8, 0); + var testColumn = new DbfCharacterField("Test", 15); + var alderColumn = new DbfNumericField("Ålder", 8, 0); + var odestextColumn = new DbfCharacterField("Ödestext", 254); + + var at = new AttributesTable(); + at.Add("id", "0"); + at.Add("Test", "Testar"); + at.Add("Ålder", 10); + at.Add("Ödestext", "Lång text med åäö etc"); + + var feature = new Feature(new Point(0, 0), at); + + using (var shp = new ShapefilePointWriter("encoding_sample.shp", Shapefile.ShapeType.Point, idColumn, testColumn, alderColumn, odestextColumn)) + { + shp.Write(feature); + } + } + + [Test] + public void TestLoadShapeFileWithEncoding() + { + using (var shp = Shapefile.Core.ShapefileReader.Open("encoding_sample.shp")) + { + Assert.AreEqual(shp.Encoding, CodePagesEncodingProvider.Instance.GetEncoding(1252), "Invalid encoding!"); + + Assert.AreEqual(shp.Fields[1].Name, "Test"); + Assert.AreEqual(shp.Fields[2].Name, "Ålder"); + Assert.AreEqual(shp.Fields[3].Name, "Ödestext"); + + Assert.IsTrue(shp.Read(out var deleted), "Error reading file"); + Assert.AreEqual(shp.Fields["Test"], "Testar"); + Assert.AreEqual(shp.Fields["Ödestext"], "Lång text med åäö etc"); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileInvalidHeaderTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileInvalidHeaderTest.cs new file mode 100644 index 0000000..e673c8d --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileInvalidHeaderTest.cs @@ -0,0 +1,34 @@ +using NetTopologySuite.IO.Dbf; +using NUnit.Framework; +using System.Collections; +using System.IO; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + [TestFixture] + [Ignore("Sample file(s) not published")] + public class ShapeFileInvalidHeaderTest + { + private readonly string _invalidPath = Path.Combine(CommonHelpers.TestShapefilesDirectory, "invalidheader.shp"); + + [Test] + public void TestInvalidShapeFile() + { + /* + var s = new NetTopologySuite.IO.ShapefileReader(_invalidPath); + var sh = s.Header; + var g = s.ReadAll(); + */ + string dbfFile = Path.ChangeExtension(_invalidPath, ".dbf"); + using (var dbf = new DbfReader(dbfFile)) + { + + var de = (dbf as IEnumerable).GetEnumerator(); + Assert.IsNull(de.Current); + de.MoveNext(); + Assert.IsNotNull(de.Current); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileIssueNumberAttribute.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileIssueNumberAttribute.cs new file mode 100644 index 0000000..c097fc8 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileIssueNumberAttribute.cs @@ -0,0 +1,20 @@ +using System; +using NUnit.Framework; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// The issue number used in this test (or fixture) refers to an issue on + /// https://github.com/NetTopologySuite/NetTopologySuite.IO.ShapeFile, created + /// after this project was split out on its own (and thus, it got its own + /// set of issue numbers). + /// + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] + public sealed class ShapeFileIssueNumberAttribute : PropertyAttribute + { + public ShapeFileIssueNumberAttribute(int issueNumber) + : base("NetTopologySuite.IO.ShapeFile issue", issueNumber) + { + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeRead.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeRead.cs new file mode 100644 index 0000000..929445c --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeRead.cs @@ -0,0 +1,151 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using System; +using System.IO; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + /// + /// + /// + public class ShapeRead + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + /// + /// + /// + public ShapeRead() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + } + + /// + /// + /// + public void Start() + { + //TestBugMultipolygonHShuntao(); + //TestBugCimino(); + + //// Bug with a.shp and b.shp and intersection + //GeometryCollection aColl = ReadShape("a.shp"); + //GeometryCollection bColl = ReadShape("b.shp"); + //Geometry result = aColl.Intersection(bColl); + + //// Point shapefile + //TestShapeReadWrite("tnp_pts.shp", "Test_tnp_pts.shp"); + + //// Arc shapefile + TestShapeReadWrite("tnp_arc.shp", "arc.shp"); + TestShapeReadWrite("Stato_Fatto.shp", "Test_Stato_Fatto.shp"); + TestShapeReadWrite("Stato_Progetto.shp", "Test_Stato_Progetto.shp"); + TestShapeReadWrite("Zone_ISTAT.shp", "Test_Zone_ISTAT.shp"); + TestShapeReadWrite("Strade.shp", "Test_Strade.shp"); + + //// Polygon shapefile + //TestShapeReadWrite("tnp_pol.shp", "Test_tnp_pol.shp"); + + //// MultiPoint shapefile + //TestShapeReadWrite("tnp_multiPoint.shp", "Test_tnp_multiPoint.shp"); + + // TestShapeReadWrite("a.shp", "Test_a.shp"); + // TestShapeReadWrite("b.shp", "Test_b.shp"); + } + + //private void TestBugMultipolygonHShuntao() + //{ + // GeometryCollection gc1 = null; + // GeometryCollection gc2 = null; + // string file = "BJmultipolygon.shp"; + // if (!File.Exists(file)) + // throw new FileNotFoundException(); + + // // Test with Default ShapefileReader + // try + // { + // var sfr = new ShapefileReader(file); + // gc1 = sfr.ReadAll(); + // } + // catch (Exception ex) + // { + // throw ex; + // } + + // //// Test with MyShapefileReader (only for debug purpose!) + // //try + // //{ + // // MyShapeFileReader reader = new MyShapeFileReader(); + // // gc2 = reader.Read(file); + // //} + // //catch (Exception ex) + // //{ + // // throw ex; + // //} + + // //// Check for equality + // //if (!gc1.EqualsExact(gc2)) + // // throw new TopologyException("Both geometries must be equals!"); + //} + + //private void TestBugCimino() + //{ + // try + // { + // string file = "countryCopy.shp"; + // if (!File.Exists(file)) + // throw new FileNotFoundException(); + + // var sfr = new ShapefileReader(file); + + // var gc = sfr.ReadAll(); + // for (int i = 0; i < gc.NumGeometries; i++) + // Console.WriteLine(i + " " + gc.Geometries[i].Envelope); + + // // IsValidOp.CheckShellsNotNested molto lento nell'analisi di J == 7 (Poligono con 11600 punti) + // string write = Path.Combine(Path.GetTempPath(), "copy_countryCopy"); + // var sfw = new ShapefileWriter(gc.Factory); + // sfw.Write(write, gc); + // Console.WriteLine("Write Complete!"); + // } + // catch (Exception ex) + // { + // throw ex; + // } + //} + + private static GeometryCollection ReadShape(string shapepath) + { + if (!File.Exists(shapepath)) + throw new ArgumentException("File " + shapepath + " not found!"); + + var geometries = ShapefileReader.ReadAllGeometries(shapepath).ToGeometryCollection(); + return geometries; + } + + private static void WriteShape(GeometryCollection geometries, string shapepath) + { + if (File.Exists(shapepath)) + File.Delete(shapepath); + //var sfw = new ShapefileGeometryWriter(geometries.Factory); + //ShapefileGeometryWriter.WriteGeometryCollection(Path.GetFileNameWithoutExtension(shapepath), geometries); + } + + private static void TestShapeReadWrite(string shapepath, string outputpath) + { + var collection = ReadShape(shapepath); + WriteShape(collection, outputpath); + var testcollection = ReadShape(outputpath); + + if (!collection.EqualsExact(testcollection)) + throw new ArgumentException("Geometries are not equals"); + Console.WriteLine("TEST OK!"); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.dbf new file mode 100644 index 0000000000000000000000000000000000000000..ba2881de5a29c75ed2ea9d13da8452def98ff5dc GIT binary patch literal 493 zcmZRc%E-vbz`$^jK?g)(0H^%?oYcfTkhl+sKvxu8Qk0pO4w7MT1`+>21QKvbEJ+Q? x%uNLfxqyT@kmNv2x19XM5{Q@^h!R3m;F4dOlmpVuz~BcW(B*j*Mgh?w005hrHckKl literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/AllNulls.shp new file mode 100644 index 0000000000000000000000000000000000000000..272ad870fb7251a6c0e3094626960c7693752bf9 GIT binary patch literal 220 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 z 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

M7X!(&7Fx_!igx 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 literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/EmptyShapeFile.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/EmptyShapeFile.shp new file mode 100644 index 0000000000000000000000000000000000000000..29de63a12be6f0016d03b25f33ccd616c262cd9b GIT binary patch literal 100 YcmZQzQ0HR64vbzfGcYh>mm^6O0AsfSPyhe` literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Issue167.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Issue167.shp new file mode 100644 index 0000000000000000000000000000000000000000..25fc301cedafc100671f635151d507ba734fb286 GIT binary patch literal 70700 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 z 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 literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Sept_polygones.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Sept_polygones.dbf new file mode 100644 index 0000000000000000000000000000000000000000..68480aaa4fd3dede9641223a7cfee7a2944a6a9e GIT binary patch literal 7286 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 QmMe+*T(8K^Tz&rk0&N=3+yDRo literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.dbf new file mode 100644 index 0000000000000000000000000000000000000000..09c0f193f300def072b3338ad666657c610599e0 GIT binary patch literal 195 zcmZS1W@lq$U|>iDLTtd#(bp9!?hK+Gpd1+G?HcLn=jIRMg5?!p5>T2~AviHl!L2AU mFFCU~IbYX5F*_$QFGUw5>Xl!ds-xiSsDKw(7?|UgmjVFjSQ#<^ literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/US_DMA_region.shp new file mode 100644 index 0000000000000000000000000000000000000000..752e1fe6ce46572e4283d57dd99d50569b6b4d99 GIT binary patch literal 52008 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 F|9`-iD`@}# literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterial.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterial.dbf new file mode 100644 index 0000000000000000000000000000000000000000..241ab8b76145089ae35a7e7e7a7dd5e0932170dc GIT binary patch literal 227 zcmZRMXP07PU|?`$2n3RtAUGqjAk{B1H!6kv(?p zD58u&o&z?sd>W(n2Q9d^UnAgkIMOi0%-Q&z{$yfX3YCarfm%pOfSr=1dvbGZ?Q*L4*!6kv(?p zD58u&o&z?sd>W(n2Q9d^UnAgkIMOi0%-Q&z{$yfX3YCarfm%pOfSr=1dvbGZ?Q*L4>ST8l3=?T0Ni+imH+?% literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullAtStart.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullAtStart.shp new file mode 100644 index 0000000000000000000000000000000000000000..44cfa8cc1556312af5b563279d40ff810de95e01 GIT binary patch literal 368 zcmZQzQ0HR64tBg?W?*0i%H?i4sWv<3(|)1PWo<|HyxqUzt2S%a-&^*2K+>!6kv(?p zD58u&9urgqL_1(J*QYURf6#(!`!xbyhjU%IwI8Gjqz(iM(ml@HmVC8euI9r*cKJK| zVQNb*x{Ak^yxcE)yin$N;TyOcVQz+*g{~iHB+z#Z79jJdF>S3|>Tq{IM9n69bpL_e e!2-k}Pyn`XBi!#WwJ^Ofvl2i)S--^|T|EG~L4lS4 literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullInMiddle.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/UnifiedChecksMaterialNullInMiddle.shp new file mode 100644 index 0000000000000000000000000000000000000000..dc121e8cd27123859c14f0d37f008d226503160c GIT binary patch literal 368 zcmZQzQ0HR64tBg?W?*0i%H?i4sWv<3(|)1PWo<|HyxqUzt2S%a-&^*2K+>!6kv(?p zD58u&o&z?sd>W(n2Q9d^UnAgkIMOi0%-Q&z{$yfX3YCarfm%p7w_ ei3Ny3pa5+5M!4T$YGHa|W+i}pwSJ2|x_SVsih-5@ literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.dbf new file mode 100644 index 0000000000000000000000000000000000000000..b76934f3749d61847c7d158152ba2dda4346ff86 GIT binary patch literal 1530 zcmeH_JqyAx5Qfi>#lb(|AOUxYQm~HFK?JQ%b`EW-!PJ!W27kV$9i);v^kWdbA%T1E zp1etJ@EA_}0Kj^Cvy~$N2(?OgQJ(h9dMZ~yEVzt(mT&;8jtZIFgqmk|J(cW^JbG2w z^;k&hDXDY?-{{Abg#y7h)WW91-(qbGK zBH41KFPxl3h)N4ae5LVP?~tW4r?g(HwX1F3%%dJ{)nRViq1}KNZ>vk|`!q@ZXQ|2S N5z@_S+ literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Victoria North.shp new file mode 100644 index 0000000000000000000000000000000000000000..f5326f3200c6fadc1e3e7bacbd9e3349379c0758 GIT binary patch literal 580 zcmZQzQ0HR63K*4MFf%Z)0_E&9g*(GK!wzIdf4;5T>f#`(DSUHxN7w;P$LcG6Kt5LO zsDg|@t_H}gTW01{_5k(5%tGgb6f!~eqRXN4p-K-RyD^)Ex6cTR8$srZLe16D6h3+Y z=mwZtK~3Sa$ANssybZU_fqH@biPwO9o#=hPEP;FpP2sPvfP5<#S1xNH-$_%rl^+-$ z=^ds*zCgaXrm&+pkRSfz&D<~`Us6+era6$$wUWuP7|7Ss6kh2Hjd)MG=)Qj zfc!+KVxa;c-&9lBl?B9~Y!s0UMMOfK6dRW OqDDZT1`x*q@c{tmOb}-P literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Volume2.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/Volume2.shp new file mode 100644 index 0000000000000000000000000000000000000000..2cedba25a2ce5afd8628461e08b4df4596f7885e GIT binary patch literal 91332 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 P{^j#uC9eNhzmER~8{xAp literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/afvalbakken.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/afvalbakken.dbf new file mode 100644 index 0000000000000000000000000000000000000000..e6f05f2af026ab3a1dbe307fbbb3e1c93510cfca GIT binary patch literal 1554 zcmZS1VHTERU|>jOumF;1Ae@1rq_Q9tD(VcPjnI@h`@6Uz%d?`%^C}c17G$OtDUb}( ta}tY5)&$frY9IDcBR4!p^`k(AL1xz$cnj~vrG!0%v39+6Bcedl5Y>XYA^E}^k&pr3t``K(mTx^g1 z>F#~)Nt^8{U_bbkFB;$4VxN=scS?4>kE1^6`b$I7Ec>b(li%2J-^cM-`lJ7R0->E+ ziAO$J7dFANhq*eH#$57olrNf-wFGfv`|`g&Ld-RVn!Ax))BT;zb;(N0#>LdqJ_Pd_ z)>K5#lh$mUm#w&>g<2*~2i`QeTk3kHW%A*{S$vEineNzzTrfsQfQzjT`3do+d7f$1 z(mn*EK0WU^89wr$;)>R>Gx?!YfDey3G;W{LGWqbpE$`YFuIYE=E~(m@9Rlu#(HV2y zCtCI%yL}tN3?G6`i1YY06xeRx==cuB6|L8L?9Lejoa=7`E?OoZ9=eH-s~tO=A0U@~ zIttu?irm{n;p4%%r0dku^$=`K#@ws)%)eg96|QIvfsr?X|1zkt-BW3qe0bLM<}jn?S1Fczbk+jgjQOUm6pke zhaTd?<$U3SjIov-TlvKi%mB1WMkQkO`jk_MwGYA0=7)}`28JWwH(PN6a4Ep-ubm4*+&xb8AwD94%a6j!t`0uEFF ze-X`pR%w}hc;Kw;>Qm0ZT;#@i;B-suJ9R`lQ z-F#4KnS6Z2Gx+WDfmZ7%^SA8CIo66jeY?`?JcszuI9I0!Mt^WV>{q$MMI8$6BbVp7 zR&hn^$Hi3x+JKvUcyJXTTobiEr>QC#&$K*m+p^$N=}9!R=L9E{bC`PbF^M@ zMT_U=CUBDv4{qWEXKtuluw{P%LvR{$SKyKuh8Rb~Gsf`2{{^UA;j&+&kQ;Py;u?3w z6)pHk{s6eihlifxgSC4V-01kAi&K$H&yk2R3l@^A>yhq=y)sGV3fJpG%@VEwtrZ)n zxS}-_g_{A~MOD&TR4<6!!$7CtE@H#sZx$Mte#OSGe?;AdNwzE~Pa9I~}ov`p_iYr>E z^-OA+e0b<3KIrk{O3Tg}orAXvxo+w$qw9e=xwK8?3b$xM@ah6^cQw~V5SMq5XmO4Z zH~H}3DL(l5?ciee&)F9lw9Gm|F{OuZQ{Zet)2lD{fV1=cz9NP z@J*G4w;k`$O$|N{TyrH=h>N$J@GC;BedOIPIk{8i3Kvh8UU|snyQ5ffMT_q@;wB#+ zdW#R-E3Wb2ve#E5w`!~RF#4j#dcz0b6DcZJxHz|)GLic+21%0QiWckl6>yUe56_8@ zu3iI|Z-y-7@(h$9#@phL9K#1%>CRe}D_oA?4aj95WGb#`@g1-cxXFiyKH}r%+r13=DHLs8(@Bi{C+Z0mo?W)}*vdK0J7f5B#;&Ay>YW m;okM`M9la5cEg8YoC|rtc&2_+T+!mYBOf^HbxUcP{Qm*7p2MdA literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.dbf new file mode 100644 index 0000000000000000000000000000000000000000..e9191830fda5bd6296045ad40e5c785fad20f6a2 GIT binary patch literal 482058 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 z zYxDKDRWGjpyFW)<|E8Xco9mB0uK&ULRtfvxeH``$0Y%LzPRE&}`i$X+g%unY(Q0U!VbfB+B}AkgFb+sXv<_kQcbX_X|F z>woXbyN?mqKY&sA2e|(8Xz%7ddwJWq{Vi-%sLCiL+1&XaCE1yb;c1h;bkRB$gQlzqna0bXkFN%R^xQ&b&MfVG$4j0zd!= V00AH%BH*}wV)G5b-~0X7{y&Vpxe)*W literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shp new file mode 100644 index 0000000000000000000000000000000000000000..13c8fab988ee030bac82f3873b6b6cf5e4cfb328 GIT binary patch literal 644548 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

a{W*Uc(U<9LMmc%}8> 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�}FW0{m<6noD+o?<@H7 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 t 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

    8Em56gonK^cc;U#xe1egu%5(Ry-N7Z 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

    toXS{1Zevpgans1G;k|>4f^& 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 R_~woja5BER|GWPF{{RjdxibI& literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shx b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/chinese_encoding.shx new file mode 100644 index 0000000000000000000000000000000000000000..1c684b18109348a38698c70dd9578ccb8b193456 GIT binary patch literal 724 zcmZvZQAks97{!18|Gm=Kmb=*|wn$7UB@nEqVQAOrVF*$Yhzv6e8fGCqL`YbydQqW} zh#CY#q$DaN3M#TFdJtI>5)orB`BJSOV)-EAgLLpM@WSQeeBXD@`Odx25M;y043r$G z(5%-vbHKjp@!v-B?Mfk|_^b+v= z76iuO&2I3dKQA2agM#>B^}mm)YVYr?_Pa6EgMEsz^7ra6RjcaHVRmY+J51B(bzjpe zzs8=ILOD#p@J3A=7 zIm{RFLyeekY5A8i<4wes_HTGc6tmaz?8uq}i2rLVm9=$iBj*p%@01omRJ_LA5! z?T1&ecg2rpv5!~f=VNE&A6dYDlz*&*T@*hyfnA=I&kD|_9K^FY^)32W-8hLm;%9I= z |~E  + )(Pe@^"SE  + $ Ξe@ܗE  + =* + gp1e@4+zE ? + ᩰe@\QB-E @ + __e@Z E A + Ede@!0E B + 5jLe@jE C + Tbe@Ԟo_E D + B=%e@"^E E + ܯe@E F + >:[e@aœgE G + Ub)e@)_P}%E H + e@\KE I + |*e@CmɌE J + iEe@BpuE K + B˜e@2E L + 6Te@3%E M + !pe@x]:E N + cΰe@dE O + XVe@X |~E \ + 8#)e@ʟx5E ] + J6e@PE ^ + ,ڴee@ fE _ + ze@zDME ` + j^e@ 絨E a + J22œe@*E b + Fe@IE c + غe@;uCE d + *fe@xE e + HĖe@N-u.E f + 9Ɖe@nE g + d#e@E h + f e@u#E i + ×e@eE j + KYUBe@ȽzE k + ԧe@1E { + ƪƀ=e@5E | + bue@+lE } + *y?ke@'E ~ + ~ue@-QE  + 2yJNe@!\E + e@ݹ>=E + n۰Ye@sI<E + z/Ϟe@IE + e@sݭE + ءje@`)E + 3i"e@)E + e@C-E + R!e@*`~E + ue@70E + Bpٞe@d=>E + X,e@. J E + )e@_iE + {W'|؞e@DVE + R'e@ 03]E + &r.e@uE + E"Ȟe@kE + YG\ e@œ"E + HTô +e@֟aE + .Şe@E + l})e@wroE + Ae@:E + JBݓe@i6?zE + =ke@^E + -e@jVE + >e@R+zE + e@=iE + ΐFfe@)IE + I{f1e@}eE + O A&"e@sE + I{f1e@}eE + ?4e@6aE + E?e@ E + |)e@Jm%E + [ɍe@×E + -*e@^E + xגe@GE + ;e@S@E + e@2bQE + >e@ E + >e@ E + >e@ E + :L e@X E + e@?E + {Ge@5E + wPe@[GS6E + +Rce@HJDYE + &e@j5vxE + qe@;ݕE + {/[Ke@)lE + F#d3he@K\E + 4 +ғe@DIfE + -?pe@GE + 5{e@z;x_E + )Ie@EۈE + Nёe@NrΩE + [e@2E + >g;ie@DdE + }de@ .E + Te@AdC{E + ,e@ce'rE + 嬆m0e@bE + QMe@!sE + ]ntؓe@u]E + tJe@eE + \?e@']ӥE + !e@ XE + )e@؇Q>E + F;e@ oE + ꖌe@N+E + <e@`=E + { e@E + b"e@VE + Ke@^E + 9+_e@мE + ,ye@$E + De@F|'E + Ahe@ ~VE + #87e@I6E + e@԰kE + ʷke@%E + le@:=rE + Phe@0E + 6ee@ysE + -Se@VE + Es Je@iWE + hHe@ZdE + le@?^E + QTe@)E + ]Dqe@3_E + p(e@FE + Y?e@ղE + gvse@i;[E + ,$re@4E + yke@kE + ~:e@flE  + .ee@('E  + m;W#e@GQE  + >g#3e@`E  + UN e@rZ;E  + U)=e@ΘjE  + tPe@6.ɲE  + ڊre@BRHE  + X8ړe@n0 E  + .e@E ! + Q0e@wE " + X K8e@%/E & + \e@h=?e@ʷEE 1 + Ʈڔe@jE 2 + *e@zAE 3 + #X{e@W%E 4 + kfe@=E 5 + t%7e@*E 6 + Mxe@8[3E 7 + %2e@g CE 8 + )Ie@EۈE 9 + P?e@}E : + NѶhe@uE ; + ΄/Q7e@YE < + %~e@G\E = + q de@RqE > + nK#\e@nsE ? + \e@agE @ + +he@3KE A + je@|E B + 4u%e@ڰzE C + /o>e@1E D + dcFPe@(z8E E + @Pe@r6 E F + A^Z7e@MqE G + Ie3e@nqE H + ࡓe@E I + 1e@aOtE J + YE V + <;e@K +WE W + Koe@ LE X + Lbߵie@_bE Y + `C,e@ DE Z + `C,e@ DE [ + e@R+zE _ + F4e@+6ݰE ` + ?T5e@ g2˰E a + s/e@5E b + %ue@ME c + De@󐉓E d + Te@~E e + 9e@/E f + Дe@V衰E g + e@,FE h + >e@R+zE i + >e@R+zE j + O$e@0W*E k + 0Ne@#iE l + e@䗧E m + tAe@)ME n + SD{e@ 3E o + q@,e@t78-5E p + iV{e@xWtE q + iN*e@өNצE r + "e@YR)E s + 8(ߒe@&=E t + 2ƒe@k E u + *4e@U?*E v + SY/e@ץ#,E w + ɒe@[T4TE x + NÒe@@qWE y + Y e@'#@SҦE z + # e@nۦE { + u/e@1)E | + I|:e@E } + 1.e@9#E ~ + r8#te@zE  + ? ge@!ptE  + +pe@_E  + ue@70E  + +pe@_E  + Ah֜e@E  + +pe@_E  + +pe@_E  + 3{ƙe@fJDE  + ɞe@Y E  + _e@|-E  + e@$E  + &r.e@uE  + +=Ӕe@+E  + (\e@wE  + De@,(E  + q)Ke@E  + j ’e@6LE  + wKe@NF E  + 4+̞e@E  + ٦e@YeE  + J,e@ E  + \-a̞e@p E  + $e@bXwE  + ,e@GE  + A +e@Uci>tE  + Xe@0 E  + ue@70E  + 9Gue@tE  + 2e@MZE  + h0Me@ڷ1E  + Ʈڔe@jE  + Ʈڔe@jE  + ƞe@E  + ᩰe@\QB-E  + *K}e@N4 E  + GJe@6\E  + PHݔe@V`E  + b32e@ԄJE  + Z.#j&e@(OME  + ge@[ڦ E  + Dye@E%E  + Dye@E%E  + Һee@R<3E  + \$Tϓe@Ϥ*nE  + DKDe@ ,=E  + 'dve@OE  + ?,e@yTkE  + záe@ܰ08E  + SObe@%rΙ6E  + ype@a=uPE  + Ps e@\E  + nˏc͖e@pDE  + Y&e@\E  + Y&e@\E  + ]{-e@͚ E  + mwm@e@E  + Z]Te@x68E  + Z]Te@x68E  + Z]Te@x68E  + Z]Te@x68E  + Z]Te@x68E  + Ȝe@ʼ[YFe@-YE  + 聰]e@pM93E  + ige@P5AE  + n*He@ͻE ! + Vce@NE " + RD{Me@mZE # + ^e@3E +E $ + TB%ޓe@yHE % + zke@TE & + RD{Me@mZE ' + ae@!JE ( + gTe@̲E ) + 3e@^3w-E * + jk3ae@9E + +  +Ge@p E , + $gme@YmE - + ⿘'e@͉@E . + @9e@ԫC>E / + @e@: SE 0 + ZILe@1wE 1 + U; ge@l,E 2 + h1e@Z8E 3 + ar؞e@AE 4 + N^oe@M CDE 5 + x;ݤe@uE 6 + 3cAye@ߏu"E 7 + lQe@BE 8 + J"e@4VE 9 + RYoe@o6E : + Me@ُޙE ; + e@*loGZ+5FAfgkY`|KompeRz4EhHdEk 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 N=Po>#;kga_`#(l}5QG2# literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test_bugged.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/crustal_test_bugged.dbf new file mode 100644 index 0000000000000000000000000000000000000000..fb322fd9ca617238c017640115a0ba877fea6df8 GIT binary patch literal 5965 zcmcIoO^?(#5N(8zxU4vELt5c02Q1t9KBk*l7K#24!(lX+ktZD>D4Ve9G-&x%{6xy` z8QPUN&h%{Xp*!xEa#dcxDwp%{^W#6C&Stap!HWm*)f;bKUA=z)PXD}6pN~3stkUJ# z)#ZA1Hk)aD+rh#9fZpI;`?u+G{wih4YNbA&KT)5@F+Y2s-ps7{Qk&{K?D#UhxH`Mo zz#Ufna`{I8K8&XqF8_a!&AUs+*I8C<^Qx64S=7z8D9gN&r2at8>wWtvZz{6Mn>~@$ zmVB+tOjbokWRsCohIWJvI1Qs9V#m>geHI^4hGCx?kh;WhOhb$#m!!FH zP4l`ez7`VsyyHYW!uNVq_`xs}oO*FI413N;B{4Psf-aAoIjt?Qir>S++3l~l`>ZYM zihQrDoLuMaw>+;1_kNsfRq+@uP9542HsUl0nP>d(T{!d-F$j+;$~R2AM3K-*lm%At z`>VP+WZ2?UQRZZjDMgUVKcOf)acD=_M$jbj0^@NotQ3_bgYbx=B5I0p8lr-O|Y ztZJw{`MnYgKca1>hzc+OisA+j-6|s}7tE9ewjNPbM9sgTN0hrpkv^>A4{_=#&D<6v z5ZBAJ+UD{m4RNfe%(NqHAgJd>W+lNe@R&p8Yn3nZXd^Q_j)WgkjheSuk9}MiqsY?#lJ#8l~bFgY7{En_;7x23@-pNB3?I zv?I&}qah-qv%!O+A~9T}e0Ofe)HLlX%92|swtniV`2An0=Pu@2NQx~#xSyhY6buK+ z2sWHsP|PE5SWzRX7oWPVq1gI@Q$z)tsDo^v7~RTfn}2EY-A=U$6AbMLufr(!n3*6L z1|EF}k0Yr!LR4Qe$ax=D@kg6|B@aClx_i=zc7#`CG!mh!n8(af%twfdoQkrv-eznT zSj8WoOE|uexooZ_99{mB`?4jw|8{Nuk7@n?uC*h)1gFdwPDRCHn8#6~ob5qBw@_?- zSjC?#%$g0!H(gV3^sXHpr|Qb5VG<1&AxJ$F?Cx75ME!=;;|v$`-@_CT#XH*?)Tq#N z74v|F!|(`Ep>tETG)m^5Xn|Gyd?Q==v99iS+BF?GuC*hKGn#N=iUz~5>-pR~hhTVw zsF<27_u7MgZlTrtu!>(Cx`H}`1{_|XG{yE~j?AW*Xh(P=s_%V$^Y5AO^!=ab^gOrwzwdj_@BGdxC+DCc_kWMp{ANWt zIc54gpVPAszpZnk(ydSbFmujacwptL7(2@q^gdaXCtQ)j|NZ&@{!^a*SjjwV+3a6! zZIX4Vdzb3uUayLP-$EN$1@qW2@5<~1S%MUpiw1xHHovzjsBwuF73G=M?;j%t$}G5I+I3cc5&+OYH9Mb zCGfjmVMkZ$Ygt}WLVVC`34C91I7c*7g?jDc6STrf3It2P#>f1Li==?@qG42^rIf+_ zNooEjwxcpdjmu=o2-N?2i=XFI=P=8mw_+e0& zjNHv|`{c$g?&9>FaOi8N{W5K_*yq%rDlioLoQkGD|J2!8H`~qvY!2MG*smZ3yG4_; z*9z=FvM1b6vseNTUuBExbL_!l$x@F~R+3>|MjbG#pQ|kf%giUisl0J;o;rGAmM{{; zDzlp!ri_C-MbcH>6C`2*A)>Uu=AT-^vDqcbE~(F z+Z+jR`xc!^+cOq?X!$;R*@t9i~W!Jf%${^h53j1SvlLV zFhFPkJcA8q%%_Rr#hS*r)Cg6W%lSq*i}s7pWYM}6ZSOh6wzibY)MaDjsQT#DKXHD=`4{JBY(EW&3N0xNjwHvBoKPOPIAP4? zvBNcn!BLAA=8(H2A4v`8Wj1-Wb4WdMD)2b;qDmD~t@eFfUoM3$IVnkhj53AFPA8V> zIw=$>)y`ZWV-4mmtv?s>q!2yLy7ZTHJE*LGq0Am91@dl_YlXF;i$~@woX>E+!}$>B zORPU_k}54<`E+@I?!(%DcXDbk{T!;jG;}yF2v`5fC(K*S>$tWkJI*0fNG()b=A0~o z)TY4;&QpxQ`Lm^F@Un2|&2`sUIlzLB2i9dD-V5Q!iD9naU1!0BV|_Je?Sv3;OB`G9 z4GVr<Vgg|D$-N77$&D?sw`t)nC?yf`8x`>m}Q} zIVV(geET)Rpy76bKVPtpA8a(@V=>Z@1*QvsFmg7j4Z0c*J)%Bteuxdkd0h@ujS2^?1M%fgZLOg@ zzU|X;t8mzAV^ut3yd}&pG=Fa)62kYBZx8gXGKc9pqL}0tVQ_*|{z|sf6mDkg=4g%hG~(#F=@u&p=ar6?$2x85)|1S{eBQ#ua@1ta{5{f>Eod4qX{d53w4@uywFq<$IW z$I!CPZ=IIQQED&pH*_R&hjk+yW8%S(7Uq})Pt|(m+bv76PcWc#Ljm(~1YiH=2(epO zpS3^dCuML@8_%nY7C?n;_ju3w%Ha2xvX7ss01mFY@!% zfx6qhzoahX!}Tx$G6xMgN%a!CIR=O%mm z`ixp0a2#U2+I_k?18j~)%2XaaxA==SRNKVSj!w$ibCnDGy%$Y&h`Pcdw)8rP!Of@aDn2&Px|NWe2ttd!GElg)<(OH$EhG$c{|U@lx>NLCZ?>4c}ybltoQH zq&zE*2Lwy@oOhPS={)$d@P@|AIiF=L=b#XU7(QV9Xh@mappWsxg@WkBZ3oIZK2rDG z+cw-`4iW4aKbX_P9Ly)ox6`#jYlpV!fPBkxH;rQg@XFt^bE>xv#O&NT{d|l7ShFfO zZT?mpZkn%&4RsX2e7B_~Z7(#StcWUWyUK^&R!Lc)#we)#_u@a4lK4QK={)yKlPbKw z6?eDJnGb7cefmL3Q3dLkrSJ7P5&}&wMQL~bp!?H#4@$G+LZFu2!Qd???Oy7M{@wvIXWrTeHnq&7Qo{1R0lYSQGP26wbzMVX)p?%7jO2-JeS+UAG z_l6Tp5w6)KY!t!I?#f;ZUpWHrx04fR(-{HFq&nyg1%w^`_d4}A*RcJWw(ZmP{nA<<_L&XFz*WECb?j?eu zHHSOuAB_X@Y_a;O?R{?Jpuo9lXUNHL_+($1_jHF7tT4Fo^4Qz(5jbHSG0xZz*iTqr z+61N*d(7C4W1Hwoe8kvoLJM=S-sCQ^%bTw!J6`GpXT67NyE}z&w)bhVWY7_e+(Rz< zM+sq)foy4|D;v`JXFU&J4uwy?@N{f~Ex6Q;D%#Z{fc!uEUhGmb0qZ1-lOb0|);U}U zah=3<6xUf?hjE?8bsX1u+y`JjV!mQNW4;s45v(x}Fy6Eav}yUehsjviUV3DdGJHJ$ z-TZ3f;1O6dej|IBoS1`4G^-7v%GB*TtByYcXY7Z;Z6D-#Qd^i38?E}rUjVLymslV* z2BW-p^GZB;FuNl=Msikf_}xSoHLnJBlPAHz-d$O~uRskhT&(>NI~WWGx^gqB52(Wr z0|ndL7jhxDdWA{vVQo0)`{CNZ&U2yR`pIprFSX#cvkMjE%7f86LRtgOwO~{0%DrV7 zJUBDiDMK$`3$6t{Kd)ZR1GVGLqP2lqprM+4AdM9Q(Iu&q%42mw+0M^0KRX2aO<#&fD?@(f;ODqmUR@rhXiVwd%Lz5R%!SQnezN8Q zD{5Se-lAVCxj>#>yE8*F3 z7L~_cS`ogU2O1T*+BYOR)bsDUTPssW_F=eB!+jj?^N4N4R%{P#BC~S%8t0MJ1aH2N z9YuO#GDDG_(?8=J_kS8+?zxunb*O;iv%&7`L&4H#Uwh*MLu#f=>jS$DLO5ud(QLfH zjPhyc_vjvvfXTfro$L=*l(TY1{!w)?kazb^&5fHRt8S*I8@dpM(SPjQ9Md0tib!o^S_{9f_8vMb#7f0x^*DjweF|MoVk>=i$9 zxOXAClUtSxbES)i0dZK?>PSxUyzv&&oy}N!E+IwoA6wP N=Po>#;kga_`#(l}5QG2# literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/date.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/date.dbf new file mode 100644 index 0000000000000000000000000000000000000000..f5e28a8ef7ccf8bccb143889fdadad2c11ab276a GIT binary patch literal 115 zcmZS1VisUzU|>jO5CoEFAe@20(*-W(2V!x+xe!K(hpUTYh%1N#R*5dps{jQCMg|6E J2F8X4QUFn*2V4LE literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/error_union.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/error_union.shp new file mode 100644 index 0000000000000000000000000000000000000000..25f2b454b70cfa52ed30ed9167add544ddd4913c GIT binary patch literal 716172 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≶Pz%=FutpU+E^KRNm4@2~ac_=TMh_VeD-JEvdk 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 G!V3VO>~3@b literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_ed50_utm36.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_ed50_utm36.shp new file mode 100644 index 0000000000000000000000000000000000000000..64bd7b70e164bd9bf2b74b6a0ff22b29d2bd8690 GIT binary patch literal 388 zcmZQzQ0HR64i3FwW?%p!1_2RQ1;b`#$1Z`iY{mUvj>pW@Zn|2lIJRsHnfLjUmm_xV zD58u&o(IURwOMx$`EOBn6kDLZ>fd2Zvp@>jpju(}cphqMyL#5kk%eDHIr9}lFU%}C zy$kzxob+-GY0f`+_o1>QXZEd~tAOsZKXz1SAt%C}&q}WrJM*eI&M|W_n|cB4ZYH2r z4%qxymz~Occ7?KILx0q*C+EE!LGEIOx+|eZrsps)JamN?x<#Dva)hacg-?UY1JRo0 g%8pj|@6C!o=j8|sKO1RVxj-O)nQF+28Epu&0W}SDdjJ3c literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_wgs84_geo.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/line_wgs84_geo.shp new file mode 100644 index 0000000000000000000000000000000000000000..e9ae6649cf827f009651c99e37b76e2929c5090a GIT binary patch literal 372 zcmZQzQ0HR64tBj@W?%p!hMx{97mpb^I_P^jO^i8i@37^xYC&> zy=Q)!T(o>(?*KC!=B|#8yfw{Ujt-yy-aNzg80=0am^;w@^m*HxRzD|4hh<;;uV&n} zcR+T>bKwVWS(XSnbiI0a#moL$J36Fp>;LF`+TLMG;Ew%Vc8(5B&vaZQZ`eD)%>I8& K`N70%_6`8?Z*^n< literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/point_ed50_geo.dbf b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/point_ed50_geo.dbf new file mode 100644 index 0000000000000000000000000000000000000000..68544c96c4a38c5b344584bee7527ae7c2ae7809 GIT binary patch literal 550 zcmZRMXP07TU|=}NP!1$9L1qeE%n!ukf^#8^;*uhmh%<;00OLXF@{IhPRKL<(AQ!9t zl+`2t(P2xYiuALa_6`>F_X(M+I6ADI|FLJ?YkLRm r+EGM7#&CfMm|mD!Kp`fW9NeCjVm|J7!R7*80MQqI%WSceIKoZ5UeZBvAo4uK$8_&edyY|~Oc+@gCpR<>ZahPy7Jq|+#Z;{lTTb^G}C-w z4>RlK+Y`5)r#!IFa%Nx6Jm)yvY;^rVBbk8M0-K*y9~SNZGx3Q1i|@MgRysbk2f2d< hh(Q2dP9Rm~`MK9S;o$)bpV?ix*TNS+ut!sG2LR2`dOQFC literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_ed50_geo.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_ed50_geo.shp new file mode 100644 index 0000000000000000000000000000000000000000..bd9fc501c2e642d0fc42754b8fdf2c26c2b95d44 GIT binary patch literal 404 zcmZQzQ0HR64odR$!J+N1o9VH)_73GOomXFeb8y((w20Y_)4>6| zb`()YAkPDvStb0l4u5;>;INZ@pQtUfg9At*8&oUI-sg{+?)d(-ci5jQXb|>-o9MizENpI~YHeW%jv`a5uVnKx>#_?wX)~g5l~52Zt9c zf~#YGV)_x;U3y0Xwi>>4aM1SszNC}Q!GZg3nS<0jM0mJ6KH^>j3?Iuw@2pta9pK@0 RIn%Lt;xBs#bi2^a0{~x0i1q*g literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_wgs84_geo.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/polygon_wgs84_geo.shp new file mode 100644 index 0000000000000000000000000000000000000000..f0016b3a3f5e9f6d45452914cde36ca946f0b4d9 GIT binary patch literal 404 zcmZQzQ0HR64o!D)1jJx>q5E;&)U1Fv=N%l{ zPrt653^WVbT_s)n<|XcPaER_O*|u50!2zZhrWU66O5O5WO%VqN1&zlGdd@mHJeqj$ Uoh`3}!?HUMpK={SgeSUr0H;xgvH$=8 literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_PointZM.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_PointZM.shp new file mode 100644 index 0000000000000000000000000000000000000000..cad9f0c0991750becb4b6b35b1873c94e416c4c1 GIT binary patch literal 232 zcmZQzQ0HR64oY4yGca%i<`11S(w2-z%jz5l`B{ePf3CYV~7J#n6`8$$kg!Ru?;i#>Xtc)%b>%4jdM>4Bw{9A0yo0}ohiO};Q?XMh8C z?H~3tf+c>`11S)b4`f!0|LcOx%?WV5|H0t>f1nf-ObyKZGqVhZC))WqAgKYm2x1P* eO&vb(5Bv*rK~}>8Q`76ZxO&5s5V*Tx<^TYpdr<`d literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_pointZM_MissingM values.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/shape_pointZM_MissingM values.shp new file mode 100644 index 0000000000000000000000000000000000000000..70ae570a9e995ea87ae4ebdee038748559ebf610 GIT binary patch literal 216 zcmZQzQ0HR64oY4yGca%i<`11S)b57{g%dYNEqVCKhpwr&Xd@a1oW*;0KOwcfv&9MR1KTEPUwV0Q_) za{SskL&Z^WTD8=#VuT;>UgkJm%EIi3>@JwvO^ZED^qQF*uW+3H8@XM@u?T2y$3{$h zVc`WcD{<#?!HY)_cA=XGbQ3V-83I7zb=tPKK)+MP5#27BpFr+n2VxM=wOMuFx<|#4 z!DQ3>+*!^}eW2fDk^%?Db^0>t3(gQXFe-RNPB9DeBL0K;SA z)ixDJDIg=VlgSZg)_fr2{3}d%qx%cpJfNFEK?imhOb(WIfl2t--c^V&!sjk@|397Q mCb0vU9zp4Cc_Wh}%q*DMAaTh)6~{xsgrJ?s3=c422EN7WxN5h8wd4Z0l@GV_Gs4l3PQkazp1r|Nl_Sbh;()dANh~hj>qx zrF;3=A6p1v4d?#ctVam9kLCKcT<+Hp-hKD9K|a6N-~UgGzjvGc*D1vq&ne3Ed_{+q zfKw&lJQJ{F2KLD1xxdK`&P+CDmjOriY``#+=i-{t$i*Y0aAgcu#$aPKH%7BEnvIZ= zV|l}J*9$4nLcp~VuqFaFLbF7}BTFU>iVy~+5C)~<26K{2KR~S4H9@;q?;CA&0wl1* zzW#GmbR0cM*J$KCt&z}Jk1{Iz^9vPlL4#V@uVR)nrm@zndIao+KdN~R= i<^&a;nQo9NBsHSyEHZE+3>tH-Owk{io(&^z%Ha>CcV0OF literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/with_M.shp b/test/NetTopologySuite.IO.Esri.Test/TestShapefiles/with_M.shp new file mode 100644 index 0000000000000000000000000000000000000000..4e684955f612519cdd61e852291e4f42468f9f65 GIT binary patch literal 304324 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

    u5aL5m8BfS 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 VCaNM))roqBsD?znL{yxI{vSJOVSxYu literal 0 HcmV?d00001 diff --git a/test/NetTopologySuite.IO.Esri.Test/Utils/Utils.cs b/test/NetTopologySuite.IO.Esri.Test/Utils/Utils.cs new file mode 100644 index 0000000..519fb4a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Utils/Utils.cs @@ -0,0 +1,30 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NetTopologySuite.IO +{ + internal static class Utils + { + public static Feature[] ToFeatures(this GeometryCollection geometries) + { + var attributes = new AttributesTable(); + attributes.Add("Id", 1); + + var features = new Feature[geometries.Count]; + for (int i = 0; i < geometries.Count; i++) + { + features[i] = new Feature(geometries[i], attributes); + } + return features; + } + + public static GeometryCollection ToGeometryCollection(this IEnumerable geometries) + { + return new GeometryCollection(geometries.ToArray()); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/CascadedPolygonUnionFixture.cs b/test/NetTopologySuite.IO.Esri.Test/Various/CascadedPolygonUnionFixture.cs new file mode 100644 index 0000000..9f44a9a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/CascadedPolygonUnionFixture.cs @@ -0,0 +1,42 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.Operation.Overlay; +using NetTopologySuite.Operation.Overlay.Snap; +using NetTopologySuite.Operation.Union; +using NUnit.Framework; +using System; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + [TestFixture] + public class CascadedPolygonUnionFixture + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + public CascadedPolygonUnionFixture() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + } + + [Test] + public void PerformCascadedPolygonUnion() + { + var collection = ShapefileReader.ReadAllGeometries("tnp_pol.shp").ToList(); + + var u1 = collection[0]; + for (int i = 1; i < collection.Count; i++) + u1 = SnapIfNeededOverlayOp.Overlay(u1, collection[i], SpatialFunction.Union); + + var u2 = CascadedPolygonUnion.Union(collection); + if (!u1.EqualsTopologically(u2)) + Assert.Fail("failure"); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2.cs b/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2.cs new file mode 100644 index 0000000..9cf77f0 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2.cs @@ -0,0 +1,304 @@ +using NetTopologySuite.Geometries; +using QuickGraph; +using QuickGraph.Algorithms.Observers; +using QuickGraph.Algorithms.ShortestPath; +using System; +using System.Collections.Generic; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + + ///

    + /// A class that manages shortest path computation. + /// + public class GraphBuilder2 + { + #region Delegates + + /// + /// A delegate that defines how to calculate the weight + /// of a line. + /// + /// A line. + /// The weight of the line. + public delegate double ComputeWeightDelegate(LineString line); + + #endregion + + private static readonly ComputeWeightDelegate DefaultComputer = line => line.Length; + + private readonly bool bidirectional; + + private readonly AdjacencyGraph> graph; + private readonly IList strings; + private IDictionary, double> consts; + private GeometryFactory factory; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Specify if the graph must be build using both edges directions. + /// + public GraphBuilder2(bool bidirectional) + { + this.bidirectional = bidirectional; + + factory = null; + strings = new List(); + graph = new AdjacencyGraph>(true); + } + + /// + /// Initializes a new instance of the class, + /// using a directed graph. + /// + public GraphBuilder2() : this(false) + { + } // TODO: maybe the default value must be true... + + /// + /// Adds each line to the graph structure. + /// + /// + /// + /// true if all lines + /// are added, false otherwise. + /// + /// + /// If geometries don't have the same factory. + /// + public bool Add(params LineString[] lines) + { + bool result = true; + foreach (var line in lines) + { + var newfactory = line.Factory; + if (factory == null) + factory = newfactory; + else if (!newfactory.PrecisionModel.Equals(factory.PrecisionModel)) + throw new TopologyException("all geometries must have the same precision model"); + + bool lineFound = strings.Contains(line); + result &= !lineFound; + if (!lineFound) + strings.Add(line); + else continue; // Skip vertex check because line is already present + + foreach (var coord in line.Coordinates) + { + if (!graph.ContainsVertex(coord)) + graph.AddVertex(coord); + } + } + return result; + } + + /// + /// Initialize the algorithm using the default + /// weight computer, + /// that uses string length + /// as weight value. + /// + /// + /// If you've don't added two or more geometries to the builder. + /// + /// + /// If builder is already initialized. + /// + public void Initialize() + { + BuildEdges(DefaultComputer); + } + + /// + /// Initialize the algorithm using the specified + /// weight computer + /// + /// + /// A function that computes the weight + /// of any edge of the graph. + /// + /// + /// If you've don't added two or more geometries to the builder. + /// + /// + /// If builder is already initialized. + /// + public void Initialize(ComputeWeightDelegate computer) + { + BuildEdges(computer); + } + + /// + /// + /// + /// + private void BuildEdges(ComputeWeightDelegate computer) + { + if (strings.Count < 2) + throw new TopologyException("you must specify two or more geometries to build a graph"); + + // Counts the number of edges in the set we pass to this method. + int numberOfEdgesInLines = 0; + foreach (var str in strings) + { + int edges = str.Coordinates.GetUpperBound(0); + numberOfEdgesInLines += edges; + } + + // Double values because we use also reversed edges... + if (bidirectional) + numberOfEdgesInLines *= 2; + + consts = new Dictionary, double>(numberOfEdgesInLines); + + foreach (var line in strings) + { + // A line has to have at least two dimensions + int bound = line.Coordinates.GetUpperBound(0); + if (bound > 0) + { + for (int counter = 0; counter < bound; counter++) + { + // Prepare a segment + var src = line.Coordinates[counter]; + var dst = line.Coordinates[counter + 1]; + + // Here we calculate the weight of the edge + var lineString = factory.CreateLineString( + new[] { src, dst, }); + double weight = computer(lineString); + + // Add the edge + IEdge localEdge = new Edge(src, dst); + graph.AddEdge(localEdge); + consts.Add(localEdge, weight); + + if (!bidirectional) + continue; + + // Add the reversed edge + IEdge localEdgeRev = new Edge(dst, src); + graph.AddEdge(localEdgeRev); + consts.Add(localEdgeRev, weight); + } + } + } + } + + /// + /// Carries out the shortest path anlayis between the two + /// nodes + /// passed as variables and returns an + /// giveing the shortest path. + /// + /// The source geom + /// The destination geom + /// A line string geometric shape of the path + public LineString Perform(Geometry source, Geometry destination) + { + return Perform(source.Coordinate, destination.Coordinate); + } + + /// + /// Carries out the shortest path between the two nodes + /// ids passed as variables and returns an + /// giveing the shortest path. + /// + /// The source node + /// The destination node + /// A line string geometric shape of the path + public LineString Perform(Coordinate source, Coordinate destination) + { + if (!graph.ContainsVertex(source)) + throw new ArgumentException("key not found in the graph", "source"); + if (!graph.ContainsVertex(destination)) + throw new ArgumentException("key not found in the graph", "destination"); + + // Build algorithm + var dijkstra = + new DijkstraShortestPathAlgorithm>(graph, edge => consts[edge]); + + // Attach a Distance observer to give us the distances between edges + var distanceObserver = + new VertexDistanceRecorderObserver>(edge => consts[edge]); + distanceObserver.Attach(dijkstra); + + // Attach a Vertex Predecessor Recorder Observer to give us the paths + var predecessorObserver = + new VertexPredecessorRecorderObserver>(); + predecessorObserver.Attach(dijkstra); + + // Run the algorithm with A set to be the source + dijkstra.Compute(source); + + // Get the path computed to the destination. + IEnumerable> path; + bool result = predecessorObserver.TryGetPath(destination, out path); + + // Then we need to turn that into a geomery. + return result ? BuildString(new List>(path)) : null; + + // if the count is greater than one then a + // path could not be found, so we return null + } + + /// + /// Takes the path returned from QuickGraph library and uses the + /// list of coordinates to reconstruct the path into a geometric + /// "shape" + /// + /// Shortest path from the QucikGraph Library + /// + private LineString BuildString(IList> path) + { + // if the path has no links then return a null reference + if (path.Count < 1) + return null; + + // if we get here then we now that there is at least one + // edge in the path. + var links = new Coordinate[path.Count + 1]; + + // Add each node to the list of coordinates in to the array. + int i; + for (i = 0; i < path.Count; i++) + links[i] = path[i].Source; + + // Add the target node to the last loction in the list + links[i] = path[i - 1].Target; + + // Turn the list of coordinates into a geometry. + var thePath = factory.CreateLineString(links); + return thePath; + } + + /// + /// Outputs the graph as a DIMACS Graph + /// + /// The name of the output graph + /// Indicates if the method was worked. + public bool WriteAsDIMACS(string fileName) + { + // The DIMACS format is a reasonabley standard method + // of preparing graphs for analys in SP algortihm. + // This method *could* be used to prepare the graph beforehand + // so the turning from a GIS layer into a graph is not so + // intensive. + // + // NOTE: Follows the 9th DIMACS format: http://www.dis.uniroma1.it/~challenge9/format.shtml + return false; + } + + /// + /// + /// + /// + /// + public bool ReadFromDIMACS(string fileName) + { + return false; + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2Test.cs b/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2Test.cs new file mode 100644 index 0000000..244348d --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/GraphBuilder2Test.cs @@ -0,0 +1,402 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Features; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using NetTopologySuite.IO.Shapefile; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + [TestFixture] + public class GraphBuilder2Test + { + #region Setup/Teardown + + [SetUp] + public void Setup() + { + factory = GeometryFactory.Fixed; + + a = factory.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(100, 0), + new Coordinate(200, 100), + new Coordinate(200, 200), + }); + b = factory.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(100, 100), + new Coordinate(200, 200), + }); + c = factory.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(0, 100), + new Coordinate(100, 200), + new Coordinate(200, 200), + }); + d = factory.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(300, 0), + new Coordinate(300, 200), + new Coordinate(150, 200), + new Coordinate(150, 300), + }); + e = factory.CreateLineString(new Coordinate[] + { + new Coordinate(100, 300), + new Coordinate(150, 300), + new Coordinate(200, 300), + }); + + result = factory.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(300, 0), + new Coordinate(300, 200), + new Coordinate(150, 200), + new Coordinate(150, 300), + }); + revresult = (LineString)result.Reverse(); + + start = a.StartPoint; + end = d.EndPoint; + } + + #endregion + + private const string shp = ".shp"; + private const string shx = ".shx"; + private const string dbf = ".dbf"; + + private GeometryFactory factory; + private LineString a, b, c, d, e; + private LineString result, revresult; + private Point start, end; + + /// + /// Loads the shapefile as a graph allowing SP analysis to be carried out + /// + /// The name of the shape file we want to load + /// + /// + public LineString TestGraphBuilder2WithSampleGeometries(string fileName, Coordinate src, Coordinate dst) + { + var edges = ShapefileReader.ReadAllGeometries(fileName).ToGeometryCollection(); + return TestGraphBuilder2WithSampleGeometries(edges, src, dst); + } + + /// + /// Uses the passed geometry collection to generate a QuickGraph. + /// + /// + /// + /// + public LineString TestGraphBuilder2WithSampleGeometries(GeometryCollection edges, Coordinate src, + Coordinate dst) + { + var builder = new GraphBuilder2(true); + foreach (MultiLineString edge in edges.Geometries) + foreach (LineString line in edge.Geometries) + builder.Add(line); + builder.Initialize(); + + return builder.Perform(src, dst); + } + + [SetUp] + public void FixtureSetup() + { + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + } + + private void SaveGraphResult(Geometry path) + { + if (path == null) + throw new ArgumentNullException("path"); + + const string shapepath = "graphresult"; + if (File.Exists(shapepath + shp)) + File.Delete(shapepath + shp); + Assert.IsFalse(File.Exists(shapepath + shp)); + if (File.Exists(shapepath + shx)) + File.Delete(shapepath + shx); + Assert.IsFalse(File.Exists(shapepath + shx)); + if (File.Exists(shapepath + dbf)) + File.Delete(shapepath + dbf); + Assert.IsFalse(File.Exists(shapepath + dbf)); + + const string field1 = "OBJECTID"; + var feature = new Feature(path, new AttributesTable()); + feature.Attributes.Add(field1, 0); + + var features = new List(new[] { feature, }); + features.SaveToShapefile(shapepath); + + Assert.IsTrue(File.Exists(shapepath + shp)); + Assert.IsTrue(File.Exists(shapepath + shx)); + Assert.IsTrue(File.Exists(shapepath + dbf)); + } + + [Test] + [Ignore("graph.shp not present")] + public void BuildGraphFromCompleteGraphShapefile() + { + const string shapepath = "graph.shp"; + const int count = 1179; + + Assert.IsTrue(File.Exists(shapepath)); + var edges = ShapefileReader.ReadAllGeometries(shapepath).ToGeometryCollection(); + Assert.IsNotNull(edges); + Assert.IsInstanceOf(typeof(GeometryCollection), edges); + Assert.AreEqual(count, edges.NumGeometries); + + var startls = edges.GetGeometryN(515).GetGeometryN(0) as LineString; + Assert.IsNotNull(startls); + var startPoint = startls.EndPoint; + Assert.AreEqual(2317300d, startPoint.X); + Assert.AreEqual(4843961d, startPoint.Y); + + var endls = edges.GetGeometryN(141).GetGeometryN(0) as LineString; + ; + Assert.IsNotNull(endls); + var endPoint = endls.StartPoint; + Assert.AreEqual(2322739d, endPoint.X); + Assert.AreEqual(4844539d, endPoint.Y); + + var builder = new GraphBuilder2(true); + foreach (MultiLineString mlstr in edges.Geometries) + { + Assert.AreEqual(1, mlstr.NumGeometries); + var str = mlstr.GetGeometryN(0) as LineString; + Assert.IsNotNull(str); + Assert.IsTrue(builder.Add(str)); + } + builder.Initialize(); + + var path = builder.Perform(startPoint, endPoint); + Assert.IsNotNull(path); + SaveGraphResult(path); + + var reverse = builder.Perform(endPoint, startPoint); + Assert.IsNotNull(reverse); + Assert.AreEqual(path, reverse.Reverse()); + } + + [Test] + [Ignore("minimalgraph.shp not present")] + public void BuildGraphFromMinimalGraphShapefile() + { + const string shapepath = "minimalgraph.shp"; + const int count = 15; + + Assert.IsTrue(File.Exists(shapepath)); + var edges = ShapefileReader.ReadAllGeometries(shapepath).ToGeometryCollection(); + Assert.IsNotNull(edges); + Assert.IsInstanceOf(typeof(GeometryCollection), edges); + Assert.AreEqual(count, edges.NumGeometries); + + var startls = edges.GetGeometryN(0).GetGeometryN(0) as LineString; + Assert.IsNotNull(startls); + var endls = edges.GetGeometryN(5).GetGeometryN(0) as LineString; + ; + Assert.IsNotNull(endls); + + var builder = new GraphBuilder2(true); + foreach (MultiLineString mlstr in edges.Geometries) + { + Assert.AreEqual(1, mlstr.NumGeometries); + var str = mlstr.GetGeometryN(0) as LineString; + Assert.IsNotNull(str); + Assert.IsTrue(builder.Add(str)); + } + builder.Initialize(); + + var path = builder.Perform(startls.StartPoint, endls.EndPoint); + Assert.IsNotNull(path); + } + + [Test] + [Ignore("strade_fixed.shp not present")] + public void BuildGraphFromStradeShapefile() + { + string shapepath = "strade_fixed.shp"; + int count = 703; + + Assert.IsTrue(File.Exists(shapepath)); + var edges = ShapefileReader.ReadAllGeometries(shapepath).ToGeometryCollection(); + Assert.IsNotNull(edges); + Assert.IsInstanceOf(typeof(GeometryCollection), edges); + Assert.AreEqual(count, edges.NumGeometries); + + var startCoord = new Coordinate(2317300d, 4843961d); + var endCoord = new Coordinate(2322739d, 4844539d); + + bool startFound = false; + bool endFound = false; + var builder = new GraphBuilder2(true); + foreach (MultiLineString mlstr in edges.Geometries) + { + Assert.AreEqual(1, mlstr.NumGeometries); + var str = mlstr.GetGeometryN(0) as LineString; + Assert.IsNotNull(str); + Assert.IsTrue(builder.Add(str)); + + if (!startFound) + { + var coords = new List(str.Coordinates); + if (coords.Contains(startCoord)) + startFound = true; + } + + if (!endFound) + { + var coords = new List(str.Coordinates); + if (coords.Contains(endCoord)) + endFound = true; + } + } + builder.Initialize(); + Assert.IsTrue(startFound); + Assert.IsTrue(endFound); + + var path = builder.Perform(startCoord, endCoord); + Assert.IsNotNull(path); + SaveGraphResult(path); + + var reverse = builder.Perform(startCoord, endCoord); + Assert.IsNotNull(reverse); + Assert.AreEqual(path, reverse.Reverse()); + } + + [Ignore("")] + [Test] + public void BuildStradeFixed() + { + string path = "strade" + shp; + Assert.IsTrue(File.Exists(path)); + + var features = ShapefileReader.ReadAll(path).ToList(); + Assert.AreEqual(703, features.Count); + + string shapepath = "strade_fixed"; + if (File.Exists(shapepath + shp)) + File.Delete(shapepath + shp); + Assert.IsFalse(File.Exists(shapepath + shp)); + if (File.Exists(shapepath + shx)) + File.Delete(shapepath + shx); + Assert.IsFalse(File.Exists(shapepath + shx)); + if (File.Exists(shapepath + dbf)) + File.Delete(shapepath + dbf); + Assert.IsFalse(File.Exists(shapepath + dbf)); + + features.SaveToShapefile(shapepath); + + Assert.IsTrue(File.Exists(shapepath + shp)); + Assert.IsTrue(File.Exists(shapepath + shx)); + Assert.IsTrue(File.Exists(shapepath + dbf)); + } + + [Test] + public void CheckGraphBuilder2ExceptionUsingARepeatedGeometry() + { + Assert.Catch(() => + { + var builder = new GraphBuilder2(); + Assert.IsTrue(builder.Add(a)); + Assert.IsFalse(builder.Add(a)); + Assert.IsFalse(builder.Add(a, a)); + builder.Initialize(); + }); + } + + [Test] + public void CheckGraphBuilder2ExceptionUsingDifferentFactories() + { + Assert.Catch(() => + { + var builder = new GraphBuilder2(); + Assert.IsTrue(builder.Add(a)); + Assert.IsTrue(builder.Add(b, c)); + Assert.IsTrue(builder.Add(d)); + builder.Add(GeometryFactory.Default.CreateLineString(new Coordinate[] + { + new Coordinate(0, 0), + new Coordinate(50, 50), + })); + }); + } + + [Test] + public void CheckGraphBuilder2ExceptionUsingDoubleInitialization() + { + var builder = new GraphBuilder2(); + builder.Add(a); + builder.Add(b, c); + builder.Add(d); + builder.Add(e); + builder.Initialize(); + builder.Initialize(); + } + + [Test] + public void CheckGraphBuilder2ExceptionUsingNoGeometries() + { + Assert.Catch(() => + { + var builder = new GraphBuilder2(); + builder.Initialize(); + }); + } + + [Test] + public void CheckGraphBuilder2ExceptionUsingOneGeometry() + { + Assert.Catch(() => + { + var builder = new GraphBuilder2(); + Assert.IsTrue(builder.Add(a)); + builder.Initialize(); + }); + } + + [Test] + public void TestBidirectionalGraphBuilder2WithSampleGeometries() + { + var builder = new GraphBuilder2(true); + builder.Add(a); + builder.Add(b, c); + builder.Add(d); + builder.Add(e); + builder.Initialize(); + + var path = builder.Perform(start.Coordinate, end.Coordinate); + Assert.IsNotNull(path); + Assert.AreEqual(result, path); + + var revpath = builder.Perform(end, start); + Assert.IsNotNull(revpath); + Assert.AreEqual(revresult, revpath); + } + + [Test] + public void TestGraphBuilder2WithSampleGeometries() + { + var builder = new GraphBuilder2(); + builder.Add(a); + builder.Add(b, c); + builder.Add(d); + builder.Add(e); + builder.Initialize(); + + var path = builder.Perform(start, end); + Assert.IsNotNull(path); + Assert.AreEqual(result, path); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/NormalizeTest.cs b/test/NetTopologySuite.IO.Esri.Test/Various/NormalizeTest.cs new file mode 100644 index 0000000..8e27cab --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/NormalizeTest.cs @@ -0,0 +1,78 @@ +using NetTopologySuite.Geometries; +using NUnit.Framework; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + /// + /// + /// + [TestFixture] + public class NormalizeTest + { + protected GeometryFactory Factory { get; private set; } + + protected WKTReader Reader { get; private set; } + + private Polygon _polygon = null; + private LinearRing _shell = null; + private LinearRing _hole = null; + + /// + /// Initializes a new instance of the class. + /// + public NormalizeTest() : base() { } + + /// + /// Method called prior to every test in this fixture + /// + [SetUp] + public void Init() + { + this.Factory = new GeometryFactory(); + this.Reader = new WKTReader(); + + _shell = Factory.CreateLinearRing(new Coordinate[] { new Coordinate(100,100), + new Coordinate(200,100), + new Coordinate(200,200), + new Coordinate(100,200), + new Coordinate(100,100), }); + // NOTE: Hole is created with not correct order for holes + _hole = Factory.CreateLinearRing(new Coordinate[] { new Coordinate(120,120), + new Coordinate(180,120), + new Coordinate(180,180), + new Coordinate(120,180), + new Coordinate(120,120), }); + _polygon = Factory.CreatePolygon(_shell, new LinearRing[] { _hole, }); + } + + /// + /// + /// + [Test] + public void NotNormalizedGDBOperation() + { + //byte[] bytes = new GDBWriter().Write(_polygon); + //var test = new GDBReader().Read(bytes); + + //This is no longer true + //Assert.IsNull(test); + //Assert.IsTrue(test.IsEmpty); + //Assert.IsTrue(test is IPolygonal); + } + + /// + /// + /// + [Test] + public void NormalizedGDBOperation() + { + _polygon.Normalize(); + + //byte[] bytes = new GDBWriter().Write(_polygon); + //var test = new GDBReader().Read(bytes); + + //Assert.IsNotNull(test); + //Assert.IsTrue(_polygon.EqualsExact(test)); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/PathFinder.cs b/test/NetTopologySuite.IO.Esri.Test/Various/PathFinder.cs new file mode 100644 index 0000000..9b78b33 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/PathFinder.cs @@ -0,0 +1,291 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Operation.Linemerge; +using QuickGraph; +using QuickGraph.Algorithms.Observers; +using QuickGraph.Algorithms.ShortestPath; +using System; +using System.Collections.Generic; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + /// + /// A class that manages shortest path computation. + /// + public class PathFinder + { + /// + /// A delegate that defines how to calculate the weight + /// of a line. + /// + /// A line. + /// The weight of the line. + public delegate double ComputeWeightDelegate(LineString line); + + private static readonly ComputeWeightDelegate DefaultComputer = line => line.Length; + + private readonly bool bidirectional; + + private GeometryFactory factory; + private readonly List strings; + + private readonly AdjacencyGraph> graph; + private IDictionary, double> consts; + + /// + /// Initializes a new instance of the class. + /// + /// + /// Specify if the graph must be build using both edges directions. + /// + public PathFinder(bool bidirectional) + { + this.bidirectional = bidirectional; + + factory = null; + strings = new List(); + graph = new AdjacencyGraph>(true); + } + + /// + /// Initializes a new instance of the class, + /// using a directed graph. + /// + public PathFinder() : this(false) { } + + /// + /// Adds each line to the graph structure. + /// + /// + /// + /// true if all lines + /// are added, false otherwise. + /// + /// + /// If geometries don't have the same factory. + /// + public bool Add(params LineString[] lines) + { + bool result = true; + foreach (var line in lines) + { + var newfactory = line.Factory; + if (factory == null) + factory = newfactory; + else if (!newfactory.PrecisionModel.Equals(factory.PrecisionModel)) + throw new TopologyException("all geometries must have the same precision model"); + + bool lineFound = strings.Contains(line); + result &= !lineFound; + if (!lineFound) + strings.Add(line); + else continue; // Skip vertex check because line is already present + + var coordinates = line.Coordinates; + int start = 0; + int end = coordinates.GetUpperBound(0); + AddCoordinateToGraph(coordinates[start]); // StartPoint + AddCoordinateToGraph(coordinates[end]); // EndPoint + } + return result; + } + + /// + /// + /// + /// + private void AddCoordinateToGraph(Coordinate coord) + { + if (!graph.ContainsVertex(coord)) + graph.AddVertex(coord); + } + + /// + /// Initialize the algorithm using the default + /// weight computer, + /// that uses string length + /// as weight value. + /// + /// + /// If you've don't added two or more geometries to the builder. + /// + /// + /// If builder is already initialized. + /// + public void Initialize() + { + BuildEdges(DefaultComputer); + } + + /// + /// Initialize the algorithm using the specified + /// weight computer + /// + /// + /// A function that computes the weight + /// of any edge of the graph. + /// + /// + /// If you've don't added two or more geometries to the builder. + /// + /// + /// If builder is already initialized. + /// + public void Initialize(ComputeWeightDelegate computer) + { + BuildEdges(computer); + } + + /// + /// + /// + /// + private void BuildEdges(ComputeWeightDelegate computer) + { + if (strings.Count < 2) + throw new TopologyException("you must specify two or more geometries to build a graph"); + + // Counts the number of edges in the set we pass to this method. + int numberOfEdgesInLines = strings.Count * 2; + + // Double values because we use also reversed edges... + if (bidirectional) + numberOfEdgesInLines *= 2; + + consts = new Dictionary, double>(numberOfEdgesInLines); + + foreach (var line in strings) + { + // Prepare a segment + var coordinates = line.Coordinates; + int start = 0; + int end = coordinates.GetUpperBound(0); + var src = coordinates[start]; + var dst = coordinates[end]; + + // Here we calculate the weight of the edge + double weight = computer(line); + + // Add the edge + IEdge localEdge = new Edge(src, dst); + graph.AddEdge(localEdge); + consts.Add(localEdge, weight); + + if (bidirectional) + { + // Add the reversed edge + IEdge localEdgeRev = new Edge(dst, src); + graph.AddEdge(localEdgeRev); + consts.Add(localEdgeRev, weight); + } + } + } + + /// + /// Carries out the shortest path anlayis between the two + /// nodes + /// passed as variables and returns an + /// giveing the shortest path. + /// + /// The source geom + /// The destination geom + /// A or a + /// with all the elements of the graph that composes the shortest path, + /// sequenced using a . + /// + public Geometry Find(Geometry source, Geometry destination) + { + return Find(source.Coordinate, destination.Coordinate); + } + + /// + /// Carries out the shortest path between the two nodes + /// ids passed as variables and returns an + /// giveing the shortest path. + /// + /// The source node + /// The destination node + /// A or a + /// with all the elements of the graph that composes the shortest path, + /// sequenced using a . + /// + public Geometry Find(Coordinate source, Coordinate destination) + { + if (!graph.ContainsVertex(source)) + throw new ArgumentException("key not found in the graph", "source"); + if (!graph.ContainsVertex(destination)) + throw new ArgumentException("key not found in the graph", "destination"); + + // Build algorithm + var dijkstra = + new DijkstraShortestPathAlgorithm>(graph, edge => consts[edge]); + + // Attach a Distance observer to give us the distances between edges + var distanceObserver = + new VertexDistanceRecorderObserver>(edge => consts[edge]); + distanceObserver.Attach(dijkstra); + + // Attach a Vertex Predecessor Recorder Observer to give us the paths + var predecessorObserver = + new VertexPredecessorRecorderObserver>(); + predecessorObserver.Attach(dijkstra); + + // Run the algorithm with A set to be the source + dijkstra.Compute(source); + + // Get the path computed to the destination. + IEnumerable> path; + bool result = predecessorObserver.TryGetPath(destination, out path); + + // Then we need to turn that into a geomery. + return result ? BuildString(new List>(path)) : null; + } + + /// + /// Takes the path returned from QuickGraph library and uses the + /// list of coordinates to reconstruct the path into a geometric + /// "shape" + /// + /// Shortest path from the QucikGraph Library + /// + /// A or a + /// with all the elements of the graph that composes the shortest path, + /// sequenced using a . + /// + private Geometry BuildString(ICollection> paths) + { + // if the path has no links then return a null reference + if (paths.Count < 1) + return null; + + var collector = new LineSequencer(); + foreach (var path in paths) + { + var src = path.Source; + var dst = path.Target; + foreach (var str in strings) + { + if (IsBound(str, src) && IsBound(str, dst)) + collector.Add(str); + } + } + + var sequence = collector.GetSequencedLineStrings(); + return sequence; + } + + /// + /// + /// + /// + /// + /// + private static bool IsBound(Geometry str, Coordinate src) + { + var coordinates = str.Coordinates; + int start = 0; + int end = str.Coordinates.GetUpperBound(0); + return coordinates[start].Equals(src) || + coordinates[end].Equals(src); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/PathFinderTest.cs b/test/NetTopologySuite.IO.Esri.Test/Various/PathFinderTest.cs new file mode 100644 index 0000000..63e7beb --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/PathFinderTest.cs @@ -0,0 +1,182 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.Features; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using NetTopologySuite.IO.Shapefile; +using System.Linq; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + [TestFixture] + public class PathFinderTest + { + private const string shp = ".shp"; + private const string shx = ".shx"; + private const string dbf = ".dbf"; + + private GeometryFactory factory; + + [SetUp] + public void FixtureSetup() + { + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + + factory = GeometryFactory.Fixed; + } + + [Ignore("strade.shp not present")] + [Test] + public void BuildStradeFixed() + { + string path = "strade" + shp; + Assert.IsTrue(File.Exists(path)); + + var features = ShapefileReader.ReadAll(path); + Assert.AreEqual(703, features.Length); + + string shapepath = "strade_fixed"; + if (File.Exists(shapepath + shp)) + File.Delete(shapepath + shp); + Assert.IsFalse(File.Exists(shapepath + shp)); + if (File.Exists(shapepath + shx)) + File.Delete(shapepath + shx); + Assert.IsFalse(File.Exists(shapepath + shx)); + if (File.Exists(shapepath + dbf)) + File.Delete(shapepath + dbf); + Assert.IsFalse(File.Exists(shapepath + dbf)); + + features.SaveToShapefile(shapepath); + + Assert.IsTrue(File.Exists(shapepath + shp)); + Assert.IsTrue(File.Exists(shapepath + shx)); + Assert.IsTrue(File.Exists(shapepath + dbf)); + } + + private Geometry LoadGraphResult() + { + string path = "graphresult.shp"; + Assert.IsTrue(Path.GetExtension(path) == shp); + + var coll = ShapefileReader.ReadAllGeometries(path).ToGeometryCollection(); + Assert.AreEqual(1, coll.Count); + + var geom = coll.GetGeometryN(0); + Assert.IsInstanceOf(typeof(MultiLineString), geom); + var str = geom.GetGeometryN(0); + Assert.IsInstanceOf(typeof(LineString), str); + return str; + } + + private void SaveGraphResult(Geometry path) + { + if (path == null) + throw new ArgumentNullException("path"); + + string shapepath = "graphresult"; + if (File.Exists(shapepath + shp)) + File.Delete(shapepath + shp); + Assert.IsFalse(File.Exists(shapepath + shp)); + if (File.Exists(shapepath + shx)) + File.Delete(shapepath + shx); + Assert.IsFalse(File.Exists(shapepath + shx)); + if (File.Exists(shapepath + dbf)) + File.Delete(shapepath + dbf); + Assert.IsFalse(File.Exists(shapepath + dbf)); + + string field1 = "OBJECTID"; + var feature = new Feature(path, new AttributesTable()); + feature.Attributes.Add(field1, 0); + + var features = new List(new[] { feature, }); + features.SaveToShapefile(shapepath); + + Assert.IsTrue(File.Exists(shapepath + shp)); + Assert.IsTrue(File.Exists(shapepath + shx)); + Assert.IsTrue(File.Exists(shapepath + dbf)); + } + + [Test] + [Ignore("graph.shp is not present")] + public void BuildGraphFromCompleteGraphShapefile() + { + string shapepath = "graph.shp"; + int count = 1179; + + Assert.IsTrue(File.Exists(shapepath), string.Format("File not found: '{0}'", shapepath)); + var edges = ShapefileReader.ReadAllGeometries(shapepath).ToGeometryCollection(); + Assert.IsNotNull(edges); + Assert.IsInstanceOf(typeof(GeometryCollection), edges); + Assert.AreEqual(count, edges.NumGeometries); + + // Insert arbitrary userdata + for (int i = 0; i < count; i++) + { + var g = edges.GetGeometryN(i) as MultiLineString; + Assert.IsNotNull(g); + var ls = g.GetGeometryN(0) as LineString; + Assert.IsNotNull(ls); + + Assert.IsNull(ls.UserData); + ls.UserData = i; + Assert.IsNotNull(ls.UserData); + } + + var startls = edges.GetGeometryN(515).GetGeometryN(0) as LineString; + Assert.IsNotNull(startls); + var startPoint = startls.EndPoint; + Assert.AreEqual(2317300d, startPoint.X); + Assert.AreEqual(4843961d, startPoint.Y); + + var endls = edges.GetGeometryN(141).GetGeometryN(0) as LineString; ; + Assert.IsNotNull(endls); + var endPoint = endls.StartPoint; + Assert.AreEqual(2322739d, endPoint.X); + Assert.AreEqual(4844539d, endPoint.Y); + + var finder = new PathFinder(true); + foreach (MultiLineString mlstr in edges.Geometries) + { + Assert.AreEqual(1, mlstr.NumGeometries); + var str = mlstr.GetGeometryN(0) as LineString; + Assert.IsNotNull(str); + Assert.IsNotNull(str.UserData); + Assert.IsTrue(finder.Add(str)); + } + finder.Initialize(); + + int expectedResultCount = 8; + var path = finder.Find(startPoint, endPoint); + Assert.IsNotNull(path); + Assert.IsInstanceOf(typeof(MultiLineString), path); + var strings = (MultiLineString)path; + Assert.AreEqual(expectedResultCount, strings.NumGeometries); + foreach (var g in strings.Geometries) + { + Assert.IsNotNull(g.UserData); + Console.WriteLine("{0} : {1}", g.UserData, g); + } + + var reversedPath = finder.Find(endPoint, startPoint); + Assert.IsNotNull(reversedPath); + Assert.IsInstanceOf(typeof(MultiLineString), reversedPath); + + var reversedStrings = (MultiLineString)reversedPath; + Assert.AreEqual(expectedResultCount, reversedStrings.NumGeometries); + foreach (var g in reversedStrings.Geometries) + { + Assert.IsNotNull(g.UserData); + Console.WriteLine("{0} : {1}", g.UserData, g); + } + + for (int i = 0; i < expectedResultCount; i++) + { + var item = strings.GetGeometryN(i); + var itemReversed = strings.GetGeometryN(expectedResultCount - 1 - i); + Assert.AreNotEqual(item.UserData, itemReversed.UserData); + Assert.AreNotEqual(item, itemReversed); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/Various/UnionAggregateTest.cs b/test/NetTopologySuite.IO.Esri.Test/Various/UnionAggregateTest.cs new file mode 100644 index 0000000..0e34a98 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/Various/UnionAggregateTest.cs @@ -0,0 +1,179 @@ +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.Operation.Union; +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; + +namespace NetTopologySuite.IO.ShapeFile.Test.Various +{ + /// + /// + /// + [TestFixture] + public class UnionAggregateTest + { + /// + /// + /// + [SetUp] + public void SetUp() + { + // Set current dir to shapefiles dir + Environment.CurrentDirectory = CommonHelpers.TestShapefilesDirectory; + } + + /// + /// + /// + [Test()] + [Ignore("sa_region.shp not present")] + public void PerformUnionAggregateTest1() + { + Assert.Catch(() => + { + Assert.IsNotNull(CheckShapefile("sa_region")); + }); + } + + /// + /// + /// + [Test] + public void PerformUnionAggregateTest2() + { + Assert.IsNotNull(CheckShapefile("CA_Cable_region")); + } + + /// + /// + /// + [Test] + public void PerformUnionAggregateTest3() + { + Assert.IsNotNull(CheckShapefile("US_DMA_region.shp")); + } + + /// + /// + /// + /// + /// + private static Geometry CheckShapefile(string fileName) + { + //int count = 0; + var geoms = new List(); + using (var shp = ShapefileReader.Open(fileName)) + { + foreach (var feature in shp) + { + var current = feature.Geometry; + if (!current.IsValid) + { + Debug.WriteLine("Imvalid geometry found: " + current); + continue; + } + geoms.Add(current); + //if (result == null) + // result = current; + //else result = result.Union(current); + //Debug.WriteLine("Iteration => " + ++count); + } + } + var result = UnaryUnionOp.Union(geoms); + var write = new WKTWriter { Formatted = true, MaxCoordinatesPerLine = 3, Tab = 2 }; + Debug.WriteLine("Operation result: " + write.Write(result)); + return result; + } + + /// + /// + /// + const string s1 = "MULTIPOLYGON(" + + "((267225 195936,267063 195904,266895 195872,266825 195858,266822 195891,266850 196044,266934 196203,267047 196249,267352 196374,267281 196302,267255 196275,267222 196244,267166 196191,267160 196153,267157 196139,267196 196136,267225 195936))," + + "((265704 193056,265703 193055,265692 193057,265678 193060,265663 193056,265659 193055,265655 193053,265653 193053,265651 193052,265648 193052,265646 193052,265631 193058,265616 193064,265612 193066,265609 193068,265605 193071,265603 193076,265595 193089,265596 193103,265597 193107,265623 193128,265631 193130,265630 193130,265609 193142,265608 193153,265608 193157,265607 193161,265607 193163,265606 193164,265603 193169,265619 193172,265623 193173,265619 193183,265618 193185,265618 193187,265613 193209,265618 193209,265622 193209,265620 193220,265626 193220,265626 193230,265617 193230,265616 193235,265616 193237,265615 193238,265604 193252,265606 193257,265607 193259,265607 193262,265607 193264,265607 193266,265607 193270,265607 193274,265607 193279,265606 193284,265605 193289,265602 193294,265595 193312,265598 193318,265600 193322,265601 193326,265602 193330,265602 193334,265602 193336,265602 193337,265599 193344,265610 193360,265611 193361,265612 193364,265613 193369,265615 193375,265615 193377,265615 193380,265613 193393,265609 193392,265607 193392,265605 193393,265587 193403,265588 193412,265589 193419,265610 193422,265629 193424,265631 193418,265633 193409,265637 193402,265642 193392,265659 193409,265661 193410,265662 193414,265662 193416,265663 193418,265664 193419,265664 193420,265665 193422,265665 193424,265666 193426,265666 193428,265665 193452,265657 193455,265652 193457,265640 193441,265636 193435,265623 193444,265642 193493,265645 193490,265649 193487,265665 193513,265673 193526,265681 193532,265683 193534,265684 193536,265685 193540,265686 193544,265687 193545,265687 193546,265690 193576,265682 193584,265655 193612,265667 193624,265668 193624,265670 193627,265679 193624,265683 193623,265693 193623,265692 193632,265692 193633,265693 193635,265695 193642,265693 193642,265692 193643,265691 193644,265690 193644,265689 193644,265679 193645,265679 193655,265678 193655,265677 193673,265676 193682,265670 193684,265659 193688,265654 193700,265652 193704,265631 193701,265629 193701,265628 193703,265619 193718,265617 193718,265616 193709,265612 193683,265614 193678,265609 193678,265571 193681,265551 193657,265495 193716,265492 193726,265481 193765,265481 193774,265480 193846,265479 193902,265478 193936,265526 193966,265563 193990,265548 194006,265547 194006,265546 194005,265544 194004,265543 194003,265542 194003,265541 194002,265540 194002,265540 194003,265521 194040,265525 194046,265527 194049,265527 194050,265528 194059,265528 194061,265543 194059,265544 194059,265544 194060,265549 194064,265554 194068,265555 194070,265557 194073,265558 194073,265558 194074,265559 194077,265561 194079,265564 194084,265567 194088,265568 194090,265570 194090,265581 194093,265569 194117,265567 194120,265567 194124,265567 194125,265568 194126,265569 194127,265569 194128,265570 194129,265571 194130,265572 194131,265573 194132,265574 194133,265575 194134,265576 194134,265577 194135,265596 194153,265583 194158,265540 194205,265530 194216,265473 194277,265462 194289,265461 194290,265451 194299,265432 194314,265410 194332,265394 194348,265372 194370,265371 194369,265359 194355,265362 194353,265362 194352,265367 194342,265342 194356,265341 194357,265340 194358,265339 194358,265338 194359,265337 194360,265336 194361,265335 194362,265335 194363,265334 194363,265333 194364,265332 194365,265331 194366,265330 194367,265325 194347,265308 194363,265302 194369,265326 194391,265308 194398,265306 194400,265304 194401,265303 194402,265302 194402,265301 194402,265300 194402,265294 194402,265288 194404,265286 194404,265286 194405,265285 194406,265284 194407,265283 194408,265282 194409,265282 194410,265281 194411,265280 194412,265279 194413,265278 194414,265277 194415,265276 194416,265275 194418,265275 194419,265274 194420,265273 194421,265272 194422,265272 194423,265271 194424,265270 194425,265269 194426,265268 194428,265268 194429,265267 194430,265266 194431,265266 194432,265265 194433,265264 194434,265263 194435,265262 194435,265261 194436,265260 194438,265258 194438,265253 194438,265254 194450,265254 194452,265253 194453,265252 194454,265251 194455,265243 194464,265234 194454,265238 194471,265238 194473,265237 194473,265235 194475,265234 194476,265232 194477,265231 194478,265230 194478,265229 194478,265228 194477,265227 194477,265226 194476,265225 194475,265224 194474,265224 194473,265223 194472,265222 194472,265222 194471,265221 194470,265220 194469,265217 194466,265216 194465,265166 194437,265165 194447,265164 194476,265158 194508,265158 194511,265173 194549,265176 194555,265199 194612,265205 194606,265214 194603,265238 194592,265244 194601,265246 194605,265257 194601,265263 194598,265265 194598,265266 194599,265268 194601,265270 194602,265272 194604,265274 194604,265278 194605,265281 194605,265282 194605,265283 194605,265292 194603,265290 194595,265284 194577,265320 194599,265336 194580,265351 194590,265302 194548,265300 194546,265298 194545,265295 194542,265295 194541,265298 194536,265285 194522,265285 194521,265284 194520,265283 194519,265282 194518,265281 194517,265280 194516,265279 194514,265279 194512,265247 194500,265262 194484,265277 194470,265278 194469,265287 194460,265304 194444,265306 194442,265325 194424,265330 194429,265370 194431,265371 194430,265372 194429,265374 194428,265376 194427,265377 194426,265378 194425,265379 194425,265380 194424,265381 194423,265382 194423,265383 194422,265384 194421,265385 194420,265386 194419,265387 194419,265388 194418,265389 194417,265390 194417,265390 194416,265391 194415,265392 194415,265393 194414,265395 194413,265396 194412,265398 194411,265399 194409,265401 194408,265402 194407,265403 194406,265404 194405,265405 194405,265406 194404,265407 194403,265408 194402,265409 194402,265410 194401,265411 194400,265412 194399,265413 194398,265414 194398,265414 194397,265416 194396,265417 194396,265418 194395,265419 194394,265420 194393,265421 194393,265422 194392,265423 194391,265424 194390,265425 194390,265426 194389,265427 194388,265428 194387,265429 194387,265430 194386,265431 194385,265432 194384,265433 194383,265434 194383,265435 194382,265436 194381,265437 194381,265438 194380,265439 194379,265440 194379,265441 194378,265442 194377,265443 194376,265444 194376,265445 194375,265446 194374,265447 194373,265448 194373,265448 194372,265449 194371,265450 194370,265451 194370,265451 194368,265453 194363,265466 194371,265467 194372,265467 194373,265468 194374,265469 194375,265469 194376,265470 194377,265471 194378,265471 194379,265471 194380,265469 194381,265469 194382,265468 194382,265466 194384,265462 194386,265425 194414,265430 194411,265430 194410,265428 194412,265433 194418,265448 194406,265463 194421,265464 194421,265465 194421,265466 194421,265467 194422,265487 194442,265507 194463,265548 194465,265548 194473,265578 194475,265578 194477,265579 194477,265602 194498,265595 194503,265594 194505,265593 194507,265592 194510,265590 194513,265590 194514,265589 194515,265589 194516,265589 194517,265588 194518,265587 194520,265587 194521,265586 194523,265585 194525,265585 194526,265582 194536,265579 194545,265578 194547,265577 194548,265576 194550,265575 194552,265574 194553,265573 194555,265572 194556,265571 194557,265570 194558,265570 194560,265569 194561,265569 194562,265568 194563,265568 194565,265567 194566,265566 194569,265565 194572,265565 194574,265564 194575,265562 194579,265560 194583,265559 194585,265557 194588,265557 194590,265556 194591,265555 194592,265555 194593,265554 194594,265553 194596,265553 194597,265552 194598,265552 194599,265551 194601,265551 194602,265550 194603,265549 194605,265548 194606,265548 194607,265548 194609,265547 194623,265538 194624,265508 194628,265508 194629,265501 194629,265461 194633,265456 194639,265458 194655,265462 194682,265463 194689,265491 194705,265527 194725,265534 194729,265561 194745,265575 194752,265589 194755,265593 194755,265598 194755,265603 194755,265607 194752,265630 194734,265651 194712,265652 194710,265654 194708,265656 194707,265657 194705,265658 194704,265658 194703,265659 194702,265659 194701,265659 194700,265659 194698,265660 194697,265660 194696,265663 194693,265666 194689,265666 194688,265666 194686,265666 194683,265666 194678,265666 194677,265667 194676,265671 194671,265675 194667,265678 194663,265682 194660,265689 194653,265698 194650,265714 194645,265700 194593,265699 194589,265701 194586,265704 194583,265706 194580,265711 194573,265716 194567,265724 194559,265730 194551,265734 194547,265737 194543,265739 194539,265742 194535,265747 194528,265749 194519,265752 194507,265754 194495,265755 194490,265757 194486,265769 194467,265779 194448,265780 194447,265780 194445,265780 194444,265780 194443,265780 194442,265780 194441,265779 194440,265779 194439,265779 194437,265779 194436,265780 194435,265780 194434,265779 194433,265780 194431,265780 194430,265779 194429,265779 194428,265779 194427,265779 194426,265779 194424,265779 194423,265779 194422,265778 194421,265778 194419,265777 194418,265777 194417,265777 194416,265777 194414,265777 194413,265777 194411,265777 194410,265777 194409,265778 194408,265784 194399,265791 194390,265791 194389,265791 194388,265790 194387,265790 194386,265790 194385,265789 194384,265789 194383,265789 194381,265788 194380,265788 194379,265788 194378,265787 194376,265787 194375,265787 194374,265786 194373,265786 194372,265786 194371,265786 194370,265785 194364,265785 194358,265785 194357,265785 194356,265784 194355,265784 194353,265784 194352,265783 194351,265783 194350,265783 194348,265782 194347,265782 194346,265782 194341,265783 194336,265783 194335,265783 194334,265783 194332,265783 194331,265783 194330,265784 194328,265784 194327,265785 194326,265785 194325,265786 194323,265787 194321,265788 194319,265788 194318,265787 194318,265785 194317,265785 194318,265775 194318,265775 194313,265768 194310,265748 194302,265754 194293,265761 194282,265765 194272,265773 194252,265780 194235,265781 194231,265780 194230,265778 194225,265775 194219,265775 194218,265775 194216,265774 194215,265774 194213,265770 194202,265767 194190,265767 194189,265767 194187,265768 194181,265802 194173,265813 194153,265814 194148,265834 194139,265836 194138,265838 194136,265840 194135,265841 194135,265842 194134,265843 194133,265845 194132,265847 194130,265848 194130,265849 194129,265850 194129,265851 194128,265852 194127,265853 194127,265854 194126,265857 194121,265858 194115,265859 194113,265860 194110,265860 194108,265862 194107,265876 194093,265869 194090,265868 194089,265868 194088,265867 194087,265867 194085,265866 194084,265866 194083,265866 194082,265865 194081,265865 194079,265865 194078,265864 194077,265864 194076,265864 194075,265863 194073,265863 194071,265862 194069,265862 194068,265861 194068,265849 194059,265853 194017,265853 194016,265852 194014,265852 194013,265852 194011,265851 194010,265851 194009,265851 194008,265850 194007,265849 194004,265848 194002,265848 194000,265847 193997,265845 193992,265845 193991,265845 193989,265853 193957,265844 193964,265806 193997,265780 194074,265743 193975,265748 193972,265748 193971,265746 193968,265740 193965,265731 193960,265727 193957,265732 193952,265733 193950,265734 193948,265735 193947,265734 193946,265734 193944,265734 193943,265734 193942,265734 193940,265734 193939,265734 193938,265734 193936,265734 193935,265734 193934,265733 193932,265733 193930,265732 193928,265726 193922,265732 193902,265732 193900,265732 193897,265730 193879,265723 193879,265716 193879,265714 193873,265744 193875,265749 193874,265715 193833,265717 193832,265717 193824,265718 193817,265718 193816,265763 193761,265764 193762,265767 193773,265768 193780,265775 193785,265783 193791,265773 193814,265770 193821,265768 193829,265766 193839,265762 193848,265759 193856,265758 193862,265758 193872,265763 193881,265768 193889,265781 193866,265790 193850,265794 193845,265840 193774,265837 193806,265837 193809,265831 193827,265860 193838,265882 193774,265905 193718,266059 193881,266139 193966,266196 193861,266170 193795,266180 193724,266194 193619,266209 193557,266221 193508,266225 193492,266224 193475,266222 193325,266223 193318,266225 193297,266227 193280,266228 193266,266234 193210,266137 193221,266121 193247,266068 193233,266066 193191,266066 193188,266064 193152,266039 193057,266035 193043,266025 192991,266019 192991,266019 192981,266023 192981,266021 192972,265989 192940,266005 192938,266006 192953,266064 192989,266071 192986,266087 192979,266104 192977,266228 192963,266223 192995,266219 193016,266270 193017,266400 192817,266413 192797,266561 192570,266615 192536,266620 192553,266632 192599,266607 192635,266547 192722,266661 192907,266693 192959,266872 192896,266899 192887,266926 192889,266972 192892,266968 192741,266967 192695,266871 192667,266737 192629,266764 192622,266727 192409,266717 192352,266808 192287,266885 192231,266873 192268,266868 192283,266894 192340,266987 192540,267003 192550,267304 192739,267285 192641,267270 192566,266933 192196,266928 192191,266906 192166,266889 192142,266873 192118,266813 192175,266797 192190,266763 192137,266358 192253,266369 192237,266370 192235,266367 192235,266296 192224,266281 192203,266023 191829,266016 191826,266005 191816,266002 191816,265998 191816,265991 191822,265991 191829,265991 191834,265989 191839,265987 191844,265983 191847,265980 191850,265976 191851,265974 191852,265969 191850,265969 191842,265967 191837,265966 191834,265964 191831,265960 191827,265958 191826,265950 191829,265949 191862,265932 191858,265932 191853,265931 191849,265929 191845,265925 191841,265922 191838,265899 191861,265888 191860,265886 191858,265883 191854,265881 191850,265880 191847,265879 191840,265866 191833,265859 191846,265852 191842,265846 191839,265840 191837,265838 191837,265837 191839,265835 191844,265834 191850,265835 191858,265834 191859,265831 191862,265828 191864,265825 191864,265821 191864,265818 191862,265802 191848,265800 191847,265796 191847,265790 191847,265785 191849,265768 191855,265765 191856,265761 191855,265755 191852,265742 191848,265739 191834,265725 191801,265720 191793,265715 191789,265709 191785,265705 191783,265696 191780,265684 191778,265681 191779,265680 191780,265679 191782,265679 191784,265683 191799,265681 191831,265677 191841,265663 191836,265652 191833,265648 191836,265643 191839,265638 191840,265632 191839,265631 191838,265629 191821,265626 191817,265624 191818,265623 191818,265620 191825,265618 191834,265615 191841,265612 191848,265608 191854,265603 191859,265597 191864,265592 191868,265589 191869,265586 191869,265579 191868,265575 191868,265567 191865,265559 191865,265556 191865,265552 191867,265548 191870,265543 191876,265537 191874,265533 191873,265528 191873,265523 191874,265515 191877,265491 191878,265479 191881,265468 191886,265456 191883,265445 191877,265413 191877,265399 191875,265389 191874,265372 191875,265360 191874,265334 191870,265329 191869,265398 192004,265565 192332,265564 192333,265557 192337,265556 192341,265555 192343,265555 192344,265556 192345,265559 192363,265563 192381,265564 192384,265565 192386,265580 192409,265596 192429,265599 192432,265603 192434,265610 192436,265616 192438,265621 192440,265626 192442,265648 192448,265670 192455,265673 192456,265676 192457,265679 192458,265682 192460,265694 192468,265708 192475,265717 192479,265726 192483,265729 192484,265731 192485,265734 192487,265738 192488,265748 192491,265759 192494,265772 192498,265784 192504,265807 192515,265824 192531,265847 192551,265855 192574,265865 192601,265864 192627,265864 192659,265802 192646,265842 192760,265835 192794,265823 192853,265779 192863,265804 192879,265823 192892,265812 192890,265808 192890,265807 192890,265806 192891,265805 192892,265803 192900,265801 192908,265800 192916,265800 192924,265800 192927,265772 192935,265767 192936,265765 192936,265764 192931,265761 192923,265760 192923,265757 192924,265756 192923,265729 192905,265724 192909,265715 192914,265704 192914,265698 192914,265698 192916,265695 192916,265687 192942,265704 192951,265719 192954,265715 192957,265710 192960,265706 192962,265706 192974,265707 192976,265705 192978,265704 192979,265704 192981,265701 192987,265698 192994,265695 192994,265691 192993,265687 192994,265680 192994,265677 193008,265676 193010,265685 193012,265712 193020,265712 193017,265713 193015,265711 193012,265711 193010,265726 193011,265725 193038,265721 193041,265704 193056)," + + "(265681 194364,265681 194367,265671 194367,265671 194358,265671 194357,265681 194357,265681 194364)," + + "(265672 194259,265672 194252,265682 194252,265682 194261,265682 194262,265672 194262,265672 194259)," + + "(265660 194241,265669 194241,265669 194251,265659 194251,265659 194249,265659 194241,265660 194241)," + + "(265730 193180,265761 193187,265770 193167,265773 193196,265778 193238,265780 193284,265780 193290,265781 193296,265781 193300,265781 193305,265781 193310,265781 193315,265737 193357,265704 193365,265692 193357,265689 193334,265698 193344,265699 193335,265701 193319,265703 193305,265718 193219,265723 193191,265728 193192,265730 193180)," + + "(265829 193249,265833 193249,265833 193259,265828 193259,265823 193259,265823 193250,265823 193249,265829 193249)," + + "(265892 193510,265906 193514,266004 193467,265951 193602,265890 193576,265899 193549,265892 193510)," + + "(266286 192856,266219 192756,266168 192757,266168 192748,266169 192722,266220 192689,266281 192648,266286 192670,266318 192815,266290 192850,266286 192856)," + + "(266044 192606,266037 192606,266037 192596,266047 192596,266047 192603,266047 192606,266044 192606)," + + "(266039 192790,266039 192800,266029 192800,266029 192790,266037 192790,266039 192790)," + + "(265749 192996,265749 192986,265759 192986,265759 192996,265749 192996)," + + "(265848 192834,265848 192824,265858 192824,265858 192834,265848 192834)," + + "(265978 192980,265978 192970,265988 192970,265988 192980,265978 192980)," + + "(266088 192809,266088 192813,266080 192813,266078 192813,266078 192803,266088 192803,266088 192809)," + + "(265981 192800,265981 192790,265991 192790,265991 192800,265981 192800)," + + "(265951 192844,265951 192834,265961 192834,265961 192844,265951 192844)," + + "(265917 193026,265917 193016,265927 193016,265927 193026,265917 193026)," + + "(265926 193055,265926 193045,265936 193045,265936 193055,265926 193055)," + + "(265966 192746,265966 192736,265976 192736,265976 192746,265966 192746)," + + "(266046 192708,266046 192698,266056 192698,266056 192708,266046 192708)," + + "(265692 193744,265687 193751,265684 193755,265682 193756,265667 193763,265635 193732,265630 193728,265650 193718,265652 193717,265662 193716,265673 193718,265676 193718,265679 193718,265681 193718,265682 193719,265683 193723,265687 193723,265687 193733,265692 193744)," + + "(265611 193820,265611 193810,265621 193810,265621 193820,265611 193820)," + + "(265731 193735,265731 193725,265741 193725,265741 193735,265731 193735)," + + "(265708 193562,265708 193552,265718 193552,265718 193562,265708 193562)," + + "(265650 193477,265640 193477,265640 193467,265648 193467,265650 193467,265650 193477)," + + "(265680 193109,265680 193099,265690 193099,265690 193109,265680 193109)," + + "(265611 193335,265611 193325,265621 193325,265621 193335,265611 193335)," + + "(265610 194005,265610 193995,265620 193995,265620 194005,265610 194005)," + + "(265570 193944,265570 193934,265580 193934,265580 193944,265570 193944)," + + "(265643 193872,265643 193862,265653 193862,265653 193872,265643 193872)," + + "(265909 193141,265909 193131,265919 193131,265919 193141,265909 193141)," + + "(265800 193015,265800 193005,265810 193005,265810 193015,265800 193015)," + + "(265728 194212,265728 194202,265738 194202,265738 194212,265728 194212)," + + "(265691 194370,265691 194360,265701 194360,265701 194370,265691 194370))," + + "((265057 193097,265050 193096,265044 193093,265043 193093,265041 193093,265038 193093,265037 193093,265035 193093,265029 193092,265031 193093,265035 193094,265060 193099,265076 193103,265058 193097,265057 193097))," + + "((265246 193239,265266 193230,265268 193230,265279 193209,265282 193211,265281 193210,265290 193199,265273 193188,265269 193196,265260 193213,265249 193234,265246 193239))," + + "((265525 192957,265525 192962,265524 192965,265526 192968,265530 192975,265533 192983,265536 192990,265540 192993,265562 193014,265575 193011,265609 193004,265606 192991,265602 192978,265607 192966,265613 192953,265573 192946,265533 192939,265527 192954,265525 192957))," + + "((265345 192929,265348 192937,265349 192941,265371 192945,265372 192945,265373 192938,265374 192935,265374 192934,265364 192919,265363 192920,265345 192929)))"; + const string s2 = "POLYGON((265433 194418,265428 194412,265430 194410,265430 194411,265425 194414,265462 194386,265466 194384,265468 194382,265469 194382,265469 194381,265471 194380,265471 194379,265471 194378,265470 194377,265469 194376,265469 194375,265468 194374,265467 194373,265467 194372,265466 194371,265453 194363,265451 194368,265451 194370,265450 194370,265449 194371,265448 194372,265448 194373,265447 194373,265446 194374,265445 194375,265444 194376,265443 194376,265442 194377,265441 194378,265440 194379,265439 194379,265438 194380,265437 194381,265436 194381,265435 194382,265434 194383,265433 194383,265432 194384,265431 194385,265430 194386,265429 194387,265428 194387,265427 194388,265426 194389,265425 194390,265424 194390,265423 194391,265422 194392,265421 194393,265420 194393,265419 194394,265418 194395,265417 194396,265416 194396,265414 194397,265414 194398,265413 194398,265412 194399,265411 194400,265410 194401,265409 194402,265408 194402,265407 194403,265406 194404,265405 194405,265404 194405,265403 194406,265402 194407,265402 194407,265401 194408,265399 194409,265398 194411,265396 194412,265395 194413,265393 194414,265392 194415,265391 194415,265390 194416,265390 194417,265389 194417,265388 194418,265387 194419,265386 194419,265385 194420,265384 194421,265383 194422,265382 194423,265381 194423,265380 194424,265379 194425,265378 194425,265377 194426,265376 194427,265374 194428,265372 194429,265371 194430,265370 194431,265330 194429,265369 194467,265379 194477,265422 194481,265427 194484,265433 194488,265467 194515,265469 194508,265487 194442,265467 194422,265466 194421,265465 194421,265464 194421,265463 194421,265448 194406,265433 194418))"; + + [Test] + //[ExpectedException(typeof(TopologyException))] + public void FailedUnionTest() + { + var reader = new WKTReader(GeometryFactory.Fixed); + Assert.IsNotNull(reader); + + var g1 = reader.Read(s1); + Assert.IsNotNull(g1); + Assert.IsFalse(g1.IsValid); + g1 = g1.Buffer(0); + + var g2 = reader.Read(s2).Buffer(0d); + Assert.IsNotNull(g2); + + var result = g1.Union(g2); + Assert.IsNotNull(result); + Debug.WriteLine(result); + } + + /// + /// + /// + [Test] + public void FixedUnionTest() + { + string s1 = "MULTIPOLYGON(((267225 195936,267063 195904,266895 195872,266825 195858,266822 195891,266850 196044,266934 196203,267047 196249,267352 196374,267281 196302,267255 196275,267222 196244,267166 196191,267160 196153,267157 196139,267196 196136,267225 195936)),((265704 193056,265703 193055,265692 193057,265678 193060,265663 193056,265659 193055,265655 193053,265653 193053,265651 193052,265648 193052,265646 193052,265631 193058,265616 193064,265612 193066,265609 193068,265605 193071,265603 193076,265595 193089,265596 193103,265597 193107,265623 193128,265631 193130,265630 193130,265609 193142,265608 193153,265608 193157,265607 193161,265607 193163,265606 193164,265603 193169,265619 193172,265623 193173,265619 193183,265618 193185,265618 193187,265613 193209,265618 193209,265622 193209,265620 193220,265626 193220,265626 193230,265617 193230,265616 193235,265616 193237,265615 193238,265604 193252,265606 193257,265607 193259,265607 193262,265607 193264,265607 193266,265607 193270,265607 193274,265607 193279,265606 193284,265605 193289,265602 193294,265595 193312,265598 193318,265600 193322,265601 193326,265602 193330,265602 193334,265602 193336,265602 193337,265599 193344,265610 193360,265611 193361,265612 193364,265613 193369,265615 193375,265615 193377,265615 193380,265613 193393,265609 193392,265607 193392,265605 193393,265587 193403,265588 193412,265589 193419,265610 193422,265629 193424,265631 193418,265633 193409,265637 193402,265642 193392,265659 193409,265661 193410,265662 193414,265662 193416,265663 193418,265664 193419,265664 193420,265665 193422,265665 193424,265666 193426,265666 193428,265665 193452,265657 193455,265652 193457,265640 193441,265636 193435,265623 193444,265642 193493,265645 193490,265649 193487,265665 193513,265673 193526,265681 193532,265683 193534,265684 193536,265685 193540,265686 193544,265687 193545,265687 193546,265690 193576,265682 193584,265655 193612,265667 193624,265668 193624,265670 193627,265679 193624,265683 193623,265693 193623,265692 193632,265692 193633,265693 193635,265695 193642,265693 193642,265692 193643,265691 193644,265690 193644,265689 193644,265679 193645,265679 193655,265678 193655,265677 193673,265676 193682,265670 193684,265659 193688,265654 193700,265652 193704,265631 193701,265629 193701,265628 193703,265619 193718,265617 193718,265616 193709,265612 193683,265614 193678,265609 193678,265571 193681,265551 193657,265495 193716,265492 193726,265481 193765,265481 193774,265480 193846,265479 193902,265478 193936,265526 193966,265563 193990,265548 194006,265547 194006,265546 194005,265544 194004,265543 194003,265542 194003,265541 194002,265540 194002,265540 194003,265521 194040,265525 194046,265527 194049,265527 194050,265528 194059,265528 194061,265543 194059,265544 194059,265544 194060,265549 194064,265554 194068,265555 194070,265557 194073,265558 194073,265558 194074,265559 194077,265561 194079,265564 194084,265567 194088,265568 194090,265570 194090,265581 194093,265569 194117,265567 194120,265567 194124,265567 194125,265568 194126,265569 194127,265569 194128,265570 194129,265571 194130,265572 194131,265573 194132,265574 194133,265575 194134,265576 194134,265577 194135,265596 194153,265583 194158,265540 194205,265530 194216,265473 194277,265462 194289,265461 194290,265451 194299,265432 194314,265410 194332,265394 194348,265372 194370,265371 194369,265359 194355,265362 194353,265362 194352,265367 194342,265342 194356,265341 194357,265340 194358,265339 194358,265338 194359,265337 194360,265336 194361,265335 194362,265335 194363,265334 194363,265333 194364,265332 194365,265331 194366,265330 194367,265325 194347,265308 194363,265302 194369,265326 194391,265308 194398,265306 194400,265304 194401,265303 194402,265302 194402,265301 194402,265300 194402,265294 194402,265288 194404,265286 194404,265286 194405,265285 194406,265284 194407,265283 194408,265282 194409,265282 194410,265281 194411,265280 194412,265279 194413,265278 194414,265277 194415,265276 194416,265275 194418,265275 194419,265274 194420,265273 194421,265272 194422,265272 194423,265271 194424,265270 194425,265269 194426,265268 194428,265268 194429,265267 194430,265266 194431,265266 194432,265265 194433,265264 194434,265263 194435,265262 194435,265261 194436,265260 194438,265258 194438,265253 194438,265254 194450,265254 194452,265253 194453,265252 194454,265251 194455,265243 194464,265234 194454,265238 194471,265238 194473,265237 194473,265235 194475,265234 194476,265232 194477,265231 194478,265230 194478,265229 194478,265228 194477,265227 194477,265226 194476,265225 194475,265224 194474,265224 194473,265223 194472,265222 194472,265222 194471,265221 194470,265220 194469,265217 194466,265216 194465,265166 194437,265165 194447,265164 194476,265158 194508,265158 194511,265173 194549,265176 194555,265199 194612,265205 194606,265214 194603,265238 194592,265244 194601,265246 194605,265257 194601,265263 194598,265265 194598,265266 194599,265268 194601,265270 194602,265272 194604,265274 194604,265278 194605,265281 194605,265282 194605,265283 194605,265292 194603,265290 194595,265284 194577,265320 194599,265336 194580,265351 194590,265302 194548,265300 194546,265298 194545,265295 194542,265295 194541,265298 194536,265285 194522,265285 194521,265284 194520,265283 194519,265282 194518,265281 194517,265280 194516,265279 194514,265279 194512,265247 194500,265262 194484,265277 194470,265278 194469,265287 194460,265304 194444,265306 194442,265325 194424,265330 194429,265370 194431,265371 194430,265372 194429,265374 194428,265376 194427,265377 194426,265378 194425,265379 194425,265380 194424,265381 194423,265382 194423,265383 194422,265384 194421,265385 194420,265386 194419,265387 194419,265388 194418,265389 194417,265390 194417,265390 194416,265391 194415,265392 194415,265393 194414,265395 194413,265396 194412,265398 194411,265399 194409,265401 194408,265402 194407,265403 194406,265404 194405,265405 194405,265406 194404,265407 194403,265408 194402,265409 194402,265410 194401,265411 194400,265412 194399,265413 194398,265414 194398,265414 194397,265416 194396,265417 194396,265418 194395,265419 194394,265420 194393,265421 194393,265422 194392,265423 194391,265424 194390,265425 194390,265426 194389,265427 194388,265428 194387,265429 194387,265430 194386,265431 194385,265432 194384,265433 194383,265434 194383,265435 194382,265436 194381,265437 194381,265438 194380,265439 194379,265440 194379,265441 194378,265442 194377,265443 194376,265444 194376,265445 194375,265446 194374,265447 194373,265448 194373,265448 194372,265449 194371,265450 194370,265451 194370,265451 194368,265453 194363,265466 194371,265467 194372,265467 194373,265468 194374,265469 194375,265469 194376,265470 194377,265471 194378,265471 194379,265471 194380,265469 194381,265469 194382,265468 194382,265466 194384,265462 194386,265425 194414,265430 194411,265430 194410,265428 194412,265433 194418,265448 194406,265463 194421,265464 194421,265465 194421,265466 194421,265467 194422,265487 194442,265507 194463,265548 194465,265548 194473,265578 194475,265578 194477,265579 194477,265602 194498,265595 194503,265594 194505,265593 194507,265592 194510,265590 194513,265590 194514,265589 194515,265589 194516,265589 194517,265588 194518,265587 194520,265587 194521,265586 194523,265585 194525,265585 194526,265582 194536,265579 194545,265578 194547,265577 194548,265576 194550,265575 194552,265574 194553,265573 194555,265572 194556,265571 194557,265570 194558,265570 194560,265569 194561,265569 194562,265568 194563,265568 194565,265567 194566,265566 194569,265565 194572,265565 194574,265564 194575,265562 194579,265560 194583,265559 194585,265557 194588,265557 194590,265556 194591,265555 194592,265555 194593,265554 194594,265553 194596,265553 194597,265552 194598,265552 194599,265551 194601,265551 194602,265550 194603,265549 194605,265548 194606,265548 194607,265548 194609,265547 194623,265538 194624,265508 194628,265508 194629,265501 194629,265461 194633,265456 194639,265458 194655,265462 194682,265463 194689,265491 194705,265527 194725,265534 194729,265561 194745,265575 194752,265589 194755,265593 194755,265598 194755,265603 194755,265607 194752,265630 194734,265651 194712,265652 194710,265654 194708,265656 194707,265657 194705,265658 194704,265658 194703,265659 194702,265659 194701,265659 194700,265659 194698,265660 194697,265660 194696,265663 194693,265666 194689,265666 194688,265666 194686,265666 194683,265666 194678,265666 194677,265667 194676,265671 194671,265675 194667,265678 194663,265682 194660,265689 194653,265698 194650,265714 194645,265700 194593,265699 194589,265701 194586,265704 194583,265706 194580,265711 194573,265716 194567,265724 194559,265730 194551,265734 194547,265737 194543,265739 194539,265742 194535,265747 194528,265749 194519,265752 194507,265754 194495,265755 194490,265757 194486,265769 194467,265779 194448,265780 194447,265780 194445,265780 194444,265780 194443,265780 194442,265780 194441,265779 194440,265779 194439,265779 194437,265779 194436,265780 194435,265780 194434,265779 194433,265780 194431,265780 194430,265779 194429,265779 194428,265779 194427,265779 194426,265779 194424,265779 194423,265779 194422,265778 194421,265778 194419,265777 194418,265777 194417,265777 194416,265777 194414,265777 194413,265777 194411,265777 194410,265777 194409,265778 194408,265784 194399,265791 194390,265791 194389,265791 194388,265790 194387,265790 194386,265790 194385,265789 194384,265789 194383,265789 194381,265788 194380,265788 194379,265788 194378,265787 194376,265787 194375,265787 194374,265786 194373,265786 194372,265786 194371,265786 194370,265785 194364,265785 194358,265785 194357,265785 194356,265784 194355,265784 194353,265784 194352,265783 194351,265783 194350,265783 194348,265782 194347,265782 194346,265782 194341,265783 194336,265783 194335,265783 194334,265783 194332,265783 194331,265783 194330,265784 194328,265784 194327,265785 194326,265785 194325,265786 194323,265787 194321,265788 194319,265788 194318,265787 194318,265785 194317,265785 194318,265775 194318,265775 194313,265768 194310,265748 194302,265754 194293,265761 194282,265765 194272,265773 194252,265780 194235,265781 194231,265780 194230,265778 194225,265775 194219,265775 194218,265775 194216,265774 194215,265774 194213,265770 194202,265767 194190,265767 194189,265767 194187,265768 194181,265802 194173,265813 194153,265814 194148,265834 194139,265836 194138,265838 194136,265840 194135,265841 194135,265842 194134,265843 194133,265845 194132,265847 194130,265848 194130,265849 194129,265850 194129,265851 194128,265852 194127,265853 194127,265854 194126,265857 194121,265858 194115,265859 194113,265860 194110,265860 194108,265862 194107,265876 194093,265869 194090,265868 194089,265868 194088,265867 194087,265867 194085,265866 194084,265866 194083,265866 194082,265865 194081,265865 194079,265865 194078,265864 194077,265864 194076,265864 194075,265863 194073,265863 194071,265862 194069,265862 194068,265861 194068,265849 194059,265853 194017,265853 194016,265852 194014,265852 194013,265852 194011,265851 194010,265851 194009,265851 194008,265850 194007,265849 194004,265848 194002,265848 194000,265847 193997,265845 193992,265845 193991,265845 193989,265853 193957,265844 193964,265806 193997,265780 194074,265743 193975,265748 193972,265748 193971,265746 193968,265740 193965,265731 193960,265727 193957,265732 193952,265733 193950,265734 193948,265735 193947,265734 193946,265734 193944,265734 193943,265734 193942,265734 193940,265734 193939,265734 193938,265734 193936,265734 193935,265734 193934,265733 193932,265733 193930,265732 193928,265726 193922,265732 193902,265732 193900,265732 193897,265730 193879,265723 193879,265716 193879,265714 193873,265744 193875,265749 193874,265715 193833,265717 193832,265717 193824,265718 193817,265718 193816,265763 193761,265764 193762,265767 193773,265768 193780,265775 193785,265783 193791,265773 193814,265770 193821,265768 193829,265766 193839,265762 193848,265759 193856,265758 193862,265758 193872,265763 193881,265768 193889,265781 193866,265790 193850,265794 193845,265840 193774,265837 193806,265837 193809,265831 193827,265860 193838,265882 193774,265905 193718,266059 193881,266139 193966,266196 193861,266170 193795,266180 193724,266194 193619,266209 193557,266221 193508,266225 193492,266224 193475,266222 193325,266223 193318,266225 193297,266227 193280,266228 193266,266234 193210,266137 193221,266121 193247,266068 193233,266066 193191,266066 193188,266064 193152,266039 193057,266035 193043,266025 192991,266019 192991,266019 192981,266023 192981,266021 192972,265989 192940,266005 192938,266006 192953,266064 192989,266071 192986,266087 192979,266104 192977,266228 192963,266223 192995,266219 193016,266270 193017,266400 192817,266413 192797,266561 192570,266615 192536,266620 192553,266632 192599,266607 192635,266547 192722,266661 192907,266693 192959,266872 192896,266899 192887,266926 192889,266972 192892,266968 192741,266967 192695,266871 192667,266737 192629,266764 192622,266727 192409,266717 192352,266808 192287,266885 192231,266873 192268,266868 192283,266894 192340,266987 192540,267003 192550,267304 192739,267285 192641,267270 192566,266933 192196,266928 192191,266906 192166,266889 192142,266873 192118,266813 192175,266797 192190,266763 192137,266358 192253,266369 192237,266370 192235,266367 192235,266296 192224,266281 192203,266023 191829,266016 191826,266005 191816,266002 191816,265998 191816,265991 191822,265991 191829,265991 191834,265989 191839,265987 191844,265983 191847,265980 191850,265976 191851,265974 191852,265969 191850,265969 191842,265967 191837,265966 191834,265964 191831,265960 191827,265958 191826,265950 191829,265949 191862,265932 191858,265932 191853,265931 191849,265929 191845,265925 191841,265922 191838,265899 191861,265888 191860,265886 191858,265883 191854,265881 191850,265880 191847,265879 191840,265866 191833,265859 191846,265852 191842,265846 191839,265840 191837,265838 191837,265837 191839,265835 191844,265834 191850,265835 191858,265834 191859,265831 191862,265828 191864,265825 191864,265821 191864,265818 191862,265802 191848,265800 191847,265796 191847,265790 191847,265785 191849,265768 191855,265765 191856,265761 191855,265755 191852,265742 191848,265739 191834,265725 191801,265720 191793,265715 191789,265709 191785,265705 191783,265696 191780,265684 191778,265681 191779,265680 191780,265679 191782,265679 191784,265683 191799,265681 191831,265677 191841,265663 191836,265652 191833,265648 191836,265643 191839,265638 191840,265632 191839,265631 191838,265629 191821,265626 191817,265624 191818,265623 191818,265620 191825,265618 191834,265615 191841,265612 191848,265608 191854,265603 191859,265597 191864,265592 191868,265589 191869,265586 191869,265579 191868,265575 191868,265567 191865,265559 191865,265556 191865,265552 191867,265548 191870,265543 191876,265537 191874,265533 191873,265528 191873,265523 191874,265515 191877,265491 191878,265479 191881,265468 191886,265456 191883,265445 191877,265413 191877,265399 191875,265389 191874,265372 191875,265360 191874,265334 191870,265329 191869,265398 192004,265565 192332,265564 192333,265557 192337,265556 192341,265555 192343,265555 192344,265556 192345,265559 192363,265563 192381,265564 192384,265565 192386,265580 192409,265596 192429,265599 192432,265603 192434,265610 192436,265616 192438,265621 192440,265626 192442,265648 192448,265670 192455,265673 192456,265676 192457,265679 192458,265682 192460,265694 192468,265708 192475,265717 192479,265726 192483,265729 192484,265731 192485,265734 192487,265738 192488,265748 192491,265759 192494,265772 192498,265784 192504,265807 192515,265824 192531,265847 192551,265855 192574,265865 192601,265864 192627,265864 192659,265802 192646,265842 192760,265835 192794,265823 192853,265779 192863,265804 192879,265823 192892,265812 192890,265808 192890,265807 192890,265806 192891,265805 192892,265803 192900,265801 192908,265800 192916,265800 192924,265800 192927,265772 192935,265767 192936,265765 192936,265764 192931,265761 192923,265760 192923,265757 192924,265756 192923,265729 192905,265724 192909,265715 192914,265704 192914,265698 192914,265698 192916,265695 192916,265687 192942,265704 192951,265719 192954,265715 192957,265710 192960,265706 192962,265706 192974,265707 192976,265705 192978,265704 192979,265704 192981,265701 192987,265698 192994,265695 192994,265691 192993,265687 192994,265680 192994,265677 193008,265676 193010,265685 193012,265712 193020,265712 193017,265713 193015,265711 193012,265711 193010,265726 193011,265725 193038,265721 193041,265704 193056),(265681 194364,265681 194367,265671 194367,265671 194358,265671 194357,265681 194357,265681 194364),(265672 194259,265672 194252,265682 194252,265682 194261,265682 194262,265672 194262,265672 194259),(265660 194241,265669 194241,265669 194251,265659 194251,265659 194249,265659 194241,265660 194241),(265730 193180,265761 193187,265770 193167,265773 193196,265778 193238,265780 193284,265780 193290,265781 193296,265781 193300,265781 193305,265781 193310,265781 193315,265737 193357,265704 193365,265692 193357,265689 193334,265698 193344,265699 193335,265701 193319,265703 193305,265718 193219,265723 193191,265728 193192,265730 193180),(265829 193249,265833 193249,265833 193259,265828 193259,265823 193259,265823 193250,265823 193249,265829 193249),(265892 193510,265906 193514,266004 193467,265951 193602,265890 193576,265899 193549,265892 193510),(266286 192856,266219 192756,266168 192757,266168 192748,266169 192722,266220 192689,266281 192648,266286 192670,266318 192815,266290 192850,266286 192856),(266044 192606,266037 192606,266037 192596,266047 192596,266047 192603,266047 192606,266044 192606),(266039 192790,266039 192800,266029 192800,266029 192790,266037 192790,266039 192790),(265749 192996,265749 192986,265759 192986,265759 192996,265749 192996),(265848 192834,265848 192824,265858 192824,265858 192834,265848 192834),(265978 192980,265978 192970,265988 192970,265988 192980,265978 192980),(266088 192809,266088 192813,266080 192813,266078 192813,266078 192803,266088 192803,266088 192809),(265981 192800,265981 192790,265991 192790,265991 192800,265981 192800),(265951 192844,265951 192834,265961 192834,265961 192844,265951 192844),(265917 193026,265917 193016,265927 193016,265927 193026,265917 193026),(265926 193055,265926 193045,265936 193045,265936 193055,265926 193055),(265966 192746,265966 192736,265976 192736,265976 192746,265966 192746),(266046 192708,266046 192698,266056 192698,266056 192708,266046 192708),(265692 193744,265687 193751,265684 193755,265682 193756,265667 193763,265635 193732,265630 193728,265650 193718,265652 193717,265662 193716,265673 193718,265676 193718,265679 193718,265681 193718,265682 193719,265683 193723,265687 193723,265687 193733,265692 193744),(265611 193820,265611 193810,265621 193810,265621 193820,265611 193820),(265731 193735,265731 193725,265741 193725,265741 193735,265731 193735),(265708 193562,265708 193552,265718 193552,265718 193562,265708 193562),(265650 193477,265640 193477,265640 193467,265648 193467,265650 193467,265650 193477),(265680 193109,265680 193099,265690 193099,265690 193109,265680 193109),(265611 193335,265611 193325,265621 193325,265621 193335,265611 193335),(265610 194005,265610 193995,265620 193995,265620 194005,265610 194005),(265570 193944,265570 193934,265580 193934,265580 193944,265570 193944),(265643 193872,265643 193862,265653 193862,265653 193872,265643 193872),(265909 193141,265909 193131,265919 193131,265919 193141,265909 193141),(265800 193015,265800 193005,265810 193005,265810 193015,265800 193015),(265728 194212,265728 194202,265738 194202,265738 194212,265728 194212),(265691 194370,265691 194360,265701 194360,265701 194370,265691 194370)),((265057 193097,265050 193096,265044 193093,265043 193093,265041 193093,265038 193093,265037 193093,265035 193093,265029 193092,265031 193093,265035 193094,265060 193099,265076 193103,265058 193097,265057 193097)),((265246 193239,265266 193230,265268 193230,265279 193209,265282 193211,265281 193210,265290 193199,265273 193188,265269 193196,265260 193213,265249 193234,265246 193239)),((265525 192957,265525 192962,265524 192965,265526 192968,265530 192975,265533 192983,265536 192990,265540 192993,265562 193014,265575 193011,265609 193004,265606 192991,265602 192978,265607 192966,265613 192953,265573 192946,265533 192939,265527 192954,265525 192957)),((265345 192929,265348 192937,265349 192941,265371 192945,265372 192945,265373 192938,265374 192935,265374 192934,265364 192919,265363 192920,265345 192929)))"; + string s2 = "POLYGON((265433 194418,265428 194412,265430 194410,265430 194411,265425 194414,265462 194386,265466 194384,265468 194382,265469 194382,265469 194381,265471 194380,265471 194379,265471 194378,265470 194377,265469 194376,265469 194375,265468 194374,265467 194373,265467 194372,265466 194371,265453 194363,265451 194368,265451 194370,265450 194370,265449 194371,265448 194372,265448 194373,265447 194373,265446 194374,265445 194375,265444 194376,265443 194376,265442 194377,265441 194378,265440 194379,265439 194379,265438 194380,265437 194381,265436 194381,265435 194382,265434 194383,265433 194383,265432 194384,265431 194385,265430 194386,265429 194387,265428 194387,265427 194388,265426 194389,265425 194390,265424 194390,265423 194391,265422 194392,265421 194393,265420 194393,265419 194394,265418 194395,265417 194396,265416 194396,265414 194397,265414 194398,265413 194398,265412 194399,265411 194400,265410 194401,265409 194402,265408 194402,265407 194403,265406 194404,265405 194405,265404 194405,265403 194406,265402 194407,265402 194407,265401 194408,265399 194409,265398 194411,265396 194412,265395 194413,265393 194414,265392 194415,265391 194415,265390 194416,265390 194417,265389 194417,265388 194418,265387 194419,265386 194419,265385 194420,265384 194421,265383 194422,265382 194423,265381 194423,265380 194424,265379 194425,265378 194425,265377 194426,265376 194427,265374 194428,265372 194429,265371 194430,265370 194431,265330 194429,265369 194467,265379 194477,265422 194481,265427 194484,265433 194488,265467 194515,265469 194508,265487 194442,265467 194422,265466 194421,265465 194421,265464 194421,265463 194421,265448 194406,265433 194418))"; + + var reader = new WKTReader(GeometryFactory.Fixed); + Assert.IsNotNull(reader); + + var g1 = reader.Read(s1).Buffer(0); + Assert.IsNotNull(g1); + + var g2 = reader.Read(s2).Buffer(0); + Assert.IsNotNull(g2); + + var result = g1.Union(g2); + Assert.IsNotNull(result); + Debug.WriteLine(result); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.Test/WKTReaderTests.cs b/test/NetTopologySuite.IO.Esri.Test/WKTReaderTests.cs new file mode 100644 index 0000000..8ab6176 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.Test/WKTReaderTests.cs @@ -0,0 +1,26 @@ +using NetTopologySuite.Geometries; +using NUnit.Framework; +using NetTopologySuite.IO.Shapefile; + +namespace NetTopologySuite.IO.ShapeFile.Test +{ + public class WKTReaderTests + { + private readonly WKTReader _wktReader; + + public WKTReaderTests() + { + _wktReader = new WKTReader(new GeometryFactory(new PrecisionModel(), 4326)) { IsOldNtsCoordinateSyntaxAllowed = false }; + } + + [Test] + public void TestShapeType() + { + string wkt = "POLYGON ((-86.7605020509258 41.5101338613656, -86.7604972038273 41.5100611525915, -86.7604971708084 41.5100606308085, -86.7604611720717 41.5094596307695, -86.7604611426546 41.5094591103497, -86.7604291439208 41.5088571103154, -86.760429130715 41.508856853856, -86.7603991319814 41.5082548538241, -86.7603991259966 41.5082547317887, -86.7603701303631 41.5076537960468, -86.7603401446338 41.5070530565908, -86.7603071566895 41.5064532528163, -86.7603071500912 41.506453131098, -86.7602814240795 41.5059715533315, -86.7605549835241 41.5059607024218, -86.7605808466407 41.5064448078787, -86.760613844555 41.5070447469854, -86.7606138651484 41.5070451395365, -86.7606438664126 41.5076461395046, -86.7606438727239 41.5076462680791, -86.7606728710439 41.5082472070294, -86.7607028628788 41.5088490177453, -86.7607348434949 41.5094506292495, -86.7607708135428 41.5100511081057, -86.760776407335 41.5101350123382, -86.7605020509258 41.5101338613656))"; + var geometry = (Polygon)_wktReader.Read(wkt); + + Assert.IsTrue(geometry.Shell.CoordinateSequence.Ordinates == Ordinates.XY); + Assert.IsTrue(geometry.GetShapeType() == ShapeType.Polygon); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/App.config b/test/NetTopologySuite.IO.Esri.TestConsole/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/NetTopologySuite.IO.Esri.TestConsole.csproj b/test/NetTopologySuite.IO.Esri.TestConsole/NetTopologySuite.IO.Esri.TestConsole.csproj new file mode 100644 index 0000000..09d8772 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/NetTopologySuite.IO.Esri.TestConsole.csproj @@ -0,0 +1,86 @@ + + + + + Debug + AnyCPU + {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC} + Exe + NetTopologySuite.IO.Esri.TestConsole + NetTopologySuite.IO.Esri.TestConsole + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + TRACE;DEBUG;DEBUG_BINARY + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {2be3cbae-cbf5-4b67-b1cb-ca64365a6157} + NetTopologySuite.IO.Esri.Core + + + {960d89db-f534-4207-931e-4bb8b4dca483} + NetTopologySuite.IO.Esri + + + + + 2.1.0 + + + 2.1.0 + + + + \ No newline at end of file diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Program.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Program.cs new file mode 100644 index 0000000..63ff707 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Program.cs @@ -0,0 +1,128 @@ +using NetTopologySuite.IO.Esri.TestConsole.Tests; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole +{ + class Program + { + + private static Test[] TestList = { + new DbaseRreaderTest("arcmap/shp/fields_utf8.dbf"), + new ReadArcMapFilesTest(), + new CopyArcMapFilesTest(), + new CreateShapefileTest(), + new CoreReadDbf(), + new CoreReadShp(), + new CoreReadShapefile1(), + new CoreReadShapefile2(), + new CoreWriteShapefile1(), + new CoreWriteShapefile2(), + new NtsReadShapefile(), + new NtsWriteShapefile1(), + }; + + + static void Main(string[] args) + { + Console.WriteLine("NetTopologySuite.IO.Esri.TestConsole"); + + if (string.IsNullOrEmpty(Test.TestDataDir)) + { + Console.WriteLine("ERROR: TestData folder not found."); + Console.WriteLine("Pres any key to exit."); + Console.ReadKey(); + return; + } + + Console.WriteLine("TestData directory: " + Test.TestDataDir); + Console.WriteLine(); + + WriteTestList(); + + var testNumber = Console.ReadLine(); + while (!string.IsNullOrEmpty(testNumber)) + { + RunTest(testNumber); + WriteTestList(); + testNumber = Console.ReadLine(); + } + } + + private static void WriteTestList() + { + Console.ForegroundColor = ConsoleColor.Cyan; + Console.WriteLine("TEST LIST"); + Console.WriteLine("---------"); + Console.ForegroundColor = ConsoleColor.DarkCyan; + for (int i = 0; i < TestList.Length; i++) + { + var test = TestList[i]; + Console.WriteLine((i + 1).ToString() + ": " + test.ToString()); + } + Console.WriteLine(); + Console.ForegroundColor = ConsoleColor.Cyan; + Console.Write("Write test number or pres ENTER to exit: "); + } + + private static void WriteError(Exception ex, bool exitApp = false) + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("ERROR: " + ex.Message); + ex = ex.InnerException; + while (ex != null) + { + Console.WriteLine("- " + ex.Message); + ex = ex.InnerException; + } + if (exitApp) + { + Console.WriteLine("Pres any key to exit."); + Console.ReadKey(); + Environment.Exit(1); + } + } + + private static void RunTest(string testNumber) + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Gray; + if (int.TryParse(testNumber, out int number) && number > 0 && number <= TestList.Length) + { + var test = TestList[number - 1]; + var testName = test.ToString(); ; + Console.WriteLine(testName); + Console.WriteLine(new string('=', testName.Length)); + Console.WriteLine(); + + test.Run(); + try + { + //test.Run(); + } + catch (Exception ex) + { + WriteError(ex); + throw; + } + finally + { + testName = test.Title + " finished."; + Console.WriteLine(testName); + Console.WriteLine(new string('=', testName.Length)); + Console.WriteLine(); + } + + } + else + { + Console.WriteLine("Invalid test number."); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Properties/AssemblyInfo.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..39e5960 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("NetTopologySuite.IO.Esri.TestConsole")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NetTopologySuite.IO.Esri.TestConsole")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("aa37efc6-737f-4e8a-a79c-2d179c1b38ec")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadDbf.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadDbf.cs new file mode 100644 index 0000000..430dfa9 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadDbf.cs @@ -0,0 +1,34 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreReadDbf : Test + { + public override void Run() + { + var dbfPath = GetTestFilePath("arcmap/shp/pt_utf8.dbf"); + + using (var dbf = new DbfReader(dbfPath)) + { + foreach (var field in dbf.Fields) + { + Console.WriteLine(field); + } + + foreach (var record in dbf) + { + Console.WriteLine("Record ID: " + record["Id"]); + foreach (var attr in record) + { + Console.WriteLine($" {attr.Key}: {attr.Value}"); + } + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile1.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile1.cs new file mode 100644 index 0000000..c72bcaa --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile1.cs @@ -0,0 +1,38 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreReadShapefile1 : Test + { + public override void Run() + { + var shpPath = GetTestFilePath("arcmap/shp/pt_utf8.shp"); + + using (var shp = new ShapefilePointReader(shpPath)) + { + Console.WriteLine(shp.ShapeType); + foreach (var field in shp.Fields) + { + Console.WriteLine(field); + } + + foreach (var feature in shp) + { + Console.WriteLine("Record ID: " + feature.Attributes["Id"]); + foreach (var attr in feature.Attributes) + { + Console.WriteLine($" {attr.Key}: {attr.Value}"); + } + Console.WriteLine($" SHAPE: {feature.Shape}"); + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile2.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile2.cs new file mode 100644 index 0000000..ee773d6 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShapefile2.cs @@ -0,0 +1,41 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreReadShapefile2 : Test + { + public override void Run() + { + var shpPath = GetTestFilePath("arcmap/shp/pt_utf8.shp"); + + using (var shp = ShapefileReader.Open(shpPath)) + { + Console.WriteLine(shp.ShapeType); + foreach (var field in shp.Fields) + { + Console.WriteLine(field); + } + + while (shp.Read(out var deleted)) + { + if (deleted) + continue; + + Console.WriteLine("Record ID: " + shp.Fields["Id"].Value); + foreach (var field in shp.Fields) + { + Console.WriteLine($" {field.Name}: {field.Value}"); + } + Console.WriteLine($" SHAPE: {shp.Shape}"); + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShp.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShp.cs new file mode 100644 index 0000000..e2a445b --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreReadShp.cs @@ -0,0 +1,29 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreReadShp : Test + { + public override void Run() + { + var shpPath = GetTestFilePath("arcmap/shp/pt_utf8.shp"); + + using (var shpStream = File.OpenRead(shpPath)) + using (var shp = new ShpPointReader(shpStream)) + { + Console.WriteLine(shp.ShapeType); + while (shp.Read()) + { + Console.WriteLine(shp.Shape); + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile1.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile1.cs new file mode 100644 index 0000000..98879a0 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile1.cs @@ -0,0 +1,59 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreWriteShapefile1 : Test + { + public override void Run() + { + var shpPath = GetTempFilePath("abcd1.shp"); + + var features = new List(); + for (int i = 1; i < 5; i++) + { + var attributes = new Dictionary(); + attributes["date"] = new DateTime(2000, 1, i + 1); + attributes["float"] = i * 0.1; + attributes["int"] = i; + attributes["logical"] = i % 2 == 0; + attributes["text"] = i.ToString("0.00"); + + var line = new List(); + line.Add(new ShpCoordinates(i, i + 1, i)); + line.Add(new ShpCoordinates(i, i, i)); + line.Add(new ShpCoordinates(i + 1, i, i)); + + var shapeParts = new List>(); + shapeParts.Add(line); + + var feature = new ShapefileFeature(shapeParts, attributes); + features.Add(feature); + } + + var dateField = DbfField.Create("date", typeof(DateTime)); + var floatField = DbfField.Create("float", typeof(double)); + var intField = DbfField.Create("int", typeof(int)); + var LogicalField = DbfField.Create("logical", typeof(bool)); + var textField = DbfField.Create("text", typeof(string)); + + using (var shp = new ShapefileMultiPartWriter(shpPath, ShapeType.PolyLine, dateField, floatField, intField, LogicalField, textField)) + { + shp.Write(features); + } + + foreach (var feature in Shapefile.Core.ShapefileReader.ReadAll(shpPath)) + { + Console.WriteLine(feature.Attributes); + Console.WriteLine(feature.Shape); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile2.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile2.cs new file mode 100644 index 0000000..726cb64 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/CoreWriteShapefile2.cs @@ -0,0 +1,49 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CoreWriteShapefile2 : Test + { + public override void Run() + { + var shpPath = GetTempFilePath("abcd2.shp"); + + var dateField = new DbfDateField("date"); + var floatField = new DbfFloatField("float"); + var intField = new DbfNumericField("int"); + var LogicalField = new DbfLogicalField("logical"); + var textField = new DbfCharacterField("text"); + + using (var shp = new ShapefileMultiPartWriter(shpPath, ShapeType.PolyLine, dateField, floatField, intField, LogicalField, textField)) + { + for (int i = 1; i < 5; i++) + { + // Avoid expensive boxing and unboxing value types + dateField.DateValue = new DateTime(2000, 1, i + 1); + floatField.NumericValue = i * 0.1; + intField.NumericValue = i; + LogicalField.LogicalValue = i % 2 == 0; + textField.StringValue = i.ToString("0.00"); + + // Avoid realocating new ShpCoordinates[] array over and over. + shp.Shape.Clear(); + shp.Shape.StartNewPart(); + shp.Shape.AddPoint(i, i + 1, i); + shp.Shape.AddPoint(i, i, i); + shp.Shape.AddPoint(i + 1, i, i); + + shp.Write(); + Console.WriteLine("Feature number " + i + " was written."); + } + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsReadShapefile.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsReadShapefile.cs new file mode 100644 index 0000000..d38db7e --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsReadShapefile.cs @@ -0,0 +1,29 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class NtsReadShapefile : Test + { + public override void Run() + { + var shpPath = GetTestFilePath("arcmap/shp/pt_utf8.shp"); + + foreach (var feature in ShapefileReader.ReadAll(shpPath)) + { + Console.WriteLine("Record ID: " + feature.Attributes["Id"]); + foreach (var attrName in feature.Attributes.GetNames()) + { + Console.WriteLine($" {attrName}: {feature.Attributes[attrName]}"); + } + Console.WriteLine($" SHAPE: {feature.Geometry}"); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsWriteShapefile.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsWriteShapefile.cs new file mode 100644 index 0000000..aea315b --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Samples/NtsWriteShapefile.cs @@ -0,0 +1,43 @@ +using NetTopologySuite.Features; +using NetTopologySuite.Geometries; +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class NtsWriteShapefile1 : Test + { + public override void Run() + { + var shpPath = GetTempFilePath("abcd3.shp"); + + var features = new List(); + for (int i = 1; i < 5; i++) + { + var attributes = new AttributesTable(); + attributes.Add("date", new DateTime(2000, 1, i + 1)); + attributes.Add("float", i * 0.1); + attributes.Add("int", i); + attributes.Add("logical", i % 2 == 0); + attributes.Add("text", i.ToString("0.00")); + + var lineCoords = new List(); + lineCoords.Add(new CoordinateZ(i, i + 1, i)); + lineCoords.Add(new CoordinateZ(i, i, i)); + lineCoords.Add(new CoordinateZ(i + 1, i, i)); + var line = new LineString(lineCoords.ToArray()); + + var feature = new Feature(line, attributes); + features.Add(feature); + } + + features.SaveToShapefile(shpPath); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ArcMapShapefilesTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ArcMapShapefilesTest.cs new file mode 100644 index 0000000..ae41345 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ArcMapShapefilesTest.cs @@ -0,0 +1,33 @@ +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public abstract class ArcMapShapefilesTest : Test + { + public override void Run() + { + var filePath = GetTestFilePath("arcmap/shp/point.shp"); + var shpDataDir = Path.GetDirectoryName(filePath); + + foreach (var shpFilePath in Directory.GetFiles(shpDataDir, "*.shp")) + { + var fileName = "arcmap/shp/" + Path.GetFileName(shpFilePath); + //if (!fileName.Contains("pt_utf8")) + // continue; + + using (var reader = ShapefileReader.Open(shpFilePath)) + { + RunShapefile(fileName, reader); + } + } + } + + protected abstract void RunShapefile(string fileName, ShapefileReader shp); + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CopyArcMapFilesTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CopyArcMapFilesTest.cs new file mode 100644 index 0000000..3c76b11 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CopyArcMapFilesTest.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NetTopologySuite.IO; +using NetTopologySuite.IO.Shapefile.Core; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CopyArcMapFilesTest : ArcMapShapefilesTest + { + protected override void RunShapefile(string srcFile, ShapefileReader src) + { + Console.WriteLine(srcFile); + var copyFile = CreateFileCopyDir(srcFile); + srcFile = GetTestFilePath(srcFile); + + + + using (var copy = ShapefileWriter.Open(copyFile, src.ShapeType, src.Fields, src.Encoding, src.Projection)) + { + copy.Write(src.ToArray()); + } + + Console.WriteLine("==="); + + using (var copyReader = ShapefileReader.Open(copyFile)) + { + copyReader.ToArray(); + } + + CompareFiles(srcFile, copyFile, ".shp"); + CompareFiles(srcFile, copyFile, ".shx"); + CompareFiles(srcFile, copyFile, ".dbf"); + CompareFiles(srcFile, copyFile, ".cpg"); + CompareFiles(srcFile, copyFile, ".prj"); + + Console.WriteLine(); + } + + public void CompareFiles(string file1, string file2, string ext) + { + ext = ext.ToLowerInvariant(); + file1 = Path.ChangeExtension(file1, ext); + file2 = Path.ChangeExtension(file2, ext); + + if (!File.Exists(file1)) + return; + + Console.Write(Path.GetFileName(file2).PadRight(20) + " "); + Console.ForegroundColor = ConsoleColor.Red; + + if (!File.Exists(file2)) + { + Console.WriteLine("file does not exists."); + Console.ResetColor(); + return; + } + + var bytes1 = File.ReadAllBytes(file1); + var bytes2 = File.ReadAllBytes(file2); + if (bytes1.Length != bytes2.Length) + { + Console.WriteLine($"files have different size: {bytes1.Length} | {bytes2.Length}" ); + Console.ResetColor(); + return; + } + + var hasErrors = false; + for (int i = 0; i < bytes1.Length; i++) + { + if (hasErrors && IsFileHeaderEnd(i, ext)) + { + Console.ForegroundColor = ConsoleColor.DarkGray; + Console.WriteLine("--- File header end ---"); + Console.ForegroundColor = ConsoleColor.Red; + } + + if (i > 0 && i < 4 && ext == ".dbf") + continue; // DBF file date + + if (WriteDifferentBytes(i, bytes1[i], bytes2[i], !hasErrors)) + hasErrors = true; + } + + if (!hasErrors) + { + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("OK"); + } + Console.ResetColor(); + } + + public bool IsFileHeaderEnd(int pos, string ext) + { + if ((ext == ".shp" || ext == ".shx") && pos == 100) + return true; + + if (ext == ".dbf" && pos == 32) + return true; + + return false; + } + + public bool WriteDifferentBytes(int index, byte b1, byte b2, bool newLine) + { + if (b1 == b2) + return false; + + + var sb = new StringBuilder(); + sb.Append("- byte[" + index + "]: "); + + sb.Append(b1.ToString().PadLeft(3)); + sb.Append(" | "); + sb.Append(b2.ToString().PadLeft(3)); + + sb.Append(" '" + (char)b1); + sb.Append("' | '"); + sb.Append( (char)b2 + "'"); + sb.Replace(char.MinValue, '▬'); + + if (newLine) + Console.WriteLine(); + Console.WriteLine(sb.ToString()); + + return true; + } + + public void CompareShp(string shpFile1, string shpFile2) + { + + var differences = new List(); + using (var shp1 = ShapefileReader.Open(shpFile1)) + using (var shp2 = ShapefileReader.Open(shpFile1)) + { + //shp1.GetBinaryDiff(shp2, differences); + } + + foreach (var diff in differences) + { + Console.WriteLine( diff); + } + + } + + + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CreateShapefileTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CreateShapefileTest.cs new file mode 100644 index 0000000..e7bc99a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/CreateShapefileTest.cs @@ -0,0 +1,47 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class CreateShapefileTest : Test + { + public override void Run() + { + var shpPath = GetTempFilePath("point.shp"); + var dateField = new DbfDateField("date"); + var floatField = new DbfFloatField("float"); + var intField = new DbfNumericField("int"); + var LogicalField = new DbfLogicalField("logical"); + var textField = new DbfCharacterField("text"); + + using (var shp = new ShapefilePointWriter(shpPath, Shapefile.ShapeType.Point, dateField, floatField, intField, LogicalField, textField)) + { + for (int i = 1; i < 5; i++) + { + dateField.DateValue = new DateTime(2000, 1, i + 1); + floatField.NumericValue = i * 0.1; + intField.NumericValue = i; + LogicalField.LogicalValue = i % 2 == 0; + textField.StringValue = i.ToString("0.00"); + + shp.Point = new ShpCoordinates(i, i + 1, i + 2); + + shp.Write(); + Console.WriteLine("Record number " + i + " was written."); + } + Console.WriteLine(); + } + + using (var shp = new Shapefile.Core.ShapefilePointReader(shpPath)) + { + WriteFeatures(shp); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/DbaseRreaderTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/DbaseRreaderTest.cs new file mode 100644 index 0000000..4f7b800 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/DbaseRreaderTest.cs @@ -0,0 +1,32 @@ +using NetTopologySuite.IO.Dbf; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class DbaseRreaderTest : FileTest + { + public DbaseRreaderTest(string dbfPath) : base(dbfPath) + { + Title = "Read DBF file"; + } + + public override void Run() + { + var fullPath = GetTestFilePath(Path); + + using (var dbfReader = new DbfReader(fullPath)) + { + WriteFields(dbfReader); + } + } + + + + + + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ReadArcMapFilesTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ReadArcMapFilesTest.cs new file mode 100644 index 0000000..cb11040 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ReadArcMapFilesTest.cs @@ -0,0 +1,18 @@ +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class ReadArcMapFilesTest : ArcMapShapefilesTest + { + protected override void RunShapefile(string fileName, ShapefileReader reader) + { + WriteSectionTitle(fileName); + WriteFeatures(reader); + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ShapeFileReaderTest.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ShapeFileReaderTest.cs new file mode 100644 index 0000000..407929a --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/ShapeFileReaderTest.cs @@ -0,0 +1,28 @@ +using NetTopologySuite.IO.Shapefile.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public class ShapeFileReaderTest : DbaseRreaderTest + { + + public ShapeFileReaderTest(string path) : base(path) + { + Title = "Read SHP file"; + } + + public override void Run() + { + var fullPath = GetTestFilePath(Path); + + using (var shp = new ShapefilePointReader(fullPath)) + { + WriteFeatures(shp); + } + } + } +} diff --git a/test/NetTopologySuite.IO.Esri.TestConsole/Tests/Test.cs b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/Test.cs new file mode 100644 index 0000000..c6e3ea8 --- /dev/null +++ b/test/NetTopologySuite.IO.Esri.TestConsole/Tests/Test.cs @@ -0,0 +1,211 @@ +using NetTopologySuite.IO.Dbf; +using NetTopologySuite.IO.Shapefile; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace NetTopologySuite.IO.Esri.TestConsole.Tests +{ + public abstract class Test + { + public string Title { get; protected set; } + + public Test() + { + Title = GetType().Name; + } + + public abstract void Run(); + + public static readonly string FieldSpace = " ".PadRight(12); + + public static string TestDataDir = GetTestDataDir(Assembly.GetExecutingAssembly().Location); + + private static string GetTestDataDir(string dir) + { + dir = Path.GetDirectoryName(dir); + var testDataDir = Path.Combine(dir, "TestData"); + + if (Directory.Exists(testDataDir)) + return testDataDir; + + if (dir.Length < 4) // "C:\" + { + return ""; + } + + return GetTestDataDir(dir); + } + + public static string GetTestFilePath(string filePath) + { + if (File.Exists(filePath)) + return filePath; + + var path = Path.Combine(TestDataDir, filePath); + path = Path.GetFullPath(path); + if (!File.Exists(path)) + { + throw new FileNotFoundException("Test file not found: " + filePath); + } + return path; + } + + public static string GetTempFilePath(string fileName) + { + var tempFilePath = Path.Combine(TestDataDir, "temp", fileName); + Directory.CreateDirectory(Path.GetDirectoryName(tempFilePath)); + return tempFilePath; + } + + public static string CreateFileCopyDir(string sourceFilePath) + { + var filePath = GetTestFilePath(sourceFilePath); // arcmap/shp/point.shp + var copyDirPath = Path.GetDirectoryName(filePath) + "-copy"; // arcmap/shp => arcmap/shp-copy + Directory.CreateDirectory(copyDirPath); + + return Path.Combine(copyDirPath, Path.GetFileName(sourceFilePath)); // arcmap/shp-copy/point.shp + } + + public override string ToString() + { + return Title; + } + + protected void WriteFieldNames(IReadOnlyList fields) + { + Console.WriteLine("FIELD LIST"); + Console.WriteLine("----------"); + foreach (var field in fields) + { + Console.WriteLine(" " + field.Name.PadRight(10) + " [" + field.FieldType.ToString().PadRight(9) + field.Length.ToString().PadLeft(4) + field.Precision.ToString().PadLeft(3) + "]"); + } + Console.WriteLine(); + } + + protected void WriteFieldValues(IReadOnlyList fields, IReadOnlyDictionary values) + { + Console.WriteLine(); + foreach (var field in fields) + { + WriteFieldValue(field.Name, values[field.Name]); + } + } + + protected void WriteFieldValue(string name, object value) + { + name = name + ": "; + Console.WriteLine(name.PadRight(12) + ToText(value)); + } + + public void WriteFields(DbfReader dbf) + { + WriteFieldNames(dbf.Fields); + foreach (var values in dbf) + { + WriteFieldValues(dbf.Fields, values); + + } + } + + protected void WriteShape(ShapeType type, IReadOnlyList> shape) + { + if (shape.Count < 1 || shape[0].Count < 1) + { + WriteFieldValue("SHAPE", "NullShape"); + return; + } + + WriteFieldValue("SHAPE", type); + for (int i = 0; i < shape.Count; i++) + { + if (shape.Count > 1) + Console.WriteLine(FieldSpace + "Part " + (i + 1) + ":"); + + var part = shape[i]; + foreach (var pt in part) + { + Console.WriteLine(FieldSpace + " " + pt); + } + } + if (shape.Count > 1) + Console.WriteLine(FieldSpace + "Parts end."); + + } + + public void WriteFeature(ShapeType type, IReadOnlyList fields, Shapefile.Core.ShapefileFeature feature) + { + WriteFieldValues(fields, feature.Attributes); + WriteShape(type, feature.Shape); + } + + public void WriteFeatures(Shapefile.Core.ShapefileReader shp) + { + WriteFieldNames(shp.Fields); + + WriteRecordListHeader(); + foreach (var feature in shp) + { + WriteFeature(shp.ShapeType, shp.Fields, feature); + Console.WriteLine(); + } + } + + + protected string ToText(object value) + { + if (value == null) + return ""; + + if (value is string s) + return "'" + s + "'"; + + return value.ToString(); + } + protected void WriteRecordListHeader() + { + Console.WriteLine("RECORD LIST"); + Console.WriteLine("-----------"); + Console.WriteLine(); + } + + public void WriteSectionTitle(string title) + { + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine(); + Console.WriteLine(new string('_', 80)); + Console.WriteLine(title); + Console.WriteLine(new string('-', 80)); + Console.WriteLine(); + Console.ResetColor(); + } + + public void WriteValidationResult(bool isValid, string message) + { + Console.ForegroundColor = isValid ? ConsoleColor.Green : ConsoleColor.Red; + Console.WriteLine(message); + Console.ResetColor(); + } + } + + + + public abstract class FileTest : Test + { + protected readonly string Path; + + public FileTest(string dbfPath) + { + Path = dbfPath; + } + + public override string ToString() + { + return $"{Title}: {Path}"; + } + } +} diff --git a/test/TestData/TestData.mxd b/test/TestData/TestData.mxd new file mode 100644 index 0000000000000000000000000000000000000000..c12c8accd48524eb7062ec2eaf7cae4c79699b78 GIT binary patch literal 1202176 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 z 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

    2``8vuaD3_vq1Ld12m!WJ# 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%0A=uA2BMj-)|Q6O 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 =_1O|eUL(upSzw8iTmP(KGnQYX# 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 HnezV!b+@Uh literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/fields_utf8.cpg b/test/TestData/arcmap/shp-copy/fields_utf8.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/fields_utf8.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/fields_utf8.dbf b/test/TestData/arcmap/shp-copy/fields_utf8.dbf new file mode 100644 index 0000000000000000000000000000000000000000..8c090491054e301cb52ff19c2b1a4fe819c974e4 GIT binary patch literal 530 zcmb79I}XAy42}3m2*d;vQ+7lZr$Cz-#Dus*p+O);6wx5T&gWvi2sa@~)2a;}RKWZwy-qp$}TC_>1&-l9t`*x9zkDNAEiNUL=tt2e~Sbt|~xj6QI5$#2E} zh3*>G$59-~d>WypmO75!#~Q>$n-Py_@G()eEevC+vbRhMPYiWn3?B8Tvmp1%i+K<- z0#sAkBYS4A>|K2+p+Eov%rx?7vWgcgj7u+26qbhz=acjt?RaW#1E%g)Zl?I-kEg2; R6UkFq{!lFp83XE*(HFdiQS<-+ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/fields_utf8.shp b/test/TestData/arcmap/shp-copy/fields_utf8.shp new file mode 100644 index 0000000000000000000000000000000000000000..d1a101909f708ea0552c00eb6be618a6f3c43403 GIT binary patch literal 212 zcmZQzQ0HR64zgY_GcYg$<@Q!gc)Vq~z2naL7t5RWM>{gUIKpMK-`>%4U4`+v!_kh| zwWElFjN!s&7EqiCCO5NX`GT;`_KsKE+qWG&2sRh!0*F2=cCx_a{)54L2=)K{e*i%U BIy3+P literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/fields_utf8.shx b/test/TestData/arcmap/shp-copy/fields_utf8.shx new file mode 100644 index 0000000000000000000000000000000000000000..c93da43236371c731789a5a4349e433ef3d448ca GIT binary patch literal 132 zcmZQzQ0HR64xC;vGcYg$<@Q!gc)Vq~z2naL7t5RWM>{gUIKpMK-`>%4U4`+v!_kh| UwWEj{0eK*M9H6uxl#T(>0K%>kr2qf` literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/multipoint.cpg b/test/TestData/arcmap/shp-copy/multipoint.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/multipoint.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/multipoint.dbf b/test/TestData/arcmap/shp-copy/multipoint.dbf new file mode 100644 index 0000000000000000000000000000000000000000..4f523b3bba8b71af2e88b3d4579ae51b5900edf9 GIT binary patch literal 80 scmZRsWD;RwU|?`$UsR|V1V!i7$R1K_~_y=K1?1)g|Fn6Qq0RVP-PXGV_ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/multipoint.shx b/test/TestData/arcmap/shp-copy/multipoint.shx new file mode 100644 index 0000000000000000000000000000000000000000..39c884bf496b29a12eeac81667dcc7d7fe05a22e GIT binary patch literal 116 zcmZQzQ0HR64y;}mb-3sHwXaS(cDH}1v1EwAkK4AN+Mb^1L zteRpE3y=R`@cutce1}}?>%blJ>>>Om_OoV!z)E|F_&WPHfgsjKsQeatV4wm+b~{wv zPJ7Lm{zG3i_CVF|gWCgiB@+-kpv561Y(Sw>FdamK!vYx9$ngwO1B-X48en*%=z+yE O#J!9MVE%&fVe$YGQ?myE literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/multipoint_m.shx b/test/TestData/arcmap/shp-copy/multipoint_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..f236289343efba5f2175dc34b77435c861ca056d GIT binary patch literal 116 zcmZQzQ0HR64y;}U0-~_9w=!9#5;ia9S}PJ05^XUD*ylh literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/multipoint_zm.cpg b/test/TestData/arcmap/shp-copy/multipoint_zm.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/multipoint_zm.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/multipoint_zm.dbf b/test/TestData/arcmap/shp-copy/multipoint_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..4f523b3bba8b71af2e88b3d4579ae51b5900edf9 GIT binary patch literal 80 scmZRsWD;RwU|?`$UY5S@!n2na!}LqO1^j-|5eXKVu&3f93?ramo12&79Bkh9Pt0TCe@6pSEp z_$O?WPB_6Pg5CLMcPH_4Vej#F-p=g38KSuq{kgoOmkFXNjvZ1zRt-&>(xlJ$o22@U zMkGo4O4CB>xuv%?odiLUujsN_iLhN=L?BeqdDugfi(HO>a!o>rW$TDWxYWx+QE%~k zKH|M|O~SLdw{^+fo-+gr49Hb z{9w9MTmtW9Y7yfwx6@b#&KC-W6(IY^cwHR$tH9S%FS7=O?1^y~My~_e=pwN1BO%b$ z*#{f=O(lJZ&3cRFoXeJar^@oS;`Rl>g|g=z#pP;I*TruYnu$VpPIs^Jc*c9~!Ra4I zb>L0{d-KQa*q(5As>l2_J-~>4oiD4Ad2<@{`P&`i&rD@BZzIlgH#`F m>A)~+=FFLznGR`Sz;s|qfh|ztfIU#15fFc2U|`e&(jfpEdl!BH literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point.cpg b/test/TestData/arcmap/shp-copy/point.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/point.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/point.dbf b/test/TestData/arcmap/shp-copy/point.dbf new file mode 100644 index 0000000000000000000000000000000000000000..93fe9b2d19d37c312134798b0ed718a46963ef77 GIT binary patch literal 178 zcmZRsWD*fzU|?`$UO{D-2^AlwN literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point.shp b/test/TestData/arcmap/shp-copy/point.shp new file mode 100644 index 0000000000000000000000000000000000000000..b718c0f652aed57b49546efecdd3ccc7cb662e10 GIT binary patch literal 548 zcmaixIS#@w5Ji9339C3kI<7IdfHFtOG1Ac>QBqK(pg@QVQF4p$$IjRUB4Np%pLvFys-c~_+oUp zcwi8i1fQ{CU>Q|;5uQL%sU30qdKs0nXI} za~ktK%>vVz9`C}_?l7nFaW-#dK5o&;bgsZMFbe3q#XGE8tT=r#trGjR_vQ@Vf964h literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point.shx b/test/TestData/arcmap/shp-copy/point.shx new file mode 100644 index 0000000000000000000000000000000000000000..a5cec23bba1dfb2b225a9429da1d4a8b15983434 GIT binary patch literal 228 zcmZQzQ0HR64vJndGcYj1x)sh6Et(u-*Yk5&}j*1t5DIptK*9 pj)BryP`Uz2w?XMCPO{D-2^AlwN literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point_m.shp b/test/TestData/arcmap/shp-copy/point_m.shp new file mode 100644 index 0000000000000000000000000000000000000000..961e42ffca530a3fb578d000e109df613aa4d25b GIT binary patch literal 676 zcmZvaJx>Bb5QYc85KyGCC3a|SZEpSoHd;_zMSXvQgpP*9Xk&qig#|G-kPw1enP_EU z>_|+E1`;c4c;DUIJx-ZqX6JUFduR4Tq>`7VmO1`f71?!b+ESD1rAi4|^G+qis9i-& z*~K}nAG|!%rU4c+@S@RDWYh>bc6Da#XNIp8xMh$S-O!Fs4`1l$4}%HnS>}ng);yzj z4bd=%#$L&+!)>iSWX+BuibU73&O4b6c$yib*^?W^JZwxR3r~8+{}MB{)(4r*e+(vA zvu^B@OfJQo#x;CD-(+}CNiD}fXW^U+p5Yy}ZxwOjeEQVcf?FMTk7S^8P-{K>?hnXp zFJ*Afy>eqx?G4EkJ%dE}KH|M!MMwF!&WOxTiiyrVGp$nTo(#K4_T}Cg_HNJcF_;6A C(vIc; literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point_m.shx b/test/TestData/arcmap/shp-copy/point_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..74a03d8de0cfad0f43d8ad1798cbd399a102a960 GIT binary patch literal 228 zcmZQzQ0HR64vJndGcbt4x)sh6Et(u-*YkqJUX5L13r-*)t&U z#vUkX1jKwm>;k33pmYY5u7c7%PO{D-2^AlwN literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point_zm.shp b/test/TestData/arcmap/shp-copy/point_zm.shp new file mode 100644 index 0000000000000000000000000000000000000000..5ef4fd84ae5af86c5d494b3674a86525ef4f650a GIT binary patch literal 804 zcmZvaJ4gdT5QZndqVb8^*od84r{;65`ux^cp?)pwM9jh=`G@w+l*xO1gz(MqM%c+NHrS6@&0Y4m YU65P1!b(TUJ4F9Gnlb*ddAs}EFW7Fz%>V!Z literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/point_zm.shx b/test/TestData/arcmap/shp-copy/point_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..3a2199a8d1aa99e01114cbdd59776e6ade2d101f GIT binary patch literal 228 zcmZQzQ0HR64vJndGca(&x)sh6Et(u-*Yk0zst1teHS?G6q7= z+-ZOI3<$ij2TB?Nu@De@K_=Mp!5PLy$wpAfzpql^bZKl$OolWptKc~4uH~W JP`U<00|1A-9`^tM literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon.cpg b/test/TestData/arcmap/shp-copy/polygon.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polygon.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polygon.dbf b/test/TestData/arcmap/shp-copy/polygon.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1c60a0eaaa571cda912a6f71dbad3e5b8d1d3b6e GIT binary patch literal 80 scmZRsWD;RwU|?`$U&A;zN}DV)2;uvI&uJvG#bz z$691Pm0l~Buc64;IqYE}PLR1q^#f9>#|`@avqA-%pI+4!R#+V&&k(}40fi$=#wX(} z<9m25ajZ4ItsiLaVsoJpcc=CIfio9Ie&$a!o)PHq)$ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon.shx b/test/TestData/arcmap/shp-copy/polygon.shx new file mode 100644 index 0000000000000000000000000000000000000000..18c831851996c0edf319a6c34bcc2558ab1b7889 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-*Yk5&}j*1r|V@2gJ(& D#$*U0 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon_m.cpg b/test/TestData/arcmap/shp-copy/polygon_m.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polygon_m.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polygon_m.dbf b/test/TestData/arcmap/shp-copy/polygon_m.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1c60a0eaaa571cda912a6f71dbad3e5b8d1d3b6e GIT binary patch literal 80 scmZRsWD;RwU|?`$UD+#8n(YUN3EadZY?s#f4K|?03;55ZJpH`6 zJ9g*d8q^(rXa8!Ap2eAs?qQ3nsxD?w;Fde6nOaLh(_95s@9|9?58HhBKYaJhxPz^H`u_k4c(2+3 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon_m.shx b/test/TestData/arcmap/shp-copy/polygon_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..49932b1e0aab04e6a3b9f4c7935dc3a2d0d3cf47 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-*YkqJakYhgB{1V8I7P Q4nW!nhy#GQ4TwJh06UirDF6Tf literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon_zm.cpg b/test/TestData/arcmap/shp-copy/polygon_zm.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polygon_zm.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polygon_zm.dbf b/test/TestData/arcmap/shp-copy/polygon_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..2a0a3826433297c1c1afb398030f83e5f7f94426 GIT binary patch literal 950 zcmd6j%}&EG497$H&;(2fjT5Kb5m9Vb*p6dp5*Novx;&K1HSY-Zy z3Ac9lng`4luhSwIO?WTnS?Q=!S6tO;wyWz|Ey#R3b?O4S|KTaCloH-+<$YEi-)a`P z{=u3@12_&?_wTp$Lt68LHjcLDhi!b$qRbcX&)qLeaPvp|>*~?vc=a}2y=yUWPM-or zU;x0{{KNtYoN&rU5~3A>>&Tj8{fA87-rZNr&kz413@<~9&>+q4UnU8sKVF7FAJvih szTg1Q`W&-Q&o2f;Yk+#!f*HD#NMg}&nOCfa)Py*A<8KbR{d1Sc-_+b((f|Me literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon_zm.prj b/test/TestData/arcmap/shp-copy/polygon_zm.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polygon_zm.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polygon_zm.shp b/test/TestData/arcmap/shp-copy/polygon_zm.shp new file mode 100644 index 0000000000000000000000000000000000000000..801c0b2e9d4a5cfa3171a5aee64e320277fc7059 GIT binary patch literal 960 zcmZuwJxc>Y5S^%vf~fx>AgG94{OHV7v9{85sg9%zmR46-q!4TZnnnc+ixeU@+NBjN z1pmO<2^Ri@^SyOvvv=M=^7g%%xt*Pz6jGvm#68(+hP=y-``lYVf4e0qTQ_ z+>S=0m!@nt8jX)OczW=8de($jBs&3@8h+h>-|FAfC(^%E$?`lu8Y=_moap}|pHr+3 z%O&@@&L78jlO$=O9;?gv8|=J7XWVK}1!+kOSmLM<_LB!)WClmucjr><&fd@}dc-rW zIOpH_=CNKRw_b8>dBaB~4V=BE4eqABClCAK4m#w#ix^Q4l@J&4P8=8I*P(MC>#1?b zVm&98{l*!0JXS&>o}AyMnZL~4_x&s}E>#V)C0CfSSIm^VOkflzYlx$5r~}#bxaHCO zJD%@)-1BI9({t_%bNh2ay*$&#Cz$mi>Pf#3pRbA2*;l>=Sn6@o)-XfV&0oi?Io>P! PO@DW9Ncfft`Otp>!$RC8 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polygon_zm.shx b/test/TestData/arcmap/shp-copy/polygon_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..7d71e16fb6ac071cf6231401f181bb1d8e103852 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-<`zVZqFqGk4lEm>3%y hUycOw8{8jOwb%n?85kZE0r?C@K%4=@^B5Qy?EoAF5;y<= literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polyline.cpg b/test/TestData/arcmap/shp-copy/polyline.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polyline.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polyline.dbf b/test/TestData/arcmap/shp-copy/polyline.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1c60a0eaaa571cda912a6f71dbad3e5b8d1d3b6e GIT binary patch literal 80 scmZRsWD;RwU|?`$U2snT}j0Im~}tz{AA<+ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polyline.shx b/test/TestData/arcmap/shp-copy/polyline.shx new file mode 100644 index 0000000000000000000000000000000000000000..7ff6dcfbb8fa4215e10edb6c512712bfc39af26c GIT binary patch literal 116 zcmZQzQ0HR64y;}E=yM|BV%!W6xSyfdh6DV*kIOCRa!Q*xKS>bp#@Ok_hWv{@;JLRwd zGf;jji~hS?%0c3Jeue8V)CpR8t7OTWRpVA5>w4E|cZIz-vi;on1%eG$?p>ou;dZ>^9^;kAd*qmI^BzjKdB=)7oj__XURd`^oNwcB|NJa8e_&J2 u$e1%y{v5yEOQ)GZzrMGOdfHEar+m)$iaHM2-->ttXP7-R&S1(*p8kInO1x)sh6Et(u-*YkqJakYhgB{1V8I7P Q4nW!nhy#GQ4TwJh06OmtCjbBd literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/polyline_zm.cpg b/test/TestData/arcmap/shp-copy/polyline_zm.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/polyline_zm.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/polyline_zm.dbf b/test/TestData/arcmap/shp-copy/polyline_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1c60a0eaaa571cda912a6f71dbad3e5b8d1d3b6e GIT binary patch literal 80 scmZRsWD;RwU|?`$Uo5ZtH;3W9<^AeD-UP5kK0+C&5!D~(mEBk4lyw7D{cU=z@@P(i^WU?RnI=XVB*=$xHDP zb)T22&qC)pzNel;7Tx)sh6Et(u-<`zVZqFqGk4kpc?=8% d*Ma;4?hmV`K==&BKt6*J5N81KJO&0vI{^6#5cL26 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/pt_date.cpg b/test/TestData/arcmap/shp-copy/pt_date.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/pt_date.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/pt_date.dbf b/test/TestData/arcmap/shp-copy/pt_date.dbf new file mode 100644 index 0000000000000000000000000000000000000000..b8ae18fc723bddb5b15f6005d3e07813cb1846f9 GIT binary patch literal 235 zcmZRsWD;R!U|?uuPzI8iz%vCd<_BW2!MPAdN@7VWRLBKHb3i#TswB0d1j=>>(IPMj zD9x(?1_m%;2p1b^U}RuqXkch)dZgt@>yfr2?Z`CL6hjM3OG6`L10XjsF%i`iDFE6$ B9|Zsa literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/pt_date.shp b/test/TestData/arcmap/shp-copy/pt_date.shp new file mode 100644 index 0000000000000000000000000000000000000000..66b0b76cb576ac46b2d11d7c1a23d808cede99b8 GIT binary patch literal 184 zcmZQzQ0HR64q{#~GcYg$<^Hv9`{=dO-tjQ6@YG4iqaBN))l?Vkuy+iW*%ff_bhIOO r?I@xkW4MsbLek3wlRGD0{j_GIz2o2b_7?|Eg3SfG0HP0OC(I21JH99T literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/pt_date.shx b/test/TestData/arcmap/shp-copy/pt_date.shx new file mode 100644 index 0000000000000000000000000000000000000000..16477881e4d718c40c628644a18c69efca12e8f2 GIT binary patch literal 124 zcmZQzQ0HR64(whqGcYg$<^Hv9`{=dO-tjQ6@YG4iqaBN))l?Vkuy+iW*%ff_bhIOO R?I@x~Kpw~*2Po|aq5;e<5b^*3 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/pt_utf8.cpg b/test/TestData/arcmap/shp-copy/pt_utf8.cpg new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp-copy/pt_utf8.cpg @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/pt_utf8.dbf b/test/TestData/arcmap/shp-copy/pt_utf8.dbf new file mode 100644 index 0000000000000000000000000000000000000000..688eb654d54159f68ae0dd60bcb3187b89610f08 GIT binary patch literal 2562 zcmeH`&q~8U5XNh(B1%u~$y4rP*i9PLqgI4oe1(v)y&`a0_g3_l~WVgLCL z9Q8HqM+0j4boDS^C>#L1=hRi`qKefnsFzf?LF8XuhjNd!IE|xNDQ% cG^lPO?`)LH`x=Imp_jkquUy&Ip$>@SFMZ4{00000 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp-copy/pt_utf8.prj b/test/TestData/arcmap/shp-copy/pt_utf8.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/test/TestData/arcmap/shp-copy/pt_utf8.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/test/TestData/arcmap/shp-copy/pt_utf8.shp b/test/TestData/arcmap/shp-copy/pt_utf8.shp new file mode 100644 index 0000000000000000000000000000000000000000..b43a96c6159e87c280c6f0203ae3a597f4818f38 GIT binary patch literal 276 zcmZQzQ0HR64!T}2Gca%iO8){6%t#q-8hyZ8|N&(c6xG5OHV?R$A(Hstx-%-3o3vqxT(M^6U5i zh3**%PWcUGH73(}P uwP6)u1d8(f2Lh-p6OaapF+(wk&jOW)iSYoHfYdP7wbr)*X`mV~p9KKgz8*FJ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/fields_utf8.sbx b/test/TestData/arcmap/shp/fields_utf8.sbx new file mode 100644 index 0000000000000000000000000000000000000000..dd1c950568fd34ab8af44f6519d8cae15c6ebf44 GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nvu{hc<-|~1u#a_qg{Y~W;=kIj1-*3ZpH73(}P VwP6)80*dkgu@exp0I?T{4*;RO6uSTb literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/fields_utf8.shp b/test/TestData/arcmap/shp/fields_utf8.shp new file mode 100644 index 0000000000000000000000000000000000000000..d1a101909f708ea0552c00eb6be618a6f3c43403 GIT binary patch literal 212 zcmZQzQ0HR64zgY_GcYg$<@Q!gc)Vq~z2naL7t5RWM>{gUIKpMK-`>%4U4`+v!_kh| zwWElFjN!s&7EqiCCO5NX`GT;`_KsKE+qWG&2sRh!0*F2=cCx_a{)54L2=)K{e*i%U BIy3+P literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/fields_utf8.shp.xml b/test/TestData/arcmap/shp/fields_utf8.shp.xml new file mode 100644 index 0000000..fb4b3f6 --- /dev/null +++ b/test/TestData/arcmap/shp/fields_utf8.shp.xml @@ -0,0 +1,2 @@ + +20210212131426001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\dbf\fields_utf8Local Area Network diff --git a/test/TestData/arcmap/shp/fields_utf8.shx b/test/TestData/arcmap/shp/fields_utf8.shx new file mode 100644 index 0000000000000000000000000000000000000000..c93da43236371c731789a5a4349e433ef3d448ca GIT binary patch literal 132 zcmZQzQ0HR64xC;vGcYg$<@Q!gc)Vq~z2naL7t5RWM>{gUIKpMK-`>%4U4`+v!_kh| UwWEj{0eK*M9H6uxl#T(>0K%>kr2qf` literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint.CPG b/test/TestData/arcmap/shp/multipoint.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/multipoint.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/multipoint.dbf b/test/TestData/arcmap/shp/multipoint.dbf new file mode 100644 index 0000000000000000000000000000000000000000..0e3324cd058382afab73de56a596959412d4f1e6 GIT binary patch literal 80 scmZRsWMXDwU|?`$UhI)kqAUOb@kP?Id literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint.sbx b/test/TestData/arcmap/shp/multipoint.sbx new file mode 100644 index 0000000000000000000000000000000000000000..b8ccaff3bb82c95a46e7cc05f4cfd924cf1e0344 GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nvF*)?x|9=2vILvoo5CGAeI~X`X^m+#{4P+7njDU)GfY=F$ KS%BCJL<0c&T?>W) literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint.shp b/test/TestData/arcmap/shp/multipoint.shp new file mode 100644 index 0000000000000000000000000000000000000000..30a2079cb10135e29b8000cd34739d732fb0fdc1 GIT binary patch literal 452 zcmZQzQ0HR64j#Q=W?sR|V1V!i7$R1K_~_y=K1?1)g|Fn6Qq0RVP-PXGV_ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint.shp.xml b/test/TestData/arcmap/shp/multipoint.shp.xml new file mode 100644 index 0000000..4cd6148 --- /dev/null +++ b/test/TestData/arcmap/shp/multipoint.shp.xml @@ -0,0 +1,2 @@ + +20210204144206001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\multipointLocal Area Network diff --git a/test/TestData/arcmap/shp/multipoint.shx b/test/TestData/arcmap/shp/multipoint.shx new file mode 100644 index 0000000000000000000000000000000000000000..39c884bf496b29a12eeac81667dcc7d7fe05a22e GIT binary patch literal 116 zcmZQzQ0HR64y;}mb-3sHwXaS(cDH}1v1EwAkK4AN+Mb^1L zteRpE3y=R`@cutce1}}?>%blJ>>>Om_OoV!z)E|F_&WPHfgsjKsQeatV4wm+b~{wv zPJ7Lm{zG3i_CVF|gWCgiB@+-kpv561Y(Sw>FdamK!vYx9$ngwO1B-X48en*%=z+yE O#J!9MVE%&fVe$YGQ?myE literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint_m.shp.xml b/test/TestData/arcmap/shp/multipoint_m.shp.xml new file mode 100644 index 0000000..b86d47f --- /dev/null +++ b/test/TestData/arcmap/shp/multipoint_m.shp.xml @@ -0,0 +1,2 @@ + +20210204144209001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\multipoint_mLocal Area Network diff --git a/test/TestData/arcmap/shp/multipoint_m.shx b/test/TestData/arcmap/shp/multipoint_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..f236289343efba5f2175dc34b77435c861ca056d GIT binary patch literal 116 zcmZQzQ0HR64y;}U0-~_9w=!9#5;ia9S}PJ05^XUD*ylh literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/multipoint_zm.CPG b/test/TestData/arcmap/shp/multipoint_zm.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/multipoint_zm.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/multipoint_zm.dbf b/test/TestData/arcmap/shp/multipoint_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..bd50830f705ccdf0501178c5db4a6511c44489dc GIT binary patch literal 80 scmZRsWMW}rU|?`$UY5S@!n2na!}LqO1^j-|5eXKVu&3f93?ramo12&79Bkh9Pt0TCe@6pSEp z_$O?WPB_6Pg5CLMcPH_4Vej#F-p=g38KSuq{kgoOmkFXNjvZ1zRt-&>(xlJ$o22@U zMkGo4O4CB>xuv%?odiLUujsN_iLhN=L?BeqdDugfi(HO>a!o>rW$TDWxYWx+QE%~k zKH|M|O~SLdw{^+fo-+gr49Hb z{9w9MTmtW9Y7yfwx6@b#&KC-W6(IY^cwHR$tH9S%FS7=O?1^y~My~_e=pwN1BO%b$ z*#{f=O(lJZ&3cRFoXeJar^@oS;`Rl>g|g=z#pP;I*TruYnu$VpPIs^Jc*c9~!Ra4I zb>L0{d-KQa*q(5As>l2_J-~>4oiD4Ad2<@{`P&`i&rD@BZzIlgH# +20210203175105001.0FALSECalculateField multipoint_zm Id "101" VB #CalculateField multipoint_zm Id 102 VB #CalculateField multipoint_zm Id 202 VB #Dissolve multipoint_zm D:\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\multipoint\multipoint_zm2.shp Id # MULTI_PART DISSOLVE_LINESmultipoint_zm20020.000file://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\multipoint_zmLocal Area Network20210203175249002021020317524900 Version 6.2 (Build 9200) ; Esri ArcGIS 10.6.1.9328multipoint_zm2Shapefile0.000dataset0SimpleFALSE0TRUETRUEmultipoint_zm2Feature Class0FIDFIDOID400Internal feature number.EsriSequential unique whole numbers that are automatically generated.ShapeShapeGeometry000Feature geometry.EsriCoordinates defining the features.IdIdInteger66020210203 diff --git a/test/TestData/arcmap/shp/multipoint_zm.shx b/test/TestData/arcmap/shp/multipoint_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..1d1d20f3906efe84afeba2f8c455b04519ed8884 GIT binary patch literal 116 zcmZQzQ0HR64y;}`F m>A)~+=FFLznGR`Sz;s|qfh|ztfIU#15fFc2U|`e&(jfpEdl!BH literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point.CPG b/test/TestData/arcmap/shp/point.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/point.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/point.dbf b/test/TestData/arcmap/shp/point.dbf new file mode 100644 index 0000000000000000000000000000000000000000..1ea25893c5cb97d25bef597c3aa30d8e0f17415e GIT binary patch literal 178 zcmZRsWMURzU|?`$UO{D+?R1;JH literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point.sbn b/test/TestData/arcmap/shp/point.sbn new file mode 100644 index 0000000000000000000000000000000000000000..0fb3ec06ff8bf5d650e3f5c4c81d5365aa61574b GIT binary patch literal 276 zcma)!!41MN6hnVnptKa|07!5^VvPJv+7Z|wIU+8M&~Cti0n$xi5{sTExi&H8HOzmGsQKP`QTDSobP=4lsT;vXNRcdpj|wg&Ip)ni9muT&7s2KO D7Y!`a literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point.sbx b/test/TestData/arcmap/shp/point.sbx new file mode 100644 index 0000000000000000000000000000000000000000..2b2fb300e81ecc32de2736eab762d688863cea0e GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nv2{`mSfMp!!L+Q;OAYlfF^&ox%5EBKAfU0QBqK(pg@QVQF4p$$IjRUB4Np%pLvFys-c~_+oUp zcwi8i1fQ{CU>Q|;5uQL%sU30qdKs0nXI} za~ktK%>vVz9`C}_?l7nFaW-#dK5o&;bgsZMFbe3q#XGE8tT=r#trGjR_vQ@Vf964h literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point.shp.xml b/test/TestData/arcmap/shp/point.shp.xml new file mode 100644 index 0000000..541c5f2 --- /dev/null +++ b/test/TestData/arcmap/shp/point.shp.xml @@ -0,0 +1,2 @@ + +20210204144149001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\pointLocal Area Network diff --git a/test/TestData/arcmap/shp/point.shx b/test/TestData/arcmap/shp/point.shx new file mode 100644 index 0000000000000000000000000000000000000000..a5cec23bba1dfb2b225a9429da1d4a8b15983434 GIT binary patch literal 228 zcmZQzQ0HR64vJndGcYj1x)sh6Et(u-*Yk5&}j*1t5DIptK*9 pj)BryP`Uz2w?XMCPO{D+?R1;JH literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_m.sbn b/test/TestData/arcmap/shp/point_m.sbn new file mode 100644 index 0000000000000000000000000000000000000000..0fb3ec06ff8bf5d650e3f5c4c81d5365aa61574b GIT binary patch literal 276 zcma)!!41MN6hnVnptKa|07!5^VvPJv+7Z|wIU+8M&~Cti0n$xi5{sTExi&H8HOzmGsQKP`QTDSobP=4lsT;vXNRcdpj|wg&Ip)ni9muT&7s2KO D7Y!`a literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_m.sbx b/test/TestData/arcmap/shp/point_m.sbx new file mode 100644 index 0000000000000000000000000000000000000000..2b2fb300e81ecc32de2736eab762d688863cea0e GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nv2{`mSfMp!!L+Q;OAYlfF^&ox%5EBKAfU0Bb5QYc85KyGCC3a|SZEpSoHd;_zMSXvQgpP*9Xk&qig#|G-kPw1enP_EU z>_|+E1`;c4c;DUIJx-ZqX6JUFduR4Tq>`7VmO1`f71?!b+ESD1rAi4|^G+qis9i-& z*~K}nAG|!%rU4c+@S@RDWYh>bc6Da#XNIp8xMh$S-O!Fs4`1l$4}%HnS>}ng);yzj z4bd=%#$L&+!)>iSWX+BuibU73&O4b6c$yib*^?W^JZwxR3r~8+{}MB{)(4r*e+(vA zvu^B@OfJQo#x;CD-(+}CNiD}fXW^U+p5Yy}ZxwOjeEQVcf?FMTk7S^8P-{K>?hnXp zFJ*Afy>eqx?G4EkJ%dE}KH|M!MMwF!&WOxTiiyrVGp$nTo(#K4_T}Cg_HNJcF_;6A C(vIc; literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_m.shp.xml b/test/TestData/arcmap/shp/point_m.shp.xml new file mode 100644 index 0000000..9762952 --- /dev/null +++ b/test/TestData/arcmap/shp/point_m.shp.xml @@ -0,0 +1,2 @@ + +20210204144201001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\point_mLocal Area Network diff --git a/test/TestData/arcmap/shp/point_m.shx b/test/TestData/arcmap/shp/point_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..74a03d8de0cfad0f43d8ad1798cbd399a102a960 GIT binary patch literal 228 zcmZQzQ0HR64vJndGcbt4x)sh6Et(u-*YkqJUX5L13r-*)t&U z#vUkX1jKwm>;k33pmYY5u7c7%PO{D+?R1;JH literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_zm.sbn b/test/TestData/arcmap/shp/point_zm.sbn new file mode 100644 index 0000000000000000000000000000000000000000..0fb3ec06ff8bf5d650e3f5c4c81d5365aa61574b GIT binary patch literal 276 zcma)!!41MN6hnVnptKa|07!5^VvPJv+7Z|wIU+8M&~Cti0n$xi5{sTExi&H8HOzmGsQKP`QTDSobP=4lsT;vXNRcdpj|wg&Ip)ni9muT&7s2KO D7Y!`a literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_zm.sbx b/test/TestData/arcmap/shp/point_zm.sbx new file mode 100644 index 0000000000000000000000000000000000000000..2b2fb300e81ecc32de2736eab762d688863cea0e GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nv2{`mSfMp!!L+Q;OAYlfF^&ox%5EBKAfU0{;65`ux^cp?)pwM9jh=`G@w+l*xO1gz(MqM%c+NHrS6@&0Y4m YU65P1!b(TUJ4F9Gnlb*ddAs}EFW7Fz%>V!Z literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/point_zm.shp.xml b/test/TestData/arcmap/shp/point_zm.shp.xml new file mode 100644 index 0000000..2304810 --- /dev/null +++ b/test/TestData/arcmap/shp/point_zm.shp.xml @@ -0,0 +1,2 @@ + +20210203173426001.0TRUECalculateField point_zm Id "[FID] * 100" VB #CalculateField point_zm Id "[FID] * 100" VB #CalculateField point_zm Id "[FID] + 100" VB #file://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\point_zmLocal Area Network diff --git a/test/TestData/arcmap/shp/point_zm.shx b/test/TestData/arcmap/shp/point_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..3a2199a8d1aa99e01114cbdd59776e6ade2d101f GIT binary patch literal 228 zcmZQzQ0HR64vJndGca(&x)sh6Et(u-*Yk0zst1teHS?G6q7= z+-ZOI3<$ij2TB?Nu@De@K_=Mp!5PLy$wpAfzpql^bZKl$OolWptKc~4uH~W JP`U<00|1A-9`^tM literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon.CPG b/test/TestData/arcmap/shp/polygon.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/polygon.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polygon.dbf b/test/TestData/arcmap/shp/polygon.dbf new file mode 100644 index 0000000000000000000000000000000000000000..25dd80ce66336a4441c37e09139116b028354c5b GIT binary patch literal 80 scmZRsWMXDwU|?`$UnLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon.shp b/test/TestData/arcmap/shp/polygon.shp new file mode 100644 index 0000000000000000000000000000000000000000..8405ba3ae93f50e63a04b119b52b84d1591aaab0 GIT binary patch literal 560 zcmah_IS#@=40JdOkdUCGq~i;e^9v~Rgghf14H6{<5)>&A;zN}DV)2;uvI&uJvG#bz z$691Pm0l~Buc64;IqYE}PLR1q^#f9>#|`@avqA-%pI+4!R#+V&&k(}40fi$=#wX(} z<9m25ajZ4ItsiLaVsoJpcc=CIfio9Ie&$a!o)PHq)$ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon.shp.xml b/test/TestData/arcmap/shp/polygon.shp.xml new file mode 100644 index 0000000..f55e53a --- /dev/null +++ b/test/TestData/arcmap/shp/polygon.shp.xml @@ -0,0 +1,2 @@ + +20210204144138001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\polygonLocal Area Network diff --git a/test/TestData/arcmap/shp/polygon.shx b/test/TestData/arcmap/shp/polygon.shx new file mode 100644 index 0000000000000000000000000000000000000000..18c831851996c0edf319a6c34bcc2558ab1b7889 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-*Yk5&}j*1r|V@2gJ(& D#$*U0 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_m.CPG b/test/TestData/arcmap/shp/polygon_m.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/polygon_m.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polygon_m.dbf b/test/TestData/arcmap/shp/polygon_m.dbf new file mode 100644 index 0000000000000000000000000000000000000000..25dd80ce66336a4441c37e09139116b028354c5b GIT binary patch literal 80 scmZRsWMXDwU|?`$UnLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_m.shp b/test/TestData/arcmap/shp/polygon_m.shp new file mode 100644 index 0000000000000000000000000000000000000000..2c75a4f0df8d20f747599c5968adacd24322c428 GIT binary patch literal 760 zcmZuvp-uxq5S;=Bk|rQ=O%Qy*;du%yD5$FD+#8n(YUN3EadZY?s#f4K|?03;55ZJpH`6 zJ9g*d8q^(rXa8!Ap2eAs?qQ3nsxD?w;Fde6nOaLh(_95s@9|9?58HhBKYaJhxPz^H`u_k4c(2+3 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_m.shp.xml b/test/TestData/arcmap/shp/polygon_m.shp.xml new file mode 100644 index 0000000..863d3fa --- /dev/null +++ b/test/TestData/arcmap/shp/polygon_m.shp.xml @@ -0,0 +1,2 @@ + +20210204144141001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\polygon_mLocal Area Network diff --git a/test/TestData/arcmap/shp/polygon_m.shx b/test/TestData/arcmap/shp/polygon_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..49932b1e0aab04e6a3b9f4c7935dc3a2d0d3cf47 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-*YkqJakYhgB{1V8I7P Q4nW!nhy#GQ4TwJh06UirDF6Tf literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_zm.CPG b/test/TestData/arcmap/shp/polygon_zm.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/polygon_zm.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polygon_zm.dbf b/test/TestData/arcmap/shp/polygon_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..7fda6c7e82e9b23762db65a25d160cb05c68b8e3 GIT binary patch literal 950 zcmd6j%}&EG497$H6fhyQ8>ie6QEXP&j$>%jE}Vf2>a~JPo#! zbTm}riYwLj|7RzTHz=8yK*(Zj3J>TSAu*J9wDJ_Cxt z0D!gmsRa@^;gpReL@NTIcuUHMK332eo-yCxL=Ppma0i?xT#Q*>R literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_zm.prj b/test/TestData/arcmap/shp/polygon_zm.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/test/TestData/arcmap/shp/polygon_zm.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polygon_zm.sbn b/test/TestData/arcmap/shp/polygon_zm.sbn new file mode 100644 index 0000000000000000000000000000000000000000..5337cd1e0324d1b805b093638ec58a1a32df6a01 GIT binary patch literal 164 zcmZQzQ0Myp|6c(ECI|uwF*)=*fMp!!L+Q;OK)wKj!+H=u0f>nLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_zm.shp b/test/TestData/arcmap/shp/polygon_zm.shp new file mode 100644 index 0000000000000000000000000000000000000000..801c0b2e9d4a5cfa3171a5aee64e320277fc7059 GIT binary patch literal 960 zcmZuwJxc>Y5S^%vf~fx>AgG94{OHV7v9{85sg9%zmR46-q!4TZnnnc+ixeU@+NBjN z1pmO<2^Ri@^SyOvvv=M=^7g%%xt*Pz6jGvm#68(+hP=y-``lYVf4e0qTQ_ z+>S=0m!@nt8jX)OczW=8de($jBs&3@8h+h>-|FAfC(^%E$?`lu8Y=_moap}|pHr+3 z%O&@@&L78jlO$=O9;?gv8|=J7XWVK}1!+kOSmLM<_LB!)WClmucjr><&fd@}dc-rW zIOpH_=CNKRw_b8>dBaB~4V=BE4eqABClCAK4m#w#ix^Q4l@J&4P8=8I*P(MC>#1?b zVm&98{l*!0JXS&>o}AyMnZL~4_x&s}E>#V)C0CfSSIm^VOkflzYlx$5r~}#bxaHCO zJD%@)-1BI9({t_%bNh2ay*$&#Cz$mi>Pf#3pRbA2*;l>=Sn6@o)-XfV&0oi?Io>P! PO@DW9Ncfft`Otp>!$RC8 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polygon_zm.shx b/test/TestData/arcmap/shp/polygon_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..7d71e16fb6ac071cf6231401f181bb1d8e103852 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-<`zVZqFqGk4lEm>3%y hUycOw8{8jOwb%n?85kZE0r?C@K%4=@^B5Qy?EoAF5;y<= literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline.CPG b/test/TestData/arcmap/shp/polyline.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/polyline.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polyline.dbf b/test/TestData/arcmap/shp/polyline.dbf new file mode 100644 index 0000000000000000000000000000000000000000..25dd80ce66336a4441c37e09139116b028354c5b GIT binary patch literal 80 scmZRsWMXDwU|?`$UnLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline.shp b/test/TestData/arcmap/shp/polyline.shp new file mode 100644 index 0000000000000000000000000000000000000000..f90fb44953b9e12a3c89b39b024113f0f9c4cefb GIT binary patch literal 560 zcmah_yA8rn40M17BqZo4=~#jCwtzAtWQ=q)NR$*vP^3VJg(%q~+&OVbLL{uGXP2snT}j0Im~}tz{AA<+ literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline.shp.xml b/test/TestData/arcmap/shp/polyline.shp.xml new file mode 100644 index 0000000..54b71b5 --- /dev/null +++ b/test/TestData/arcmap/shp/polyline.shp.xml @@ -0,0 +1,2 @@ + +20210204144124001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\polylineLocal Area Network diff --git a/test/TestData/arcmap/shp/polyline.shx b/test/TestData/arcmap/shp/polyline.shx new file mode 100644 index 0000000000000000000000000000000000000000..7ff6dcfbb8fa4215e10edb6c512712bfc39af26c GIT binary patch literal 116 zcmZQzQ0HR64y;}z>% literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline_m.prj b/test/TestData/arcmap/shp/polyline_m.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/test/TestData/arcmap/shp/polyline_m.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polyline_m.sbn b/test/TestData/arcmap/shp/polyline_m.sbn new file mode 100644 index 0000000000000000000000000000000000000000..5337cd1e0324d1b805b093638ec58a1a32df6a01 GIT binary patch literal 164 zcmZQzQ0Myp|6c(ECI|uwF*)=*fMp!!L+Q;OK)wKj!+H=u0f>nLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline_m.shp b/test/TestData/arcmap/shp/polyline_m.shp new file mode 100644 index 0000000000000000000000000000000000000000..6fa441029512e44a1c05d54d4ef5e22b4cd4b785 GIT binary patch literal 760 zcmZuvp-uxq5S;=Bk|vE=yM|BV%!W6xSyfdh6DV*kIOCRa!Q*xKS>bp#@Ok_hWv{@;JLRwd zGf;jji~hS?%0c3Jeue8V)CpR8t7OTWRpVA5>w4E|cZIz-vi;on1%eG$?p>ou;dZ>^9^;kAd*qmI^BzjKdB=)7oj__XURd`^oNwcB|NJa8e_&J2 u$e1%y{v5yEOQ)GZzrMGOdfHEar+m)$iaHM2-->ttXP7-R&S1(*p8kInO1 +20210204144129001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\polyline_mLocal Area Network diff --git a/test/TestData/arcmap/shp/polyline_m.shx b/test/TestData/arcmap/shp/polyline_m.shx new file mode 100644 index 0000000000000000000000000000000000000000..3e24db46570abf15ff023665b7dc9f87230f939b GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-*YkqJakYhgB{1V8I7P Q4nW!nhy#GQ4TwJh06OmtCjbBd literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline_zm.CPG b/test/TestData/arcmap/shp/polyline_zm.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/polyline_zm.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polyline_zm.dbf b/test/TestData/arcmap/shp/polyline_zm.dbf new file mode 100644 index 0000000000000000000000000000000000000000..0b8d06f7169e9bb2108d40287395d5ac673c60cf GIT binary patch literal 80 scmZRsWMW}rU|?`$Uz>% literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline_zm.prj b/test/TestData/arcmap/shp/polyline_zm.prj new file mode 100644 index 0000000..5c6f76d --- /dev/null +++ b/test/TestData/arcmap/shp/polyline_zm.prj @@ -0,0 +1 @@ +PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]] \ No newline at end of file diff --git a/test/TestData/arcmap/shp/polyline_zm.sbn b/test/TestData/arcmap/shp/polyline_zm.sbn new file mode 100644 index 0000000000000000000000000000000000000000..5337cd1e0324d1b805b093638ec58a1a32df6a01 GIT binary patch literal 164 zcmZQzQ0Myp|6c(ECI|uwF*)=*fMp!!L+Q;OK)wKj!+H=u0f>nLj6hX9K+FWhjQ@cE bs*4%Khl;bnLMnF|OKEI{l9 Fq5)@c3HSg2 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/polyline_zm.shp b/test/TestData/arcmap/shp/polyline_zm.shp new file mode 100644 index 0000000000000000000000000000000000000000..534e53c1f14e49992e10bb35eb4c1d503c6c9c2f GIT binary patch literal 960 zcmZuwJxc>o5ZtH;3W9<^AeD-UP5kK0+C&5!D~(mEBk4lyw7D{cU=z@@P(i^WU?RnI=XVB*=$xHDP zb)T22&qC)pzNel;7T +20210204144133001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\shp\polyline_zmLocal Area Network diff --git a/test/TestData/arcmap/shp/polyline_zm.shx b/test/TestData/arcmap/shp/polyline_zm.shx new file mode 100644 index 0000000000000000000000000000000000000000..95b2d186a3af52e07fdd9a88cc7d619c4e53bc27 GIT binary patch literal 116 zcmZQzQ0HR64y;}x)sh6Et(u-<`zVZqFqGk4kpc?=8% d*Ma;4?hmV`K==&BKt6*J5N81KJO&0vI{^6#5cL26 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/pt_date.CPG b/test/TestData/arcmap/shp/pt_date.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/pt_date.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/pt_date.dbf b/test/TestData/arcmap/shp/pt_date.dbf new file mode 100644 index 0000000000000000000000000000000000000000..7bf6f49f0451af8b1f0972709d403227c7032937 GIT binary patch literal 235 zcmZRsWa43FU|?uuPzI8iz%vCd<_BW2!MPAdN@7VWRLBKHb3i#TswB0d1j=>>(IPMj zD9x(?1_lrcA8BA@U}R`uXlQz*;%LdK +20210212131444001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\dbf\pt_dateLocal Area Network diff --git a/test/TestData/arcmap/shp/pt_date.shx b/test/TestData/arcmap/shp/pt_date.shx new file mode 100644 index 0000000000000000000000000000000000000000..16477881e4d718c40c628644a18c69efca12e8f2 GIT binary patch literal 124 zcmZQzQ0HR64(whqGcYg$<^Hv9`{=dO-tjQ6@YG4iqaBN))l?Vkuy+iW*%ff_bhIOO R?I@x~Kpw~*2Po|aq5;e<5b^*3 literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/pt_utf8.CPG b/test/TestData/arcmap/shp/pt_utf8.CPG new file mode 100644 index 0000000..3ad133c --- /dev/null +++ b/test/TestData/arcmap/shp/pt_utf8.CPG @@ -0,0 +1 @@ +UTF-8 \ No newline at end of file diff --git a/test/TestData/arcmap/shp/pt_utf8.dbf b/test/TestData/arcmap/shp/pt_utf8.dbf new file mode 100644 index 0000000000000000000000000000000000000000..4263ce41f58a207c3ab0f3f45f19bab617cff170 GIT binary patch literal 2562 zcmeH`&q~8U5XSpQMU>*9o;>9)hTWt=J!(bh#a9SvyM;n+g+$Q1f1bm4$wT-w;?B3} zbi0O>;=zMi==PiMmmOwjlJ;}+Xs6L=e6&8B`tQdYjM=&)wa1|m>2#jOJ!o*sWiRju z4*0GOwN3~6ycFbuAGng0uQ(t>Mf#K(5R-C`s zz)@etc{HGuj~9=_nZgCYyH5QDrvj@u6(X8Xv_LKBVYc}T!UbE%|+FMJ5Y>_{veBZ8Jg!-rhU$uE9Baw dw+-wsu}HkZGNpv!sPEn?( CtsoWv literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/pt_utf8.sbx b/test/TestData/arcmap/shp/pt_utf8.sbx new file mode 100644 index 0000000000000000000000000000000000000000..aff1b3744be50edc815f59b2f79805136635de91 GIT binary patch literal 124 zcmZQzQ0Myp|6c(ECa?nvu{hd$W~~+o(R7SnlzpN6)GkN+_oqUCKR)Uh{qFf%rNtbW U+OUck0Y!O$*a?V1di+2%0DjpNxc~qF literal 0 HcmV?d00001 diff --git a/test/TestData/arcmap/shp/pt_utf8.shp b/test/TestData/arcmap/shp/pt_utf8.shp new file mode 100644 index 0000000000000000000000000000000000000000..b43a96c6159e87c280c6f0203ae3a597f4818f38 GIT binary patch literal 276 zcmZQzQ0HR64!T}2Gca%i +20210204144233001.0TRUEfile://\\DELL5490\Work.Dev\VS\Coordinatus.NET\NetTopologySuite.IO.Esri\test\TestData\arcmap\dbf\pt_utf8Local Area Network diff --git a/test/TestData/arcmap/shp/pt_utf8.shx b/test/TestData/arcmap/shp/pt_utf8.shx new file mode 100644 index 0000000000000000000000000000000000000000..76a0c7623591a6b68e65addca8aa2d816018ab89 GIT binary patch literal 132 zcmZQzQ0HR64xC;vGca%i#;{s9=@@}DG>}Xc6ijdi Pl1T_iZUhDn)XP!;(-EnI literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd.shp b/test/TestData/temp/abcd.shp new file mode 100644 index 0000000000000000000000000000000000000000..ab6ae8c9b26789bae12d507df53ca1ac9d8e7557 GIT binary patch literal 516 zcmZ`#I}U{~3=5y(iHU)Mft{5byxg4YFmeQ35-Y6~qPE73jiZX}lcd%4*C2xBb)WV@ z+|)SHWjS=XKED4otJ!8P!qC09-V;aW6T=I2k6q<}HMOYGCCT}DkJuPN!V6MHta9$Z osfnu^Uz40>UdZSnh8N8dyUO7k5c&37lGDsv#?f-1^gSiK544>cPXGV_ literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd.shx b/test/TestData/temp/abcd.shx new file mode 100644 index 0000000000000000000000000000000000000000..6c6b2ad2622ceab6eee875cad99ad9eee61b3c97 GIT binary patch literal 132 ycmZQzQ0HR64xC;vGcW)V6nxkZVZdk^2M8ZVLzQ8tjDW%hK%54pXF=(6AQ}J)vj{i< literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd1.dbf b/test/TestData/temp/abcd1.dbf new file mode 100644 index 0000000000000000000000000000000000000000..cb27a2eef64714ed5ea40c010f9d7d757d06afaf GIT binary patch literal 1370 zcmZRsWD;dzU|=}NpvDNKFhELTNh(y(1w?b8sYuJoPb`6mxq&EQZd3)Cc~Dsf20xGt znlwXBetKqdVh%{k2SlJdq9nBfW`HwD{vU`y0=x=F20&nFV5Fd6s0U&~L8`8Sp#mHj zx`8C&+>ytChLW*@f)VaeG714nj=aEu`xqKZCJGA1xI@X<4I~NIGx8YFP%>3eFu@&4 PCLtinkry~HA4>rMbpEOZ literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd1.shp b/test/TestData/temp/abcd1.shp new file mode 100644 index 0000000000000000000000000000000000000000..8883da963ed1e0b76944d7273e5b89b6bfb704d2 GIT binary patch literal 516 zcmZ{gyA6Oa3`CDlfv8fj11%fi{U@Ph1Y*b&Au#;{s9=@@}DG>}Xc6ijdi Pl1T_iZUhDn)XP!;(-EnI literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd2.shp b/test/TestData/temp/abcd2.shp new file mode 100644 index 0000000000000000000000000000000000000000..8883da963ed1e0b76944d7273e5b89b6bfb704d2 GIT binary patch literal 516 zcmZ{gyA6Oa3`CDlfv8fj11%fi{U@Ph1Y*b&AuytChLW*@f)VaeG714nj=aEu`xqKZCJGA1xI@X<4I~NIGx8YFP%>3eFu@&4 PCLtinkry~HA4>rMbpEOZ literal 0 HcmV?d00001 diff --git a/test/TestData/temp/abcd3.shp b/test/TestData/temp/abcd3.shp new file mode 100644 index 0000000000000000000000000000000000000000..6fe6cf4f7aa3d91276f4f7d620724a541af0ac9d GIT binary patch literal 836 zcmaiy!3~2j3`Gs}fRHNXzz!Xw8Kd(tU2m{KFoaj7CRQRvk8hm#2_f>Dq`JE0JBU1g z@3wb-gmcUpQV%hmYt2Y&(!Ngj$G=OiyCfcsI<{EcOAi@(b>81;{k*Iaz3#%BS#XS5 zbgX#W9x~)CxlPa0*463wgoQV=V7R^h literal 0 HcmV?d00001 diff --git a/test/TestData/temp/point.dbf b/test/TestData/temp/point.dbf new file mode 100644 index 0000000000000000000000000000000000000000..74bdbed84abdaa6c58dd68dfac43064e60cdbc53 GIT binary patch literal 1366 zcmZRsWD;RvU|=}NpvnlOFhELTNh(y(1w?b8sYuJoPb`6mxq&EQZd3)Cc~Dsf20xGt z7pgQvPJVi3a$*ih)CWYMJEA1D0%m|SNd6y)Kmxo9Mg~A&XketEV5kRTLP4sofuRBn z7`lPvV7w7XLj%cJLBR-TAQ^>#;{s9=@@}DG>}Xc6ijdi Pl1T_iZUhDn)XP!;&AzFE literal 0 HcmV?d00001 diff --git a/test/TestData/temp/point.shp b/test/TestData/temp/point.shp new file mode 100644 index 0000000000000000000000000000000000000000..5fa11a6e3115fd42a1e830e15e0beb79eeaae84f GIT binary patch literal 212 zcmZQzQ0HR64zgY_GcYj1 Date: Sun, 21 Feb 2021 11:37:54 +0100 Subject: [PATCH 05/17] Fix typos. --- src/NetTopologySuite.IO.Esri.Core/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/NetTopologySuite.IO.Esri.Core/README.md b/src/NetTopologySuite.IO.Esri.Core/README.md index 35dec50..179170a 100644 --- a/src/NetTopologySuite.IO.Esri.Core/README.md +++ b/src/NetTopologySuite.IO.Esri.Core/README.md @@ -1,7 +1,7 @@ # NetTopologySuite.IO.Esri.Core This library provides forward-only readers and writers for [Esri shapefiles](https://support.esri.com/en/white-paper/279). -It is vanilla .NET Standard 2.0 library without any dependices. +It is vanilla .NET Standard 2.0 library without any dependencies. ## Dbf @@ -192,17 +192,17 @@ using (var shp = new ShapefileMultiPartWriter(shpPath, ShapeType.PolyLine, dateF ## Performance This library was designed with performance in mind. Thats why preferred implementation -forces reading/writing whole shapefile using once initialized ShpPointCollection buffer +forces reading/writing whole shapefile using once initialized ShpShapeBuilder and once initialized attributes array buffer. That way .NET garbage collector -doesn't have to dispose every single ShpPoint instance to reclaim the memory, -and after that alocate new memory for next ShpPoint instance. +doesn't have to dispose every single Point instance to reclaim the memory, +and after that alocate new memory for next Point instance. It's like using [ArrayPool.Shared](https://docs.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1.shared) but without the cost of renting and returning. There is a lot of other optimizations, to name a few of them: - Using [structs over classes](https://adamsitnik.com/Value-Types-vs-Reference-Types/) - for storing `ShpPoint` coordinates. -- Using the `ShpPointCollection` which under the hood is a buffer with smart resizing capabilities. + for storing `ShpCoordinates`. +- Using the `ShpShapeBuilder` which under the hood is a buffer with smart resizing capabilities. - Using dedicated `BinaryBuffer` class which avoids file I/O operations by reading/writing a whole shape record data at once instead of reading/writing every single coordinate one by one. Again - without resource costly memory realocating. From b2323068820c007c7e6359bba0c78d2771406871 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Mon, 22 Feb 2021 15:28:45 +0100 Subject: [PATCH 06/17] External QuickTest removed --- NetTopologySuite.IO.Esri.sln | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/NetTopologySuite.IO.Esri.sln b/NetTopologySuite.IO.Esri.sln index 2970709..e687702 100644 --- a/NetTopologySuite.IO.Esri.sln +++ b/NetTopologySuite.IO.Esri.sln @@ -27,8 +27,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Te EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetTopologySuite.IO.Esri.TestConsole", "test\NetTopologySuite.IO.Esri.TestConsole\NetTopologySuite.IO.Esri.TestConsole.csproj", "{AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickTest", "..\QuickTest\QuickTest.csproj", "{CE761ECC-0330-436F-A199-A3521294EFAF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Core", "src\NetTopologySuite.IO.Esri.Core\NetTopologySuite.IO.Esri.Core.csproj", "{2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}" EndProject Global @@ -165,22 +163,6 @@ Global {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x64.Build.0 = Release|Any CPU {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.ActiveCfg = Release|Any CPU {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.Build.0 = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|ARM.Build.0 = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x64.ActiveCfg = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x64.Build.0 = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x86.ActiveCfg = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Debug|x86.Build.0 = Debug|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|Any CPU.Build.0 = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|ARM.ActiveCfg = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|ARM.Build.0 = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x64.ActiveCfg = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x64.Build.0 = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x86.ActiveCfg = Release|Any CPU - {CE761ECC-0330-436F-A199-A3521294EFAF}.Release|x86.Build.0 = Release|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.Build.0 = Debug|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|ARM.ActiveCfg = Debug|Any CPU From 392e3ad4a749ba6bbd3e193696be1da1b06d5184 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Mon, 22 Feb 2021 15:34:55 +0100 Subject: [PATCH 07/17] Remove temporary solution projects. --- NetTopologySuite.IO.Esri.sln | 36 ------------------- .../NetTopologySuite.IO.ShapeFile.Test.csproj | 1 - 2 files changed, 37 deletions(-) diff --git a/NetTopologySuite.IO.Esri.sln b/NetTopologySuite.IO.Esri.sln index e687702..5b78e1f 100644 --- a/NetTopologySuite.IO.Esri.sln +++ b/NetTopologySuite.IO.Esri.sln @@ -13,8 +13,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile", "src\NetTopologySuite.IO.ShapeFile\NetTopologySuite.IO.ShapeFile.csproj", "{04CAE5A6-0B7B-47F8-9899-46EE805478E7}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.GDB", "src\NetTopologySuite.IO.GDB\NetTopologySuite.IO.GDB.csproj", "{6A1DF663-838E-42C0-811A-8114C3547B01}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapeFile.Test", "test\NetTopologySuite.IO.ShapeFile.Test\NetTopologySuite.IO.ShapeFile.Test.csproj", "{89254B6E-F130-41F3-8956-2F790E99C6F0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.ShapefileNG", "src\NetTopologySuite.IO.ShapefileNG\NetTopologySuite.IO.ShapefileNG.csproj", "{54244379-0702-40E8-8773-0973B3485293}" @@ -25,8 +23,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Test", "test\NetTopologySuite.IO.Esri.Test\NetTopologySuite.IO.Esri.Test.csproj", "{46F2F8D9-855C-40E6-A93F-DB96A3343C8E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetTopologySuite.IO.Esri.TestConsole", "test\NetTopologySuite.IO.Esri.TestConsole\NetTopologySuite.IO.Esri.TestConsole.csproj", "{AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Core", "src\NetTopologySuite.IO.Esri.Core\NetTopologySuite.IO.Esri.Core.csproj", "{2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}" EndProject Global @@ -57,22 +53,6 @@ Global {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x64.Build.0 = Release|Any CPU {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x86.ActiveCfg = Release|Any CPU {04CAE5A6-0B7B-47F8-9899-46EE805478E7}.Release|x86.Build.0 = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|ARM.Build.0 = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x64.ActiveCfg = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x64.Build.0 = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x86.ActiveCfg = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Debug|x86.Build.0 = Debug|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|Any CPU.Build.0 = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|ARM.ActiveCfg = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|ARM.Build.0 = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x64.ActiveCfg = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x64.Build.0 = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x86.ActiveCfg = Release|Any CPU - {6A1DF663-838E-42C0-811A-8114C3547B01}.Release|x86.Build.0 = Release|Any CPU {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {89254B6E-F130-41F3-8956-2F790E99C6F0}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -147,22 +127,6 @@ Global {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x64.Build.0 = Release|Any CPU {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x86.ActiveCfg = Release|Any CPU {46F2F8D9-855C-40E6-A93F-DB96A3343C8E}.Release|x86.Build.0 = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|ARM.Build.0 = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x64.Build.0 = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Debug|x86.Build.0 = Debug|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|Any CPU.Build.0 = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|ARM.ActiveCfg = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|ARM.Build.0 = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x64.ActiveCfg = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x64.Build.0 = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.ActiveCfg = Release|Any CPU - {AA37EFC6-737F-4E8A-A79C-2D179C1B38EC}.Release|x86.Build.0 = Release|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|Any CPU.Build.0 = Debug|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Debug|ARM.ActiveCfg = Debug|Any CPU diff --git a/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj b/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj index 4932dd2..54ea1d7 100644 --- a/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj +++ b/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj @@ -13,7 +13,6 @@ - From b4f9eb1611f0b15bbd53ee4c0966401997a35b43 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 07:17:08 +0100 Subject: [PATCH 08/17] Rreload missing solution projects --- NetTopologySuite.IO.Esri.sln | 18 ++++++++++++++++++ .../NetTopologySuite.IO.Esri.Core.csproj | 1 + .../NetTopologySuite.IO.Esri.csproj | 2 +- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/NetTopologySuite.IO.Esri.sln b/NetTopologySuite.IO.Esri.sln index 5b78e1f..67b5805 100644 --- a/NetTopologySuite.IO.Esri.sln +++ b/NetTopologySuite.IO.Esri.sln @@ -25,6 +25,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Te EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.Esri.Core", "src\NetTopologySuite.IO.Esri.Core\NetTopologySuite.IO.Esri.Core.csproj", "{2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NetTopologySuite.IO.GDB", "src\NetTopologySuite.IO.GDB\NetTopologySuite.IO.GDB.csproj", "{09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -143,6 +145,22 @@ Global {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x64.Build.0 = Release|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x86.ActiveCfg = Release|Any CPU {2BE3CBAE-CBF5-4B67-B1CB-CA64365A6157}.Release|x86.Build.0 = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|ARM.ActiveCfg = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|ARM.Build.0 = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|x64.ActiveCfg = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|x64.Build.0 = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|x86.ActiveCfg = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Debug|x86.Build.0 = Debug|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|Any CPU.Build.0 = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|ARM.ActiveCfg = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|ARM.Build.0 = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|x64.ActiveCfg = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|x64.Build.0 = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|x86.ActiveCfg = Release|Any CPU + {09E5D241-0DBA-42FF-9B7C-A4E4B43DB2DA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj b/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj index 44605e9..8243411 100644 --- a/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj +++ b/src/NetTopologySuite.IO.Esri.Core/NetTopologySuite.IO.Esri.Core.csproj @@ -3,6 +3,7 @@ netstandard2.0 NetTopologySuite.IO.Esri + true diff --git a/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj b/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj index 9f72726..829bf12 100644 --- a/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj +++ b/src/NetTopologySuite.IO.Esri/NetTopologySuite.IO.Esri.csproj @@ -4,7 +4,7 @@ $(ProjectDir)..\ netstandard2.0 NetTopologySuite.IO - false + true From 74b518bb69b1894c7972e3dc62799d1df96871e1 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 07:46:03 +0100 Subject: [PATCH 09/17] Fix ShapeFileEncodingTest. --- src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs | 4 +++- .../Writers/ShapefilePointWriter.cs | 2 +- .../ShapeFileEncodingTest.cs | 9 ++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs index f7f1b70..e742054 100644 --- a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs @@ -57,12 +57,14 @@ internal DbfField(string name, DbfType type, int length, int precision) //if (!beginsWithLetter) // throw new ArgumentNullException($"Invalid dBASE field name: {name}. Field name must begin with a letter.", nameof(name)); + + /* foreach (var c in name) { if (!IsValidFieldNameChar(c)) throw new ArgumentNullException($"Invalid dBASE field name: {name}. Field name must contain only letter, number or undersocre (_) character.", nameof(name)); } - + */ if (length < 1) throw new ArgumentException($"Ivalid dBASE field length: {length}.", nameof(length)); diff --git a/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs index a98b175..c3ca4d9 100644 --- a/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs +++ b/src/NetTopologySuite.IO.Esri/Writers/ShapefilePointWriter.cs @@ -13,7 +13,7 @@ namespace NetTopologySuite.IO.Shapefile public class ShapefilePointWriter : ShapefileWriter { /// - public ShapefilePointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding, string projection) + public ShapefilePointWriter(string shpPath, ShapeType type, IReadOnlyList fields, Encoding encoding = null, string projection = null) : base(shpPath, type, fields, encoding, projection) { } diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs index 718a1a6..f698cd9 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileEncodingTest.cs @@ -26,8 +26,11 @@ public void Setup() at.Add("Ödestext", "Lång text med åäö etc"); var feature = new Feature(new Point(0, 0), at); + var columns = new DbfField[] {idColumn, testColumn, alderColumn, odestextColumn}; - using (var shp = new ShapefilePointWriter("encoding_sample.shp", Shapefile.ShapeType.Point, idColumn, testColumn, alderColumn, odestextColumn)) + Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); + var encoding = Encoding.GetEncoding(1252); + using (var shp = new ShapefilePointWriter("encoding_sample.shp", Shapefile.ShapeType.Point, columns, encoding)) { shp.Write(feature); } @@ -45,8 +48,8 @@ public void TestLoadShapeFileWithEncoding() Assert.AreEqual(shp.Fields[3].Name, "Ödestext"); Assert.IsTrue(shp.Read(out var deleted), "Error reading file"); - Assert.AreEqual(shp.Fields["Test"], "Testar"); - Assert.AreEqual(shp.Fields["Ödestext"], "Lång text med åäö etc"); + Assert.AreEqual(shp.Fields["Test"].Value, "Testar"); + Assert.AreEqual(shp.Fields["Ödestext"].Value, "Lång text med åäö etc"); } } } From 49b375ffa7914b46e40aa369bdde0da6416ac2ea Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 07:55:24 +0100 Subject: [PATCH 10/17] Fix TestWriteZMValuesShapeFile test. --- .../NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs index e2fbbcd..74cd88e 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs @@ -112,7 +112,8 @@ private void TestWriteZMValuesShapeFile(bool testM) if (testM) { - sequence = ((LineString)geom).CoordinateSequence; + var mln = (MultiLineString)geom; + sequence = ((LineString)mln[0]).CoordinateSequence; for (int i = 0; i < 3; i++) { Assert.AreEqual(sequence.GetOrdinate(i, Ordinate.M), 11 + i); @@ -120,7 +121,7 @@ private void TestWriteZMValuesShapeFile(bool testM) } // Run a simple attribute test too - string v = reader.Fields[1].Value?.ToString(); + string v = reader.Fields[0].Value?.ToString(); Assert.AreEqual(v, "Trond"); } } From b8bb539b0c9309b9e97e3c086a46b004b8753eb7 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 08:31:27 +0100 Subject: [PATCH 11/17] When Geometry collection contains single geometry read Polygon/LineString instead of MultiPolygon/MultiLineString. --- .../Extensions/FeatureExtensions.cs | 2 +- .../Readers/ShapefilePolyLineReader.cs | 11 ++++++-- .../Readers/ShapefilePolygonReader.cs | 11 ++++++-- .../Readers/ShapefileReader.cs | 26 +++++++++++++++---- .../ShapeFileDataWriterTest.cs | 6 ++++- 5 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs b/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs index 20b869a..280059e 100644 --- a/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs +++ b/src/NetTopologySuite.IO.Esri/Extensions/FeatureExtensions.cs @@ -120,7 +120,7 @@ private static Geometry FindNonEmptyGeometry(Geometry geometry) // GeometryCollection -> MultiPolygon -> Polygon if (geom is GeometryCollection) - geom = FindNonEmptyGeometry(geometry); + geom = FindNonEmptyGeometry(geom); if (geom != null && !geom.IsEmpty) return geom; diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs index efefa27..7b8212b 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs @@ -24,8 +24,15 @@ internal override Core.ShapefileReader CreateReader(string shpPath, Encoding enc /// public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) { - var readSucceed = ReadMultiLine(out var line, out attributes, out deleted); - geometry = line; + var readSucceed = ReadMultiLine(out var multiLine, out attributes, out deleted); + if (multiLine.Count == 1) + { + geometry = multiLine[0]; // LineString + } + else + { + geometry = multiLine; // MultiLineString + } return readSucceed; } diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs index 9d5d43f..19cc50b 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs @@ -28,8 +28,15 @@ internal override Core.ShapefileReader CreateReader(string shpPath, Encoding enc /// public override bool Read(out Geometry geometry, out AttributesTable attributes, out bool deleted) { - var readSucceed = ReadMultiPolygon(out var polygon, out attributes, out deleted); - geometry = polygon; + var readSucceed = ReadMultiPolygon(out var multiPolygon, out attributes, out deleted); + if (multiPolygon.Count == 1) + { + geometry = multiPolygon[0]; // Polygon + } + else + { + geometry = multiPolygon; // MultiPolygon + } return readSucceed; } diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs index 97e1e47..c05adf2 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefileReader.cs @@ -246,7 +246,7 @@ private static IEnumerable ReadAllPoints(Stream shpStream, bool hasZ, boo private static IEnumerable ReadAllMultiPoints(Stream shpStream, bool hasZ, bool hasM) { - using (var shpReader = new Core.ShpMultiPartReader(shpStream)) + using (var shpReader = new Core.ShpMultiPointReader(shpStream)) { while (shpReader.Read()) { @@ -255,24 +255,40 @@ private static IEnumerable ReadAllMultiPoints(Stream shpStream, bool } } - private static IEnumerable ReadAllPolyLines(Stream shpStream, bool hasZ, bool hasM) + private static IEnumerable ReadAllPolyLines(Stream shpStream, bool hasZ, bool hasM) { using (var shpReader = new Core.ShpMultiPartReader(shpStream)) { while (shpReader.Read()) { - yield return ShapefilePolyLineReader.GetMultiLineString(shpReader.Shape, hasZ, hasM); + var multiLine = ShapefilePolyLineReader.GetMultiLineString(shpReader.Shape, hasZ, hasM); + if (multiLine.Count == 1) + { + yield return multiLine[0]; // Polygon + } + else + { + yield return multiLine; // MultiPolygon + } } } } - private static IEnumerable ReadAllPolygons(Stream shpStream, bool hasZ, bool hasM) + private static IEnumerable ReadAllPolygons(Stream shpStream, bool hasZ, bool hasM) { using (var shpReader = new Core.ShpMultiPartReader(shpStream)) { while (shpReader.Read()) { - yield return ShapefilePolygonReader.GetMultiPolygon(shpReader.Shape, hasZ, hasM); + var multiPolygon = ShapefilePolygonReader.GetMultiPolygon(shpReader.Shape, hasZ, hasM); + if (multiPolygon.Count == 1) + { + yield return multiPolygon[0]; // Polygon + } + else + { + yield return multiPolygon; // MultiPolygon + } } } } diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs index 74cd88e..19d9560 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs @@ -194,7 +194,11 @@ private static void DoTest(GeometryCollection geomsWrite, Ordinates ordinates, b var attr = new AttributesTable(); attr.Add("Id", 1); - var features = geomsWrite.Select(g => new Feature(g, attr)); + var features = new Feature[geomsWrite.Count]; + for (int i = 0; i < geomsWrite.Count; i++) + { + features[i] = new Feature(geomsWrite[i], attr); + } features.SaveToShapefile(fileName); var geomsRead = ShapefileReader.ReadAllGeometries(fileName).ToGeometryCollection(); From 975c3c51c012f550dd38727f03ac2dbeb8cc6e8f Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 08:32:43 +0100 Subject: [PATCH 12/17] Fix invalid attribute name exception type. --- src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs index e742054..979d64f 100644 --- a/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs +++ b/src/NetTopologySuite.IO.Esri.Core/Dbf/Fields/DbfField.cs @@ -50,7 +50,7 @@ internal DbfField(string name, DbfType type, int length, int precision) throw new ArgumentNullException("Empty dBASE field name.", nameof(name)); if (name.Length > Dbf.MaxFieldNameLength) - throw new ArgumentNullException($"dBASE III field name cannot be longer than {Dbf.MaxFieldNameLength} characters.", nameof(name)); + throw new ArgumentException($"dBASE III field name cannot be longer than {Dbf.MaxFieldNameLength} characters.", nameof(name)); // ArcMap does support number at the begining. //var beginsWithLetter = IsValidFieldNameLetter(name[0]); From fcff9c2278a2f89121daa816baa28877114ff949 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 08:48:26 +0100 Subject: [PATCH 13/17] Fix invalid values tests. --- .../ShapeFileDataWriterTest.cs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs index 19d9560..7fa7690 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs @@ -618,9 +618,14 @@ public void Issue146_ShapeCreationWithInvalidAttributeName() public void issue_111_pointhandler_with_invalid_values() { var factory = GeometryFactory.Default; + var points = new Coordinate[3]; + points[0] = new CoordinateZ(0, 0); + points[1] = new CoordinateZ(1, 0); + points[2] = new CoordinateZ(1, 1); var p = factory.CreatePoint(new CoordinateZ(0, 0)); - Geometry[] arr = { p, GeometryCollection.Empty }; + var ln = factory.CreateLineString(points); + Geometry[] arr = { p, ln }; // GeometryCollection.Empty }; <= Empty GeometryCollection is perfect NullShape var geometries = factory.CreateGeometryCollection(arr); var features = geometries.ToFeatures(); @@ -636,10 +641,15 @@ public void issue_111_pointhandler_with_invalid_values() public void issue_111_multiPointhandler_with_invalid_values() { var factory = GeometryFactory.Default; + var points = new Coordinate[3]; + points[0] = new CoordinateZ(0, 0); + points[1] = new CoordinateZ(1, 0); + points[2] = new CoordinateZ(1, 1); var p = factory.CreatePoint(new CoordinateZ(0, 0)); var mp = factory.CreateMultiPoint(new[] { p }); - Geometry[] arr = new[] { mp, GeometryCollection.Empty }; + var ln = factory.CreateLineString(points); + Geometry[] arr = { mp, ln}; // GeometryCollection.Empty }; <= Empty GeometryCollection is perfect NullShape var geometries = factory.CreateGeometryCollection(arr); var features = geometries.ToFeatures(); @@ -664,7 +674,8 @@ public void issue_111_multilinehandler_with_invalid_values() var ls = factory.CreateLineString(points); var mls = factory.CreateMultiLineString(new[] { ls }); - Geometry[] arr = new[] { mls, GeometryCollection.Empty }; + var p = factory.CreatePoint(new CoordinateZ(0, 0)); + Geometry[] arr = { mls, p }; // GeometryCollection.Empty }; <= Empty GeometryCollection is perfect NullShape var geometries = factory.CreateGeometryCollection(arr); var features = geometries.ToFeatures(); @@ -690,7 +701,8 @@ public void issue_111_polygonhandler_with_invalid_values() var polygon = factory.CreatePolygon(points); var multiPoligon = factory.CreateMultiPolygon(new[] { polygon }); - Geometry[] arr = new[] { multiPoligon, GeometryCollection.Empty }; + var line = factory.CreateLineString(points); + Geometry[] arr = { multiPoligon, line }; // GeometryCollection.Empty }; <= Empty GeometryCollection is perfect NullShape var geometries = factory.CreateGeometryCollection(arr); // { MultiPolygon, GeometryCollection } var shapeType = geometries.GetShapeType(); From 4a77de2d8316a592f03f07c8498477f0862dad8c Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 08:57:27 +0100 Subject: [PATCH 14/17] Return Geometry.Empty instead of null. --- .../Readers/ShapefileMultiPointReader.cs | 2 +- src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs | 2 +- .../Readers/ShapefilePolyLineReader.cs | 2 +- .../Readers/ShapefilePolygonReader.cs | 2 +- test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs | 2 +- test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs index 4a48d79..dfdbcbd 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefileMultiPointReader.cs @@ -46,7 +46,7 @@ public bool ReadMultiPoint(out MultiPoint geometry, out AttributesTable attribut { if (!Reader.Read(out deleted)) { - geometry = null; + geometry = MultiPoint.Empty; attributes = null; return false; } diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs index 8c0fb27..9845589 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePointReader.cs @@ -47,7 +47,7 @@ public bool ReadPoint(out Point geometry, out AttributesTable attributes, out bo { if (!Reader.Read(out deleted)) { - geometry = null; + geometry = Point.Empty; attributes = null; return false; } diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs index 7b8212b..cdad7c1 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolyLineReader.cs @@ -51,7 +51,7 @@ public bool ReadMultiLine(out MultiLineString geometry, out AttributesTable attr { if (!Reader.Read(out deleted)) { - geometry = null; + geometry = MultiLineString.Empty; attributes = null; return false; } diff --git a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs index 19cc50b..22c439c 100644 --- a/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs +++ b/src/NetTopologySuite.IO.Esri/Readers/ShapefilePolygonReader.cs @@ -55,7 +55,7 @@ public bool ReadMultiPolygon(out MultiPolygon geometry, out AttributesTable attr { if (!Reader.Read(out deleted)) { - geometry = null; + geometry = MultiPolygon.Empty; attributes = null; return false; } diff --git a/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs b/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs index 8447652..9f4a420 100644 --- a/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs +++ b/test/NetTopologySuite.IO.Esri.Test/Issue46Fixture.cs @@ -30,7 +30,7 @@ public void Invalid_data_should_be_not_read_as_default() Assert.IsTrue(factory.CreateMultiPolygon().EqualsExact(data[0])); Assert.IsFalse(data[1].IsEmpty); - Assert.IsInstanceOf(data[1]); + Assert.IsInstanceOf(data[1]); } } } diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs index f6e6f57..c4efc28 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataReaderTest.cs @@ -147,8 +147,8 @@ public void TestReadingShapeFileAfvalbakken() var buff = feature.Geometry.Buffer(distance); Assert.IsNotNull(buff); - var mpg = (MultiPolygon)feature.Geometry; - polys.Add((Polygon)mpg[0]); + var pg = (Polygon)feature.Geometry; + polys.Add(pg); } } From babdac223f40780fff647526ffa4102a56b9cbbb Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 09:00:13 +0100 Subject: [PATCH 15/17] Fix TestWriteZMValuesShapeFile test. --- test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs index 7fa7690..fd6dbc4 100644 --- a/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs +++ b/test/NetTopologySuite.IO.Esri.Test/ShapeFileDataWriterTest.cs @@ -112,8 +112,8 @@ private void TestWriteZMValuesShapeFile(bool testM) if (testM) { - var mln = (MultiLineString)geom; - sequence = ((LineString)mln[0]).CoordinateSequence; + var ln = (LineString)geom; + sequence = ln.CoordinateSequence; for (int i = 0; i < 3; i++) { Assert.AreEqual(sequence.GetOrdinate(i, Ordinate.M), 11 + i); From 17d9a5ab9d921850c621bd69a2c6b6cb50261407 Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 09:11:13 +0100 Subject: [PATCH 16/17] Add back missing solution projects. --- .../NetTopologySuite.IO.ShapeFile.Test.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj b/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj index 54ea1d7..1639594 100644 --- a/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj +++ b/test/NetTopologySuite.IO.ShapeFile.Test/NetTopologySuite.IO.ShapeFile.Test.csproj @@ -14,6 +14,7 @@ + From 06ed8ce6e159acf72e33096a0e57fe7ce1d829be Mon Sep 17 00:00:00 2001 From: Kuba Szostak Date: Tue, 23 Feb 2021 09:17:44 +0100 Subject: [PATCH 17/17] retrigger checks