Пример #1
0
        /// <summary>
        /// Tworzy geometrię odpowiadającą rekordowi przestrzennemu, zwraca null jeżeli rekord jest nieprzestrzenny.
        /// </summary>
        internal static GeometriaSwde createGeometryOrNull(DokumentSwde dokument, RekordSwdeBase rekord)
        {
            GeometriaSwde geometria = null;

            if (rekord is RekordPunktowySwde)
            {
                RekordPunktowySwde rekordPunktowy = rekord as RekordPunktowySwde;
                geometria = new PunktSwde(rekordPunktowy, dokument.Geodezyjny);
                geometria._punktyGraniczne = GetPunktyGraniczne(dokument, rekordPunktowy, out geometria._punktyNiegraniczne);
            }
            else if (rekord is RekordLiniowySwde) //Liniowym elementem jest tylko granica.
            {
                RekordLiniowySwde rekordLiniowy = rekord as RekordLiniowySwde;
                geometria = new MultiLiniaSwde(rekordLiniowy, dokument.Geodezyjny);
                geometria._punktyGraniczne = GetPunktyGraniczne(dokument, rekordLiniowy, out geometria._punktyNiegraniczne);
            }
            else if (rekord is RekordObszarowySwde)
            {
                RekordObszarowySwde rekordObszarowy = rekord as RekordObszarowySwde;
                geometria = new MultiObszarSwde(rekordObszarowy, dokument.Geodezyjny);
                geometria._punktyGraniczne = GetPunktyGraniczne(dokument, rekordObszarowy, out geometria._punktyNiegraniczne);
            }

            return(geometria);
        }
Пример #2
0
        private static ObiektSwde[] GetPunktyGraniczne(DokumentSwde dokument, RekordLiniowySwde rekordLiniowy, out int punktyNiegraniczne)
        {
            List <ObiektSwde>  punktyGraniczne = new List <ObiektSwde>();
            HashSet <RekordId> rekordyDodane   = new HashSet <RekordId>();

            punktyNiegraniczne = 0;
            foreach (var linia in rekordLiniowy.Linie)
            {
                foreach (var pozycja in linia.Segmenty)
                {
                    if (pozycja is PozycjaIdSwde || pozycja is PozycjaIdrSwde)
                    {
                        RekordSwdeBase rekord = pozycja.Rekord;

                        if (rekordyDodane.Add(rekord.Identyfikator))
                        {
                            punktyGraniczne.Add(dokument.createObiekt(rekord));
                        }
                    }
                    else
                    {
                        punktyNiegraniczne++;
                    }
                }
            }
            return(punktyGraniczne.ToArray());
        }
Пример #3
0
 internal ObiektSwde(DokumentSwde dokument, RekordSwdeBase rekord)
 {
     _dokument = dokument;
     _rekord   = rekord;
     //_geometria = GeometriaSwde.createGeometryOrNull(dokument, rekord);
     _id = new ObiektId(_rekord.Identyfikator);
 }
Пример #4
0
        /// <summary>
        /// Zwraca obiekt odpowiadający danemu rekordowi, jeżeli taki obiekt jeszcze nie istnieje to zostanie utworzony.
        /// </summary>
        /// <param name="rekord"></param>
        /// <returns></returns>
        internal ObiektSwde createObiekt(RekordSwdeBase rekord)
        {
            if (_obiekty.ContainsKey(rekord.Identyfikator))
            {
                return(_obiekty[rekord.Identyfikator]);
            }
            ObiektSwde obiekt = new ObiektSwde(this, rekord);

            _obiekty.Add(rekord.Identyfikator, obiekt);
            return(obiekt);
        }
Пример #5
0
        private bool ZapewnijUnikatowyIdr(RekordSwdeBase rekord)
        {
            string idr           = rekord.Idr;
            bool   powtorzonyIdr = _rekordy.ContainsKey(idr);

            //KontrolerKontekstu.Zapewnij(!powtorzonyIdr, string.Format("Identyfikator rekordu musi być unikatowy <{0}>.", idr));
            if (powtorzonyIdr)
            {
                LoggerSwde.PowtorzonyIdentyfikatorRekordu(rekord);
            }
            return(!powtorzonyIdr);
        }
