예제 #1
0
        private CGXML ReadCGXML(string filePath)
        {
            CGXML cgxml        = null;
            var   deserializer = new XmlSerializer(typeof(CGXML));

            try
            {
                using (var reader = new XmlTextReader(filePath))
                {
                    if (deserializer.CanDeserialize(reader))
                    {
                        cgxml = (CGXML)deserializer.Deserialize(reader);
                    }
                    else
                    {
                        throw new ImportCGXMLException(string.Format("Fisierul {0} CGXML nu poate fi deserializat, Eroare de structura."
                                                                     , Path.GetFileName(filePath)), null);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new ImportCGXMLException(string.Format("Exceptie aruncata de XmlSerializer in functia ReadCGXML pentru fisierul {0} ", Path.GetFileName(filePath)),
                                               ex.InnerException);
            }

            return(cgxml);
        }
예제 #2
0
        public void CoordinatesPairsStereo(ref ArrayList x, ref ArrayList y, int IMMOVABLEID, int BUILDINGID)
        {
            CGXML fisier = new CGXML();

            x = new ArrayList();
            y = new ArrayList();

            if (BUILDINGID >= 0)
            {
                DataRow[] dataRowArray = fisier.Points.Select(string.Concat("BUILDINGID=", Conversions.ToString(BUILDINGID)));
                for (int i = 0; i < checked ((int)dataRowArray.Length); i = checked (i + 1))
                {
                    CGXML.PointsRow pointsRow = (CGXML.PointsRow)dataRowArray[i];
                    x.Add(Math.Round(pointsRow.X, 3));
                    y.Add(Math.Round(pointsRow.Y, 3));
                }
            }
            else
            {
                DataRow[] dataRowArray1 = fisier.Points.Select(string.Concat("IMMOVABLEID=", Conversions.ToString(IMMOVABLEID)));
                for (int j = 0; j < checked ((int)dataRowArray1.Length); j = checked (j + 1))
                {
                    CGXML.PointsRow pointsRow1 = (CGXML.PointsRow)dataRowArray1[j];
                    x.Add(Math.Round(pointsRow1.X, 3));
                    y.Add(Math.Round(pointsRow1.Y, 3));
                }
            }
        }
예제 #3
0
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            var worker = sender as BackgroundWorker;
            var result = 0;

            if (worker == null)
            {
                DispatchService.Invoke(() => ConsoleOutput.Add(string.Format("{0}: Error starting the import cgxml module (worker is null)",
                                                                             DateTime.Now.ToString(CultureInfo.InvariantCulture))));
                return;
            }

            StreamWriter  streamWriter = null;
            StringBuilder builder      = null;

            string[] files = null;
            try
            {
                if (_cgxmlFolderPath == null)
                {
                    e.Cancel = true;
                    return;
                }

                files = _multipleImport == true?Directory.GetFiles(_cgxmlFolderPath[0]) : _cgxmlFolderPath;

                streamWriter = new StreamWriter(_csvPath);
                builder      = new StringBuilder();
                builder.AppendLine("Land_Nr. CF(hartie), Land_Nr.CAD, Land_Topo,ID Eterra, Supraf. Acte, Supraf Mas, CadGenId, Nr.Titlu, Nr. Tarla, Mentiuni parcela, Parcel_Topo,PARCELNO,Proprietar");
                streamWriter.Write(builder);
            }
            catch (Exception ex)
            {
                ////DispatchService.Invoke(() => ConsoleOutput.Add(string.Format("Error: {0}",ex.Message)));
                _cancelMessage = ex.Message;
                e.Cancel       = true;
                return;
            }

            for (var i = 0; i < files.Length; ++i)
            {
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                try
                {
                    if (string.Compare(Path.GetExtension(files[i]), ".cgxml", true, CultureInfo.InvariantCulture) != 0)
                    {
                        continue;
                    }
                    CGXML cg = ReadCGXML(files[i]);
                    if (cg == null)
                    {
                        DispatchService.Invoke(() => ConsoleOutput.Add(string.Format("{0}: Eroare citire fisier {1}", DateTime.Now.ToString(CultureInfo.InvariantCulture)
                                                                                     , Path.GetFileName(files[i]))));
                        continue;
                    }
                    builder.Clear();

                    if (cg.Land != null)
                    {
                        builder.Append(RemoveSpecialCharFromString(cg.Land.PAPERLBNO?.Trim()));
                        builder.Append(",");
                        builder.Append(RemoveSpecialCharFromString(cg.Land.PAPERCADNO?.Trim()));
                        builder.Append(",");
                        builder.Append(RemoveSpecialCharFromString(cg.Land.TOPONO?.Trim()));
                        builder.Append(",");
                        builder.Append(RemoveSpecialCharFromString(cg.Land.E2IDENTIFIER?.Trim()));
                        builder.Append(",");
                        builder.Append(cg.Land.PARCELLEGALAREA);
                        builder.Append(",");
                        builder.Append(cg.Land.MEASUREDAREA);
                        builder.Append(",");
                        builder.Append(RemoveSpecialCharFromString(cg.Land.CADGENNO?.Trim()));
                        builder.Append(",");
                    }
                    else
                    {
                        builder.Append(",,,,,,,");
                    }

                    if (cg.Parcel != null)
                    {
                        StringBuilder tarla      = new StringBuilder();
                        StringBuilder titlu      = new StringBuilder();
                        StringBuilder mentiuni   = new StringBuilder();
                        StringBuilder parcelTopo = new StringBuilder();
                        StringBuilder parcelNo   = new StringBuilder();

                        foreach (var p in cg.Parcel)
                        {
                            if (!string.IsNullOrEmpty(p.LANDPLOTNO))
                            {
                                tarla.Append(RemoveSpecialCharFromString(p.LANDPLOTNO?.Trim()) + "; ");
                            }

                            if (!string.IsNullOrEmpty(p.TITLENO))
                            {
                                titlu.Append(RemoveSpecialCharFromString(p.TITLENO?.Trim()) + "; ");
                            }

                            if (!string.IsNullOrEmpty(p.NOTES))
                            {
                                mentiuni.Append(RemoveSpecialCharFromString(p.NOTES?.Trim()) + "; ");
                            }


                            if (!string.IsNullOrEmpty(p.TOPONO))
                            {
                                parcelTopo.Append(RemoveSpecialCharFromString(p.TOPONO?.Trim()) + "; ");
                            }


                            if (!string.IsNullOrEmpty(p.PARCELNO))
                            {
                                parcelNo.Append(RemoveSpecialCharFromString(p.PARCELNO?.Trim(), "_") + "; ");
                            }
                        }

                        var titluStr    = titlu?.ToString().TrimEnd(' ', ';');
                        var tarlaStr    = tarla?.ToString().TrimEnd(' ', ';');
                        var mentiuniStr = mentiuni?.ToString().TrimEnd(' ', ';');

                        var parcelTopoStr = parcelTopo?.ToString().TrimEnd(' ', ';');
                        var parcelNoStr   = parcelNo?.ToString().TrimEnd(' ', ';', '_');

                        builder.Append(titluStr);
                        builder.Append(",");
                        builder.Append(tarlaStr);
                        builder.Append(",");
                        builder.Append(mentiuniStr);
                        builder.Append(",");
                        builder.Append(parcelTopoStr);
                        builder.Append(",");
                        builder.Append(parcelNoStr);
                        builder.Append(",");
                    }
                    else
                    {
                        builder.Append(",,,");
                    }

                    if (cg.Person != null)
                    {
                        StringBuilder nume = new StringBuilder();
                        foreach (var p in cg.Person)
                        {
                            if (!string.IsNullOrEmpty(p.FIRSTNAME) || !string.IsNullOrEmpty(p.LASTNAME))
                            {
                                p.FIRSTNAME = RemoveSpecialCharFromString(p.FIRSTNAME);
                                p.LASTNAME  = RemoveSpecialCharFromString(p.LASTNAME);;
                                nume.AppendFormat("{0} {1}", p.FIRSTNAME?.Trim(), p.LASTNAME?.Trim());
                            }
                        }

                        var numeStr = nume?.ToString().TrimEnd();

                        if (numeStr.EndsWith(";"))
                        {
                            numeStr.Remove(numeStr.Length - 1, 1);
                        }

                        builder.Append(numeStr);
                    }
                    streamWriter.WriteLine(builder);
                    DispatchService.Invoke(() => ConsoleOutput.Add(string.Format("{0}: Fisierul {1} importat cu succes", DateTime.Now.ToString(CultureInfo.InvariantCulture),
                                                                                 Path.GetFileName(files[i]))));
                }
                catch (Exception ex)
                {
                    DispatchService.Invoke(() => ConsoleOutput.Add(string.Format("{0}: Eroare citire fisier {1}. {2}", DateTime.Now.ToString(CultureInfo.InvariantCulture)
                                                                                 , Path.GetFileName(files[i]), ex.Message)));
                    continue;
                }

                if (worker.WorkerReportsProgress)
                {
                    worker.ReportProgress((i + 1) * 100 / files.Length);
                }

                result = i + 1;
            }

            e.Result = result;
            streamWriter.Close();
        }
예제 #4
0
        private void button3_Click(object sender, EventArgs e)
        {
            if (this.listBox1.Visible != true)
            {
                this.listBox1.Visible = true;
            }
            string sector = "";
            //browse
            FolderBrowserDialogEx CostumFolderBrowserDialog = new FolderBrowserDialogEx();
            string Titlu = "Alege Dosarul cu CGXML'uri";

            CostumFolderBrowserDialog.Title         = Titlu;
            CostumFolderBrowserDialog.StartPosition = FormStartPosition.CenterParent;
            DialogResult dr = CostumFolderBrowserDialog.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                CostumFolderBrowserDialogPath = CostumFolderBrowserDialog.SelectedPath;
            }
            string[]        filez = Directory.GetFiles(CostumFolderBrowserDialogPath.ToString(), "*.cgxml", SearchOption.AllDirectories);
            NumericComparer ns    = new NumericComparer();

            System.Array.Sort(filez, ns);
            var files = filez.Select(x => new FileInfo(x)).ToArray();
            //initial vars
            string futureFieldName    = "ID";
            string futureFieldAreaCG  = "Sup Mas";
            string futureFieldLegalCG = "Sup Acte";
            string futurePerson       = "Persoana";
            int    nrCGXML            = 0;
            int    intr = 0;

            for (int i = 0; i < (int)files.Length; i++)
            {
                nrCGXML++;
            }
            //Create a future list
            IList <Feature> futuresList = new List <Feature>();

            //loop trough cgxml
            for (int i = 0; i < (int)files.Length; i++)
            {
                FileInfo fo     = files[i];
                CGXML    fisier = new CGXML();
                try
                {
                    fisier.ReadXml(fo.FullName);
                }
                catch (Exception exception)
                {
                    Exception ex = exception;
                    MessageBox.Show(string.Concat(new string[] { "Eroare ", ex.GetType().ToString(), "\n", ex.Message, fo.FullName }));
                }

                //create geometry factory
                IGeometryFactory geomFactory = NtsGeometryServices.Instance.CreateGeometryFactory();
                IGeometry[]      gr          = new IGeometry[nrCGXML];
                foreach (CGXML.LandRow lr in fisier.Land)
                {
                    var          r         = 0;
                    string       Person    = "";
                    var          q         = 0;
                    Coordinate[] myCoord   = new Coordinate[fisier.Points.Count + 1];
                    string[]     personArr = new string[fisier.Person.Count];
                    sector = lr.CADSECTOR.ToString();
                    foreach (CGXML.PointsRow pr in fisier.Points)
                    {
                        if (pr.IMMOVABLEID != 9898989)
                        {
                            myCoord[r++] = new Coordinate(pr.X, pr.Y);
                        }
                    }
                    if (myCoord[r - 1] != myCoord[0])
                    {
                        myCoord[r] = myCoord[0];
                    }

                    foreach (CGXML.PersonRow pp in fisier.Person)
                    {
                        personArr[q++] = string.Concat(pp.FIRSTNAME, " ", pp.LASTNAME);
                    }
                    //create the default table with fields - alternately use DBaseField classes
                    AttributesTable t = new AttributesTable();
                    t.AddAttribute(futureFieldName, lr.CADGENNO);
                    t.AddAttribute(futureFieldAreaCG, lr.MEASUREDAREA);
                    t.AddAttribute(futureFieldLegalCG, lr.PARCELLEGALAREA);
                    t.AddAttribute(futurePerson, personArr[0]);
                    //Geometry
                    myCoord  = myCoord.Where(c => c != null).ToArray();
                    gr[intr] = geomFactory.CreatePolygon(myCoord);
                    futuresList.Add(new Feature(gr[intr], t));
                    intr++;
                }
            }
            //Feature list
            IList <Feature>     features  = futuresList.OfType <Feature>().ToList();
            string              shapefile = string.Concat(CostumFolderBrowserDialogPath, "\\", "Imobile ", sector);
            ShapefileDataWriter writer    = new ShapefileDataWriter(shapefile)
            {
                Header = ShapefileDataWriter.GetHeader(features[0], features.Count)
            };

            writer.Write(features);

            System.Diagnostics.Process.Start("explorer.exe", CostumFolderBrowserDialogPath);
        }
