Ejemplo n.º 1
0
        public IHttpActionResult PostFile()
        {
            try
            {
                ShapeFile  shapeFile   = null;
                DbfReader  dbfFile     = null;
                FileMapper fileMapper  = null;
                string[]   shpFileStr  = Directory.GetFiles(@"C:\testFile", "*.shp");
                string[]   dbfFilesStr = Directory.GetFiles(@"C:\testFile", "*.dbf");

                if (shpFileStr != null && dbfFilesStr != null)
                {
                    if (shpFileStr.Length == 1 && dbfFilesStr.Length == 1)
                    {
                        shapeFile = new ShapeFile(shpFileStr[0]);
                        dbfFile   = new DbfReader(dbfFilesStr[0]);

                        fileMapper = new FileMapper(shapeFile, dbfFile);
                        fileMapper.StartFilter();
                    }
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 从shapefile生成FeatureSet
        /// </summary>
        /// <param name="shpFilePath"></param>
        /// <returns></returns>
        public static FeatureSet CreateFeatureSet(string shpFilePath)
        {
            if (!ShpUtil.VerificationShp(shpFilePath, out var subFiles))
            {
                throw new IOException("该shapefile文件不存在或者主文件缺失!");
            }
            //else
            using var dbfReader = new DbfReader(subFiles.Item2);
            var shxIndexs = new ShxReader().ReadShx(subFiles.Item1);
            var recordNum = shxIndexs.Count;

            using var shpReader = new ShpReader(shpFilePath, shxIndexs);

            var fs = CreateFeatureSet(shpReader, dbfReader, recordNum);

            if (File.Exists(subFiles.Item3))
            {
                string prjWkt = "";
                using (var sr = new StreamReader(subFiles.Item3, Encoding.UTF8))
                {
                    prjWkt = sr.ReadToEnd();
                }

                var proj = Crs.CreateFromWkt(prjWkt);
                fs.Crs = proj;
            }

            return(fs);
        }
Ejemplo n.º 3
0
        public IFormatReader <IFileOptionsSet> CreateReader(ReaderType type, string path, IOptionsSet baseOptions = null)
        {
            IFormatReader <IFileOptionsSet> result = null;
            FileOptionsSet options = new FileOptionsSet(baseOptions ?? OptionsSet.Empty)
            {
                FilePath = path
            };

            switch (type)
            {
            case ReaderType.Ascii:
                result = new AsciiReader(options);
                break;

            case ReaderType.Excel:
            case ReaderType.Excel2007:
                result = new XlsReader(options);
                break;

            case ReaderType.Dbf:
                result = new DbfReader(options);
                break;

            case ReaderType.Db:
                throw new InvalidOperationException("use CreateDbReader()");

            default:
                throw new UnimplementedReaderTypeException(type);
            }
            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 根据文件流创建shapefile
        /// </summary>
        /// <param name="shpFileStream"></param>
        /// <param name="shxFileStream"></param>
        /// <param name="dbfFileStream"></param>
        /// <param name="prjFileStream"></param>
        /// <returns></returns>
        public static FeatureSet CreateFeatureSet
            (Stream shpFileStream, Stream shxFileStream,
            Stream dbfFileStream, Stream prjFileStream = null)
        {
            using var dbfReader = new DbfReader(dbfFileStream);
            var shxIndexs = new ShxReader().ReadShx(shxFileStream);
            var recordNum = shxIndexs.Count;

            using var shpReader = new ShpReader(shpFileStream, shxIndexs);

            var fs = CreateFeatureSet(shpReader, dbfReader, recordNum);

            if (prjFileStream != null)
            {
                string prjWkt = "";
                using (var sr = new StreamReader(prjFileStream, dbfReader.Encoding))
                {
                    prjWkt = sr.ReadToEnd();
                }

                var proj = Crs.CreateFromWkt(prjWkt);
                fs.Crs = proj;
            }
            return(fs);
        }
Ejemplo n.º 5
0
        private DataTable CreateDataTable(string tableName, DbfReader reader)
        {
            DataTable dataTable = new DataTable(tableName);

            DbfFieldDesc[] fieldDescriptions = reader.DbfRecordHeader.GetFieldDescriptions();

            //create the columns
            dataTable.Columns.Add(ShapeFileRecordIndexColumnName, typeof(Int32));
            dataTable.Columns.AddRange(DataColumnsFromDbfFields(fieldDescriptions));

            //add the data
            object[] rowValues = new object[fieldDescriptions.Length + 1];
            for (int n = 0; n < reader.DbfRecordHeader.RecordCount; ++n)
            {
                string[] values = reader.GetFields(n);
                TrimArrayValues(values);
                rowValues[0] = n;
                GetDataValues(fieldDescriptions, values, rowValues, 1);

                DataRow row = dataTable.NewRow();
                row.ItemArray = rowValues;
                dataTable.Rows.Add(row);
            }

            return(dataTable);
        }
Ejemplo n.º 6
0
 public void ReadNullTbl_Large()
 {
     var dbf    = new Dbf(Path.Combine(testDir, "_largenullable.dbf"));
     var reader = new DbfReader(dbf);
     var header = dbf.GetHeader();
     var row2   = reader.ReadRow(0);
     var rows   = reader.ReadRows().ToList();
 }
Ejemplo n.º 7
0
 public FileMapper(ShapeFile i_ShapeFile, DbfReader i_DbfReader)
 {
     r_ShapeFile  = i_ShapeFile;
     r_DbfReader  = i_DbfReader;
     r_SitesNames = r_DbfReader.GetRecords(i_DbfReader.IndexOfFieldName("Hel_Name")).ToList();
     r_Regions    = r_DbfReader.GetRecords(i_DbfReader.IndexOfFieldName("Ezor")).ToList();
     r_Dunams     = r_DbfReader.GetRecords(i_DbfReader.IndexOfFieldName("Dunam")).ToList();
 }
Ejemplo n.º 8
0
        public void TestPJX()
        {
            var dbf    = new Dbf(Path.Combine(testDir, "testproj.PJX"), Path.Combine(testDir, "testproj.PJT"));
            var reader = new DbfReader(dbf);

            var rows    = reader.ReadRows(includeMemo: true);
            var project = Project.FromRows(rows);
        }
Ejemplo n.º 9
0
 private Layer(
     string name,
     BinaryReader shpReader,
     DbfReader dbfReader)
 {
     this.Name      = name;
     this.shpReader = shpReader;
     this.dbfReader = dbfReader;
 }
Ejemplo n.º 10
0
        public void TestMethod1()
        {
            var path    = Folder + @"DB.DBF";
            var version = DbfVersion.dBASE_IV_SQL_Table;

            var w0 = new object[] { true, DateTime.Today, "HELLO!!!", 20001000.34, 345.780 };
            var w1 = new object[] { false, DateTime.Today.AddDays(-51), "BYE!!!", 10002000.34, 780.345 };

            IReadOnlyList <DbfField> fields;
            {
                using var writer = new DbfWriter(path, version);
                Assert.AreEqual(version, writer.Version);

                //dbf.AddField(new DbfField("INTFIELD", DbfFieldType.Integer));
                writer.AddField(new DbfField("LGCFIELD", DbfFieldType.Logical));
                writer.AddField(new DbfField("DATFIELD", DbfFieldType.Date));

                writer.AddField(new DbfField("CHRFIELD", DbfFieldType.Character, 10));

                writer.AddField(new DbfField("NUMFIELD", DbfFieldType.Numeric, 10, 2));
                writer.AddField(new DbfField("FLTFIELD", DbfFieldType.Float));

                Assert.AreEqual(5, writer.Fields.Count);

                writer.AddRecord(w0);
                writer.AddRecord(w1);

                fields = writer.Fields;
            }

            {
                using var reader = new DbfReader(path);
                // Header
                Assert.AreEqual(version, reader.Version);
                Assert.AreEqual(fields.Count, reader.Fields.Count);

                Assert.IsTrue(fields.Select(x => x.Name).Zip(reader.Fields.Select(x => x.Name)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Type).Zip(reader.Fields.Select(x => x.Type)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Length).Zip(reader.Fields.Select(x => x.Length)).All(x => x.First.Equals(x.Second)));
                Assert.IsTrue(fields.Select(x => x.Precision).Zip(reader.Fields.Select(x => x.Precision)).All(x => x.First.Equals(x.Second)));

                Assert.IsTrue(fields.Zip(reader.Fields).All(x => x.First.Equals(x.Second)));

                // Records
                Assert.AreEqual(2, reader.RecordCount);

                var r0 = reader.Read();
                Assert.IsNotNull(r0);

                var r1 = reader.Read();
                Assert.IsNotNull(r1);

                CollectionAssert.AreEqual(w0, r0);
                CollectionAssert.AreEqual(w1, r1);
            }
        }
Ejemplo n.º 11
0
        public void NameFirstColumnByNumber()
        {
            string name;

            using (var dbf = DbfReader.Open(PathToDbf))
            {
                name = dbf.GetColumns[0].Name;
            }
            Assert.AreEqual(name, FirstColumn);
        }
Ejemplo n.º 12
0
        public void TestRecordCount()
        {
            var  rdr   = new DbfReader(GetDbfStream());
            uint count = 0;

            while (rdr.Read())
            {
                count++;
            }
            Assert.AreEqual(rdr.RecordCount, count);
        }
Ejemplo n.º 13
0
        public void TestDBC()
        {
            var dbf    = new Dbf(Path.Combine(testDir, "largedb.dbc"), Path.Combine(testDir, "largedb.dct"));
            var reader = new DbfReader(dbf);
            var rows   = reader.ReadRows(includeMemo: true);
            var db     = Database.FromDbf(dbf);

            //Assert.Equal(6, reader.ReadRow(1)[1].ToString().Length);
            //Assert.Equal(254, reader.ReadRow(0)[1].ToString().Length);
            Assert.Equal(254, reader.ReadRow(2)[1].ToString().Length);
        }
Ejemplo n.º 14
0
        public void WriteHeadOnly()
        {
            int count;
            var item = new List <KLF_NAMESDBF>();

            DbfWriter.Save(Tmp, item);
            using (var dbf = DbfReader.Open(Tmp))
            {
                count = dbf.Count;
            }
            Assert.AreEqual(0, count);
        }
Ejemplo n.º 15
0
        public void TestFields()
        {
            var rdr = new DbfReader(GetDbfStream());

            Assert.AreEqual(6, rdr.Fields.Length);

            CheckField(rdr.Fields[0], "NAME1", DbfType.Character, 128, 0);
            CheckField(rdr.Fields[1], "SCALERANK", DbfType.Numeric, 10, 0);
            CheckField(rdr.Fields[2], "COUNTRYNAM", DbfType.Character, 50, 0);
            CheckField(rdr.Fields[3], "FeatureCla", DbfType.Character, 30, 0);
            CheckField(rdr.Fields[4], "ADM0_A3", DbfType.Character, 3, 0);
            CheckField(rdr.Fields[5], "MAP_COLOR", DbfType.Numeric, 4, 0);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Constructs a new RenderSettings
        /// </summary>
        /// <param name="dbfStream">stream opened from the shapefile dbf file</param>
        /// <param name="fieldName">The name of the DBF field to use when labelling shapes</param>
        /// <param name="renderFont">The Font to use when labelling shapes in the shape file</param>
        public RenderSettings(System.IO.Stream dbfStream, string fieldName, Font renderFont)
        {
            if (fieldName == null)
            {
                throw new ArgumentException("fieldName can not be null");
            }

            dbfReader = new DbfReader(dbfStream);

            fieldIndex      = FindFieldIndex(fieldName);
            FieldName       = fieldName;
            this.renderFont = renderFont;
        }
Ejemplo n.º 17
0
        public static Database FromDbf(Dbf dbf)
        {
            var header = dbf.GetHeader();

            if ((header.Flags & DbfHeaderFlags.DBC) == 0)
            {
                throw new InvalidCastException("Not a Database(DBC)");
            }
            var reader = new DbfReader(dbf);
            var rows   = reader.ReadRows(includeMemo: true);
            var db     = ParseDatabaseFromRows(rows);

            return(db);
        }
Ejemplo n.º 18
0
        public void TestRecords()
        {
            var rdr = new DbfReader(GetDbfStream());

            Assert.AreEqual(6, rdr.Fields.Length);
            for (int i = 0; i < 5; i++)
            {
                Assert.AreEqual(true, rdr.Read());
                for (int j = 0; j < 6; j++)
                {
                    Assert.AreEqual(testData[j][i], rdr[j]);
                }
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// 根据ShpReader和DbfReader创建FeatureSet
        /// </summary>
        /// <param name="shpReader"></param>
        /// <param name="dbfReader"></param>
        /// <param name="recordNum"></param>
        /// <returns></returns>
        private static FeatureSet CreateFeatureSet(ShpReader shpReader, DbfReader dbfReader, int recordNum)
        {
            GeometryType geometryType = (GeometryType)shpReader.ShpHeader.ShapeType;
            var          featureType  = ShpUtil
                                        .GeometryType2FeatureType(geometryType);
            FeatureSet   fs       = new FeatureSet(featureType);
            IFeatureList features = new FeatureList(fs);

            for (int i = 0; i < recordNum; i++)
            {
                var spatialBytes = shpReader.GetNextRecord();
                dbfReader.GetNextRow();
                IGeometry geometry;
                switch (geometryType)
                {
                case GeometryType.Point:
                    geometry = BytesToGeometry.CreatePoint(spatialBytes);
                    break;

                case GeometryType.MultiPoint:
                    geometry = BytesToGeometry.CreateMultipoint(spatialBytes);
                    break;

                case GeometryType.PolyLine:
                    geometry = BytesToGeometry.CreatePolyLine(spatialBytes);
                    break;

                case GeometryType.Polygon:
                    geometry = BytesToGeometry.CreatePolygon(spatialBytes);
                    break;

                default:
                    geometry = null;
                    break;
                }

                IFeature feature = new Feature(geometry);
                features.Add(feature);
            }

            fs.Features.Set(features);
            fs.AttrTable = dbfReader.DbfTable;
            var header = shpReader.ShpHeader;

            //fs.Envelope = new Envelope(header.XMin, header.YMin,
            //    header.XMax, header.YMax,
            //    header.ZMin, header.ZMax);

            return(fs);
        }
Ejemplo n.º 20
0
        public async Task ReadDbfRowsAsync()
        {
            var dbf    = new Dbf(Path.Combine(testDir, "poshistorie.dbf"));
            var reader = new DbfReader(dbf);
            int count  = 0;

            await foreach (var r in reader.ReadRowsAsync((i, x) => true, includeMemo: false, includeDeleted: true))
            {
                count++;
                //if (count > 50) break;
            }
            output.WriteLine("Count: {0} ({1})", count, dbf.GetHeader().RecordCount);
            Assert.Equal(dbf.GetHeader().RecordCount, count);
        }
Ejemplo n.º 21
0
        public void CountRecordByRead()
        {
            var items = 0;

            using (var dbf = DbfReader.Open(PathToDbf))
            {
#pragma warning disable 612,618
                while (dbf.Read())
#pragma warning restore 612,618
                {
                    items++;
                }
            }
            Assert.AreEqual(Count, items, "Количество записей");
        }
Ejemplo n.º 22
0
 /// <summary>
 /// Constructs a ShapeFile using a path to a .shp shape file
 /// </summary>
 /// <param name="shapeFilePath">The path to the ".shp" shape file</param>
 private Shape(string shapeFilePath)
 {
     using (var file = new ShapeFile(shapeFilePath))
     {
         RecordCount = file.RecordCount;
         ShapeData = new IEnumerable<PointXYZ[]>[RecordCount];
         for (int i = 0; i < RecordCount; ++i)
         {
             var shapeData = file.GetShapeDataD(i);
             ShapeData[i] = shapeData.Select(x => x.Select(p => new PointXYZ() { X = p.X, Y = p.Y, Z = 0 }).ToArray());
         }
     }
     string dbfFilePath = Path.ChangeExtension(shapeFilePath, "dbf");
     Database = new DbfReader(dbfFilePath);
 }
Ejemplo n.º 23
0
        public void ReadToDataTable()
        {
            var dt = new DataTable();
            int columns;

            using (var dbf = DbfReader.Open(PathToDbf))
            {
                columns = dbf.GetColumns.Count;
#pragma warning disable 612,618
                dbf.Fill(dt);
#pragma warning restore 612,618
            }
            Assert.AreEqual(columns, dt.Columns.Count, "Колонок");
            Assert.AreEqual(Count, dt.Rows.Count, "Строк");
        }
Ejemplo n.º 24
0
        public static ILayer Create(
            string name,
            Stream shpStream,
            Stream dbfStream)
        {
            var shpReader = new BinaryReader(shpStream, Encoding.UTF8, leaveOpen: true);
            var dbfReader = DbfReader.Create(dbfStream);

            var layer = new Layer(
                name,
                shpReader,
                dbfReader);

            layer.Reset();
            return(layer);
        }
Ejemplo n.º 25
0
        public void NumberOfColumnByName()
        {
            var index = -1;

            using (var dbf = DbfReader.Open(PathToDbf))
            {
                for (var i = 0; i < dbf.GetColumns.Count; i++)
                {
                    if (dbf.GetColumns[i].Name == FirstColumn)
                    {
                        index = i;
                    }
                }
            }
            Assert.AreEqual(index, 0);
        }
Ejemplo n.º 26
0
        public void PosHistorieAusgebenTable()
        {
            var dbf    = new Dbf(Path.Combine(testDir, "poshistorie.dbf"));
            var reader = new DbfReader(dbf);
            var header = dbf.GetHeader();

            using (var sw = new StreamWriter(Path.Combine(testDir, $"Fact_{nameof(PosHistorieAusgebenTable)}.md")))
            {
                //reader.ReadRows((i, v) => i > (header.CalculatedRecordCount - 10), true).Count();
                //OutputHelper.MarkdownTable(header.Fields, reader.ReadRows(true).Take(50), h => h, sw.WriteLine);
                OutputHelper.MarkdownTable(
                    new[] { "RAW CONTENT" },
                    reader.ReadRowsRaw().Select(x => new[] { OutputHelper.ByteArrayToX2(x) }).Take(50).ToList(),
                    h => h,
                    sw.WriteLine);
            }
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Constructs a new RenderSettings object
        /// </summary>
        /// <param name="shapeFilePath">The path to the shape file without the .shp file extension</param>
        /// <param name="fieldName">The name of the DBF field to use when labelling shapes</param>
        /// <param name="renderFont">The Font to use when labelling shapes in the shape file</param>
        public RenderSettings(string shapeFilePath, string fieldName, Font renderFont)
        {
            if (shapeFilePath == null)
            {
                throw new ArgumentException("shapeFileName can not be null");
            }
            if (fieldName == null)
            {
                throw new ArgumentException("fieldName can not be null");
            }


            dbfReader = new DbfReader(shapeFilePath);

            fieldIndex      = FindFieldIndex(fieldName);
            FieldName       = fieldName;
            this.renderFont = renderFont;
        }
Ejemplo n.º 28
0
        /// <summary>
        /// Constructs a ShapeFile using a path to a .shp shape file
        /// </summary>
        /// <param name="shapeFilePath">The path to the ".shp" shape file</param>
        private Shape(string shapeFilePath)
        {
            using (var file = new ShapeFile(shapeFilePath))
            {
                RecordCount = file.RecordCount;
                ShapeData   = new IEnumerable <PointXYZ[]> [RecordCount];
                for (int i = 0; i < RecordCount; ++i)
                {
                    var shapeData = file.GetShapeDataD(i);
                    ShapeData[i] = shapeData.Select(x => x.Select(p => new PointXYZ()
                    {
                        X = p.X, Y = p.Y, Z = 0
                    }).ToArray());
                }
            }
            string dbfFilePath = Path.ChangeExtension(shapeFilePath, "dbf");

            Database = new DbfReader(dbfFilePath);
        }
Ejemplo n.º 29
0
        public void Test1()
        {
            var dbf = new Dbf(Path.Combine(testDir, "dbTable2.dbf"));
            //var dbf = new Dbf(Path.Combine(@"C:\vfp projects\WindowsShell", "varchr.dbf"));
            var reader = new DbfReader(dbf);

            var row    = reader.ReadRow(0);
            var header = dbf.GetHeader();

            OutputHelper.MarkdownTable(header.Fields, reader.ReadRows(), h => h, output.WriteLine);

            var row2 = reader.ReadRow(1);
            var row3 = reader.ReadRow(2);

            //var rows = reader.ReadRows(includeMemo: true).ToList();

            //Assert.Equal(6, reader.ReadRow(1)[1].ToString().Length);
            //Assert.Equal(254, reader.ReadRow(0)[1].ToString().Length);
            //Assert.Equal(254, reader.ReadRow(2)[1].ToString().Length);
        }
Ejemplo n.º 30
0
        public void DbfReadSimpleFile()
        {
            var f = new DataFile()
            {
                Encoding = Encoding.GetEncoding(866)
            };
            var rdr = new DbfReader(f);

            using (var file = File.Open("../../testfiles/simple.dbf", FileMode.Open))
            {
                rdr.Read(file);
            }

            var wrt = new DbfWriter(f);

            using (var file = File.Open("../../testfiles/output.dbf", FileMode.OpenOrCreate | FileMode.Truncate))
            {
                wrt.Write(file);
            }

            ProviderTools.CompareFiles("../../testfiles/simple.dbf", "../../testfiles/output.dbf");
        }
Ejemplo n.º 31
0
        public void DbfReadAutoEncoding()
        {
            var f = new DataFile()
            {
                Encoding = null                 // AUTO
            };

            var rdr = new DbfReader(f);

            using (var file = File.Open("../../testfiles/ENCODING.dbf", FileMode.Open))
            {
                rdr.Read(file);
            }

            var wrt = new DbfWriter(f);

            using (var file = File.Open("../../testfiles/output.dbf", FileMode.OpenOrCreate | FileMode.Truncate))
            {
                wrt.Write(file);
            }

            ProviderTools.CompareFiles("../../testfiles/ENCODING.dbf", "../../testfiles/output.dbf");
        }
Ejemplo n.º 32
0
        internal RenderSettings(string shapeFileName)
        {
            dbfReader = new DbfReader(shapeFileName);

        }
Ejemplo n.º 33
0
        /// <summary>
        /// Constructs a new RenderSettings object
        /// </summary>
        /// <param name="shapeFilePath">The path to the shape file without the .shp file extension</param>
        /// <param name="fieldName">The name of the DBF field to use when labelling shapes</param>
        /// <param name="renderFont">The Font to use when labelling shapes in the shape file</param>
        public RenderSettings(string shapeFilePath, string fieldName,  Font renderFont)
        {
            if (shapeFilePath == null)
            {
                throw new ArgumentException("shapeFileName can not be null");
            }
            if (fieldName == null)
            {
                throw new ArgumentException("fieldName can not be null");
            }

            
            dbfReader = new DbfReader(shapeFilePath);

            fieldIndex = FindFieldIndex(fieldName);
            FieldName = fieldName;
            this.renderFont = renderFont;

        }