示例#1
0
        public static IdentyfikatorDzialki parseG5(string g5idd)
        {
            //D,G5IDD,D,142302_2.0001.296
            //D,G5IDD,D,142302_2.0007.AR_2.656
            //<teryt>.<obr>.[arkusz].<idd>
            char[]   separator = new char[] { '.' };
            string[] pola      = g5idd.Split(separator);
            int      maxFields = 4;
            int      minFields = 3;

            Kontrakt.assert(pola.Length >= minFields && pola.Length <= maxFields);
            string numerTeryt   = pola[0];
            string numerObrebu  = byte.Parse(pola[1]).ToString();
            string numerDzialki = pola[pola.Length - 1];
            string numerArkusza = string.Empty;

            if (pola.Length == 4)
            {
                numerArkusza = pola[2].Replace("AR_", "");
            }
            if (!string.IsNullOrEmpty(numerArkusza))
            {
                numerDzialki = numerArkusza + "." + numerDzialki;
            }
            return(new IdentyfikatorDzialki(numerObrebu, numerDzialki));
        }
示例#2
0
        public void Wczytaj(string fileName)
        {
            //_klu.read(Path.Combine(Path.GetDirectoryName(fileName), "uzytkiG5.csv"));
            var lines  = File.ReadAllLines(path: fileName, encoding: _kodowanie);
            var header = lines.First();

            Kontrakt.assert(
                header.Equals("Rozliczenie konturów klasyfikacyjnych na działkach [m^2]"),
                "Nieprawidłowy nagłówek pliku z rozliczeniem konturów.");
            var wczytaneDziałki = 0;
            var rekordDziałki   = new List <string>();

            for (int i = 1; i < lines.Length; i++)
            {
                var trimmedLine = lines[i].Trim();
                if (KoniecRekorduDziałki(rekordDziałki, trimmedLine))
                {
                    WczytajRekordDziałki(_rozliczenie, rekordDziałki);
                    wczytaneDziałki++;
                }
                else
                {
                    //Kumulacja rekordu działki wraz z użytkami.
                    if (!String.IsNullOrEmpty(trimmedLine))
                    {
                        rekordDziałki.Add(trimmedLine);
                    }
                }
            }
            Kontrakt.ensures(rekordDziałki.Count == 0, "Nieprawidłowo zakończony rekord działki");
            Kontrakt.ensures(_rozliczenie.Any());
            Kontrakt.ensures(wczytaneDziałki == _rozliczenie.Count());
        }
        public static bool uległaZmianie(this Działka staraDzialka, Działka nowaDzialka)
        {
            if (!nowaDzialka.Powierzchnia.Equals(staraDzialka.Powierzchnia))
            {
                return(true);                                                             //niezgodna powierzchnia działki
            }
            if (nowaDzialka.Count() != staraDzialka.Count())
            {
                return(true);                                             //niezgodna liczba użytków
            }
            var użytki = staraDzialka.UnionUżytki(nowaDzialka);

            foreach (var użytek in użytki)
            {
                Klasoużytek stary = staraDzialka.SzukajUżytku(użytek);
                Klasoużytek nowy  = nowaDzialka.SzukajUżytku(użytek);
                if (stary == null || nowy == null)
                {
                    return(true);                               //dodany/usunięty użytek
                }
                Powierzchnia stara = stary.powierzchnia();
                Powierzchnia nowa  = nowy.powierzchnia();
                if (!nowa.Equals(stara))
                {
                    return(true);                     //inna powierzchnia użytków
                }
                //if (nowa.powyzejOdchylki(stara)) return true; //powyżej odchyłki
                Kontrakt.assert(stary.Equals(nowy), "Różne oznaczenie użytku: " + stary.ToString());
            }
            return(false);
        }
示例#4
0
        public void read(string fileName)
        {
            //OZN,OFU,OZU,OZK,OPIS,OFUst,OZUst,OZKst,
            //"B","B",,,"Tereny mieszkaniowe",,"B",,
            string[] lines  = File.ReadAllLines(fileName, Encoding.GetEncoding(1250));
            string   header = lines.First();

            Kontrakt.assert(header.StartsWith("OZN,OFU,OZU,OZK,OPIS"));
            var query = from line in lines.Skip(1)
                        let split = line.Replace("\"", "").Replace("\'", "").Split(',')
                                    select new
            {
                ozn = split[0],
                ofu = split[1],
                ozu = split[2],
                ozk = split[3]
            };

            foreach (var tuple in query)
            {
                string[] ooo = new string[] { tuple.ofu, tuple.ozu, tuple.ozk };
                _oznaczenia.Add(tuple.ozn, ooo);
                _klu.Add(join(ooo), tuple.ozn);
            }
        }