예제 #5
0
파일: Form1.cs 프로젝트: uZuRu17/XML2SHP
        private void button1_Click(object sender, EventArgs e)
        {
            //initial vars
            string futureFieldSector  = "Sector";
            string futureFieldName    = "ID";
            string futureIE           = "IE";
            string futureFieldAreaCG  = "Sup Mas";
            string futureFieldLegalCG = "Sup Acte";
            string futureFieldTitle   = "Titlu";
            string futureFieldTarla   = "Tarla";
            string futureFieldParcel  = "Parcela";
            string futurePerson       = "Persoana";
            string futureDead         = "Decedat";
            string futureIntravilan   = "Intra";
            string futureImprejmuit   = "Ingradit";
            int    nrCGXML            = 0;
            int    intr = 0;
            //Create a future list
            IList <Feature> futuresList        = new List <Feature>();
            IList <Feature> CladirifuturesList = new List <Feature>();

            //browse
            string filePath = textBox1.Text;

            string[] filez = Directory.GetFiles(filePath, "*.cgxml", SearchOption.AllDirectories);
            var      files = filez.Select(x => new FileInfo(x)).ToArray();

            for (int i = 0; i < (int)files.Length; i++)
            {
                nrCGXML++;
            }

            //loop trough cgxml
            for (int i = 0; i < (int)files.Length; i++)
            {
                FileInfo fo     = files[i];
                CGXML    fisier = new CGXML();
                try
                {
                    fisier.ReadXml(fo.FullName);
                }
                catch (Exception exception)
                {
                    Exception ex = exception;
                    MessageBox.Show(string.Concat(new string[] { "Eroare ", ex.GetType().ToString(), "\n", ex.Message, fo.FullName }));
                }

                //create geometry factory
                GeometryFactory geomFactory     = NtsGeometryServices.Instance.CreateGeometryFactory();
                GeometryFactory fabricaGeometri = NtsGeometryServices.Instance.CreateGeometryFactory();
                Geometry[]      gr = new Geometry[nrCGXML];
                List <Geometry> geometrieCladiri = new List <Geometry>();

                Dictionary <int, List <Coordinate> > BCoordinates = new Dictionary <int, List <Coordinate> >();

                foreach (CGXML.PointsRow pr in fisier.Points)
                {
                    if (pr.BuildingRow == null)
                    {
                        continue;
                    }
                    if (!BCoordinates.ContainsKey(pr.BUILDINGID))
                    {
                        BCoordinates.Add(pr.BUILDINGID, new List <Coordinate>());
                    }
                    else
                    {
                        BCoordinates[pr.BUILDINGID].Add(new Coordinate(pr.X, pr.Y));
                    }
                }
                int indexCladire = 0;
                foreach (CGXML.LandRow lr in fisier.Land)
                {
                    // List<Coordinate> bCoord = new List<Coordinate>();
                    foreach (CGXML.BuildingRow br in fisier.Building)
                    {
                        AttributesTable Btable = new AttributesTable();
                        Btable.Add(futureFieldSector, lr.CADSECTOR);
                        Btable.Add(futureFieldName, lr.CADGENNO);
                        Btable.Add("nrCladire", br.BUILDNO);
                        Btable.Add("destCladire", br.BUILDINGDESTINATION);

                        //Geometry
                        //bCoord = bCoord.Where(c => c != null).ToArray();
                        if (BCoordinates[indexCladire + 1].First() != BCoordinates[indexCladire + 1].Last())
                        {
                            BCoordinates[indexCladire + 1].Add(BCoordinates[indexCladire + 1].First());
                        }
                        geometrieCladiri.Add(fabricaGeometri.CreatePolygon(BCoordinates[indexCladire + 1].ToArray()));
                        //gr[indexCladire] = geomFactory.CreatePolygon(  BCoordinates[indexCladire].ToArray());
                        CladirifuturesList.Add(new Feature(geometrieCladiri[indexCladire], Btable));
                        indexCladire++;
                    }


                    var          r             = 0;
                    string       Person        = "";
                    var          q             = 0;
                    int          v             = 0;
                    string       intratest     = "";
                    string       ie            = lr.E2IDENTIFIER;
                    string       imprej        = (lr.ENCLOSED ? "DA" : "NU").ToString();
                    int          parcelCount   = fisier.Parcel.Count;
                    string[]     titleNO       = new string[parcelCount];
                    string[]     landLotNO     = new string[parcelCount];
                    string[]     parcelNO      = new string[parcelCount];
                    List <bool>  intraNO       = new List <bool>();
                    string       intraString   = "";
                    Coordinate[] myCoord       = new Coordinate[fisier.Points.Count + 1];
                    string[]     personArr     = new string[fisier.Person.Count];
                    string[]     deadPersonArr = new string[fisier.Person.Count];
                    string       sector        = lr.CADSECTOR.ToString();
                    foreach (CGXML.PointsRow pr in fisier.Points)
                    {
                        if (pr.IMMOVABLEID != 9898989)
                        {
                            myCoord[r++] = new Coordinate(pr.X, pr.Y);
                        }
                    }
                    if (myCoord[r - 1] != myCoord[0])
                    {
                        myCoord[r] = myCoord[0];
                    }
                    foreach (CGXML.PersonRow pp in fisier.Person)
                    {
                        personArr[q]     = string.Concat(pp.FIRSTNAME, " ", pp.LASTNAME);
                        deadPersonArr[q] = (pp.DEFUNCT ? "DA" : "NU");
                        q++;
                    }
                    foreach (CGXML.ParcelRow pr in fisier.Parcel)
                    {
                        titleNO[v]   = pr.TITLENO;
                        landLotNO[v] = pr.LANDPLOTNO;
                        parcelNO[v]  = pr.PARCELNO;
                        intraNO.Add(pr.INTRAVILAN);

                        v++;
                    }
                    string[] titleNO2 = titleNO.Distinct().ToArray();
                    titleNO2 = titleNO2.Where(f => f != null).ToArray();
                    string[] landLotNO2 = landLotNO.Distinct().ToArray();
                    landLotNO2 = landLotNO2.Where(p => p != null).ToArray();
                    string[] parcelNo2 = parcelNO.Distinct().ToArray();
                    parcelNo2 = parcelNO.Where(l => l != null).ToArray();
                    string titleNO3   = string.Join(" , ", titleNO2);
                    string landLotNO3 = string.Join(" , ", landLotNO2);
                    string parcelNO3  = string.Join(" , ", parcelNo2);
                    if (!intraNO.Contains(false) && intraNO.Contains(true))
                    {
                        intraString = "Intra";
                    }
                    else if (intraNO.Contains(false) && !intraNO.Contains(true))
                    {
                        intraString = "Extra";
                    }
                    else
                    {
                        intraString = "Mixt";
                    }
                    string personTest  = string.Join(" , ", personArr);
                    string deadPesTest = string.Join(" , ", deadPersonArr);

                    //create the default table with fields - alternately use DBaseField classes
                    AttributesTable t = new AttributesTable();
                    t.Add(futureFieldSector, lr.CADSECTOR);
                    t.Add(futureFieldName, lr.CADGENNO);
                    t.Add(futureIE, lr.E2IDENTIFIER);
                    t.Add(futureFieldAreaCG, lr.MEASUREDAREA);
                    t.Add(futureFieldLegalCG, lr.PARCELLEGALAREA);
                    t.Add(futurePerson, personTest);
                    t.Add(futureDead, deadPesTest);
                    t.Add(futureFieldTitle, titleNO3);
                    t.Add(futureFieldTarla, landLotNO3);
                    t.Add(futureFieldParcel, parcelNO3);
                    t.Add(futureImprejmuit, imprej);
                    t.Add(futureIntravilan, intraString);
                    //Geometry
                    myCoord  = myCoord.Where(c => c != null).ToArray();
                    gr[intr] = geomFactory.CreatePolygon(myCoord);
                    futuresList.Add(new Feature(gr[intr], t));
                    intr++;
                }
                indexCladire = 0;
            }

            //Feature list
            IList <Feature>     features  = futuresList.OfType <Feature>().ToList();
            string              shapefile = string.Concat(filePath, "\\", "Imobile");
            ShapefileDataWriter writer    = new ShapefileDataWriter(shapefile)
            {
                Header = ShapefileDataWriter.GetHeader(features[0], features.Count)
            };

            writer.Write(features);

            //Cladiri Feature list
            IList <Feature>     Cladirifeatures  = CladirifuturesList.OfType <Feature>().ToList();
            string              Cladirishapefile = string.Concat(filePath, "\\", "Cladiri");
            ShapefileDataWriter Cladiriwriter    = new ShapefileDataWriter(shapefile)
            {
                Header = ShapefileDataWriter.GetHeader(Cladirifeatures[0], Cladirifeatures.Count)
            };

            Cladiriwriter.Write(Cladirifeatures);
        }