Пример #6
0
        /// <summary>
        /// Dodaj nowy rekord do tabeli. Indeks tabel jest budowany automatycznie na podstawie typu rekordu.
        /// </summary>
        /// <param name="rekord"></param>
        public bool DodajRekord(RekordSwdeBase rekord)
        {
            string typ = RekordSwdeG5.NormalizujPrefiksTypu(rekord.Typ);

            if (!_tabele.ContainsKey(typ))
            {
                _tabele.Add(typ, new TabelaSwde(typ));
            }

            //Mogą być różne wersje obiektu o tym samym id.
            TabelaSwde tabelaTypu = _tabele[typ];

            return(tabelaTypu.DodajObiekt(rekord));
        }
Пример #7
0
        /// <summary>
        /// Wyszukuje poprzednią wersję obiektu.
        /// </summary>
        /// <returns>Poprzednia wersja obiektu lub <code>null</code> jeżeli brak poprzedniej wersji.</returns>
        internal IEnumerable <ObiektSwde> GetWersjeObiektu(RekordSwdeBase rekord)
        {
            SekcjaObiektowSwde obiekty       = _dokument.Obiekty;
            KolekcjaWersji     wersjeRekordu = obiekty.SzukajWersji(rekord.Typ, rekord.Id);
            List <ObiektSwde>  wersjeObiektu = new List <ObiektSwde>();

            //UWAGA: dostęp do daty wymaga znajomości modelu G5 (to jest wyższy poziom abstrakcji).
            foreach (RekordSwdeBase wersjaRekordu in wersjeRekordu)
            {
                wersjeObiektu.Add(createObiekt(wersjaRekordu));
            }

            return(wersjeObiektu);
        }
Пример #8
0
        /// <summary>
        /// Dodaj nowy rekord do indeksu. Może być tylko jeden rekord o podanym idr.
        /// Rekordy z pustym idr nie są dodawane do indeksu.
        /// </summary>
        /// <remarks>
        /// W pliku SWDE mogą pojawić się rekordy o tym samym idr, ten typ błędu jest niedopuszczalny.
        /// </remarks>
        /// <param name="rekord"></param>
        /// <exception cref="System.InvalidOperationException">Jeżeli identyfikator zostanie powtórzony.</exception>
        public bool Dodaj(RekordSwdeBase rekord)
        {
            string idr = rekord.Idr;

            if (string.IsNullOrEmpty(rekord.Idr))
            {
                return(true);
            }
            if (!ZapewnijUnikatowyIdr(rekord))
            {
                return(false);
            }
            _rekordy.Add(rekord.Idr, rekord);
            return(true);
        }
Пример #9
0
        /// <summary>
        /// Zwraca obiekty będące w danej relacji z tym obiektem.
        /// </summary>
        /// <param name="nazwa">Nazwa/kod relacji (bez prefiksu).</param>
        public IEnumerable <ObiektSwde> GetRelacjaWielokrotna(string nazwa)
        {
            nazwa = RekordSwdeG5.NormalizujPrefiksAtrybutu(nazwa);

            IEnumerable <WiazanieSwdeBase> wiazania = _rekord.Wiazania.Where(r => r.Pole == nazwa);

            List <ObiektSwde> obiekty = new List <ObiektSwde>();

            foreach (WiazanieSwdeBase wiazanie in wiazania)
            {
                RekordSwdeBase rekord = wiazanie.Rekord;
                //Obiekt odpowiadający rekordowi powinien już istnieć i dokument powinien posiadać instancję tego obiektu.
                obiekty.Add(_dokument.createObiekt(rekord));
            }

            return(obiekty);
        }
Пример #10
0
        /// <summary>
        /// Dodaj obiekt do tabeli (może być nowa wersja).
        /// </summary>
        /// <param name="rekord"></param>
        public bool DodajObiekt(RekordSwdeBase rekord)
        {
            string id = rekord.Id;

            if (!_wersje.ContainsKey(id))
            {
                _wersje.Add(id, new KolekcjaWersji(id));
            }

            if (!_wersje[id].DodajWersje(rekord))
            {
                return(false);
            }

            _obiekty.Add(rekord);

            return(true);
        }
Пример #11
0
 internal static void PowtorzonaAktualnaWersjaObiektu(RekordSwdeBase rekord)
 {
     error(string.Format("{0} <ID:{1},IDR:{2}>: Powtórzona aktualna wersja obiektu SWDE (ID). Rekord został pominięty.", rekord.Typ, rekord.Id, rekord.Idr));
 }
Пример #12
0
 internal static void PowtorzonyIdentyfikatorRekordu(RekordSwdeBase rekord)
 {
     error(string.Format("{0} <ID:{1},IDR:{2}>: Powtórzony identyfikator rekordu SWDE (IDR). Rekord został pominięty.", rekord.Typ, rekord.Id, rekord.Idr));
 }