示例#5
0
        public IEnumerable <DzialkaEwidencyjna> działki()
        {
            var powierzchnia = new Powierzchnia(1);

            foreach (var dze in _dokument.GetObiektyKlasy("G5DZE"))
            {
                var g5idd   = dze.GetAtrybut("G5IDD");
                var id      = IdentyfikatorDzialki.parseG5(g5idd);
                var działka = new DzialkaEwidencyjna(id, powierzchnia);
                //Nie dodawaj do działki punktów jeżeli choć jeden jest niegraniczny, aby wymusić status "nieznany" dla działki.
                if (dze.Geometria.countPunktyNiegraniczne() == 0)
                {
                    Kontrakt.assert(działka.countPunkty() == 0, "Do działki były już importowane punkty.");
                    ObiektSwde[] punktySwde = dze.Geometria.PunktyGraniczne;
                    foreach (var punktSwde in punktySwde)
                    {
                        string     g5zrd  = punktSwde.GetAtrybut("G5ZRD");
                        string     g5bpp  = punktSwde.GetAtrybut("G5BPP");
                        var        punkt  = new PunktGraniczny(g5zrd, g5bpp);
                        ObiektSwde operat = punktSwde.GetRelacja("G5RKRG");
                        string     g5syg  = operat.GetAtrybut("G5SYG");
                        punkt.operat(g5syg);
                        działka.dodajPunkt(punkt);
                    }
                }
                yield return(działka);
            }
        }
示例#6
0
        public IEnumerable <DzialkaEwidencyjna> dzialkiDotychczasowePodzielone()
        {
            Dictionary <string, DzialkaEwidencyjna> podzieloneDzialki = new Dictionary <string, DzialkaEwidencyjna>();
            List <DzialkaEwidencyjna> posortowaneDzialki = new List <DzialkaEwidencyjna>();

            foreach (var dzialka in this)
            {
                //Pomiń działki bez zdefiniowanej działki ewidencyjnej.
                if (!dzialka.przypisanaDotychczasowa())
                {
                    continue;
                }
                DzialkaEwidencyjna dzialkaDotychczasowa = dzialka.dzialkaDotychczasowa();
                //Pomiń działki niepodzielone.
                if (dzialkaDotychczasowa.countPodzielone() == 0)
                {
                    continue;
                }
                //Działka nowa powinna mieć inny identyfikator niż działka dotychczasowa!
                Kontrakt.assert(!dzialka.identyfikator().Equals(dzialkaDotychczasowa.identyfikator()),
                                "Identyfikator nowej działki jest taki sam jak dotychczasowej.");
                string idPodzielona = dzialkaDotychczasowa.identyfikator().ToString();
                if (!podzieloneDzialki.ContainsKey(idPodzielona))
                {
                    podzieloneDzialki.Add(idPodzielona, dzialkaDotychczasowa);
                    posortowaneDzialki.Add(dzialkaDotychczasowa);
                }
            }
            return(posortowaneDzialki);
        }
示例#7
0
 void wczytajPlik(string fileName)
 {
     _fileName = fileName;
     _doc      = DocX.Load(fileName);
     Kontrakt.assert(_doc.Tables.Any(), "Szablon wykazu zmian nie zawiera żadnych tabel.");
     _table       = _doc.Tables.First();
     _templateRow = _table.Rows.Last();
     wczytajNagłówek();
 }
示例#8
0
 private bool operatowePunkty(DzialkaEwidencyjna dzialka)
 {
     foreach (var punkt in dzialka.punkty())
     {
         Kontrakt.assert(punkt.rodzaj().zPomiaru());
         string operat = punkt.operat();
         if (!operaty.Contains(operat))
         {
             return(false);
         }
     }
     return(true);
 }
示例#9
0
        public void dodajKlasouzytek(Klasouzytek klasouzytek)
        {
            Kontrakt.requires(klasouzytek != null);
            int countPrzed = countKlasouzytki();

            foreach (var uzytek in _klasouzytki)
            {
                Kontrakt.assert(!uzytek.Equals(klasouzytek), "W działce " + identyfikator().ToString() + " już jest klasoużytek " + klasouzytek);
            }
            _klasouzytki.Add(klasouzytek);
            int countPo = countKlasouzytki();

            Kontrakt.ensures(countPrzed + 1 == countPo);
        }
        /// <summary>
        /// D,G5IJR,D,
        /// 142307_2.0001.G00001
        /// 281407_2.0005.B1
        /// </summary>
        /// <param name="g5ijr"></param>
        /// <returns></returns>
        public static JednostkaRejestrowa ParseG5(string g5ijr)
        {
            char[]   separator = new char[] { '.' };
            string[] pola      = g5ijr.Split(separator);
            int      maxFields = 3;
            int      minFields = 3;

            Kontrakt.assert(pola.Length >= minFields && pola.Length <= maxFields, "Nieprawidłowy format identyfikatora jednostki rejestrowej: " + g5ijr);
            string numerTeryt     = pola[0];
            string numerObrebu    = pola[1];
            string numerJednostki = pola[2];

            //int numer = int.Parse(numerJednostki.Replace("G", String.Empty));
            return(new JednostkaRejestrowa(numerTeryt, numerObrebu, numerJednostki));
        }
示例#11
0
        protected bool?pomierzonePunkty(DzialkaEwidencyjna dzialka)
        {
            List <PunktGraniczny> nieznane     = new List <PunktGraniczny>();
            List <PunktGraniczny> operatowe    = new List <PunktGraniczny>();
            List <PunktGraniczny> wektoryzacja = new List <PunktGraniczny>();
            int innePunkty = 0;

            foreach (var punkt in dzialka.punkty())
            {
                RodzajPunktu rodzaj = punkt.rodzaj();
                if (rodzaj.nieznany())
                {
                    nieznane.Add(punkt);
                }
                else if (rodzaj.zWektoryzacji())
                {
                    wektoryzacja.Add(punkt);
                }
                else if (rodzaj.zPomiaru())
                {
                    operatowe.Add(punkt);
                }
                else
                {
                    innePunkty++;
                }
            }
            Kontrakt.assert(innePunkty == 0);
            if (nieznane.Count > 0)
            {
                return(null);
            }
            if (wektoryzacja.Count > 0)
            {
                return(false);
            }
            if (operatowe.Count > 0)
            {
                return(true);
            }
            return(null);
        }
示例#12
0
        public override Rozliczenie read(string fileName)
        {
            _klu = new FabrykaKlasouzytku();
            _klu.read(Path.Combine(Path.GetDirectoryName(fileName), "uzytkiG5.csv"));

            Kontrakt.requires(File.Exists(fileName));
            string[] lines      = File.ReadAllLines(fileName, Encoding.GetEncoding(1250));
            string   headerLine = lines[0];

            Kontrakt.assert(
                headerLine.Equals("Rozliczenie konturów klasyfikacyjnych na działkach [m^2]"),
                "Nieprawidłowy nagłówek pliku z rozliczeniem konturów.");
            Rozliczenie   rozliczenie     = new Rozliczenie(_rodzajDzialki, _klu);
            int           wczytaneDzialki = 0;
            List <string> rekordDzialki   = new List <string>();

            for (int i = 1; i < lines.Length; i++)
            {
                string linia = lines[i].Trim();
                if (koniecRekorduDzialki(rekordDzialki, linia))
                {
                    readRekordDzialki(rozliczenie, rekordDzialki);
                    wczytaneDzialki++;
                }
                else
                {
                    //Kumulacja rekordu działki wraz z użytkami.
                    if (!String.IsNullOrEmpty(linia))
                    {
                        rekordDzialki.Add(linia);
                    }
                }
            }
            Kontrakt.ensures(rozliczenie != null);
            Kontrakt.ensures(rekordDzialki.Count == 0, "Nieprawidłowo zakończony rekord działki");
            Kontrakt.ensures(rozliczenie.Count() > 0);
            Kontrakt.ensures(wczytaneDzialki == rozliczenie.Count());
            return(rozliczenie);
        }
示例#13
0
        public void Wczytaj(string fileName)
        {
            var lines  = File.ReadAllLines(fileName, Encoding.GetEncoding(1250));
            var header = lines.First(); //OZN,OFU,OZU,OZK,OPIS,OFUst,OZUst,OZKst,

            Kontrakt.assert(header.StartsWith("OZN,OFU,OZU,OZK,OPIS"));
            var query = //"B","B",,,"Tereny mieszkaniowe",,"B",,
                        from line in lines.Skip(1)
                        let split = line.Replace("\"", "").Replace("\'", "").Split(',')
                                    select new
            {
                ozn = split[0],
                ofu = split[1],
                ozu = split[2],
                ozk = split[3]
            };

            foreach (var tuple in query)
            {
                _słownik.Dodaj(tuple.ozn, tuple.ofu, tuple.ozu, tuple.ozk);
            }
        }
示例#14
0
 public string toAry()
 {
     Kontrakt.assert(hektary().ToString("F4").EndsWith("00"));
     return(hektary().ToString("F2"));
 }