コード例 #1
0
ファイル: Działki.cs プロジェクト: damianhintz/GeoMapToKOL
        public bool dodajDzialke(Dzia³ka dzialka)
        {
            //wszystkie dzialki w pliku map
            if (!dzialki.ContainsKey(dzialka.nazwa))
            {
                dzialki.Add(dzialka.nazwa, dzialka);
            }
            else
            {
                Console.WriteLine("Powtórzony numer dzia³ki " + dzialka.nazwa);
            }

            //tylko dzialki po podziale
            if (dzialka.nr2 == "")
            {
                return(true);
            }

            //inicjowanie nowego podzialu dzialki
            if (!podzialy.ContainsKey(dzialka.nr1))
            {
                Podzia³Dzia³ki podzial = new Podzia³Dzia³ki();
                podzialy.Add(dzialka.nr1, podzial);
            }

            //grupowanie dzialek z podzialu np. 141805_2.0001.52/1 i 141805_2.0001.52/2
            if (!podzialy[dzialka.nr1].dodajDzialke(dzialka))
            {
                return(false);
            }

            return(true);
        }
コード例 #2
0
        public bool dodajDzialke(Dzia³ka dzialka)
        {
            this._nazwa = dzialka.nr1;

            //grupowanie dzialek z podzialu np. 141805_2.0001.52/1 i 141805_2.0001.52/2
            if (!_dzia³ki.ContainsKey(dzialka.nr2))
            {
                _dzia³ki.Add(dzialka.nr2, dzialka);
            }
            else
            {
                Console.WriteLine("Powtórzony numer podzialu + <" + dzialka.nr2 + ">");
                return(false);
            }

            return(true);
        }
コード例 #3
0
        public void Wczytaj(string fileName)
        {
            int    nPunkty = 0;
            string wiersz  = "";
            string a2      = "";
            string a3      = "";
            string nr      = "";
            string wkt     = "";
            string typ     = "";

            Console.WriteLine("Trwa wczytywanie pliku GeoMap...");
            var reader = new StreamReader(fileName, Encoding.GetEncoding(1250));

            while (null != (wiersz = reader.ReadLine()))
            {
                if (wiersz.Length == 0)
                {
                    Console.WriteLine("-KONIEC-");
                    continue;
                }

                //punkty oparcia obiektu
                //P status(widocznoœæ) x y h(opcjonalna) numer (opcjonalny, je¿eli jest to zaczyna siê od ,)
                //P 1   -31620.780    12477.180 ,O.141801_5.288

                char znak1 = wiersz[0];

                switch (znak1)
                {
                case ';':     //komentarz
                              //;Operator: PSobczak
                    break;

                case '*':     //rekord obiektu
                {
                    //*1246   0  21 0.00000000  #
                    if (nPunkty > 0)
                    {
                        DodajGeometriê(wkt);
                    }

                    nPunkty = 0;
                    a2      = "";
                    a3      = "";
                    wkt     = "";
                    typ     = "";
                    //kod obiektu jest czterocyfrowy
                    nr = wiersz.Substring(1, 4);

                    switch (nr)
                    {
                    case "5216":             //dzia³ka
                        typ = "D";
                        break;

                    case "5214":             //obrêb
                        typ = "O";
                        break;

                    default:
                        _inneCount++;
                        break;
                    }
                }
                break;

                case ':':     //atrybut
                              //:A2[141805_2.0001.52/8]
                    if (wiersz.StartsWith(":A2["))
                    {
                        a2 = wiersz.Substring(4);
                        a2 = a2.Replace(".AR_1.", ".");
                        a2 = a2.Replace(".AR_2.", ".");
                        a2 = a2.Replace(".AR_3.", ".");
                        a2 = a2.Replace(".AR_4.", ".");
                        //pozbywamy siê jeszcze nawiasu na koncu
                        a2 = a2.Substring(0, a2.Length - 1);

                        if (typ != "")
                        {
                            _dzia³ka = new Dzia³ka(a2, typ);
                        }
                    }
                    else
                    if (wiersz.StartsWith(":A3["))
                    {
                        a3 = wiersz.Substring(4);
                        //pozbywamy siê jeszcze nawiasu na koncu
                        a3 = a3.Substring(0, a3.Length - 1);

                        /*
                         * if (typ != "")
                         * {
                         *  if (typ == "D")
                         *      dzialka = new MapDzialka (a3 + "." + a2, typ);
                         *  else
                         *      dzialka = new MapDzialka (a2, typ);
                         * }
                         */
                    }
                    break;

                case 'L':     //etykieta
                              //L 1 0.375 0.375 0.0000000 1.0000000 7
                    break;

                case 'P':     //punkt oparcia obiektu
                {
                    //P 1   -32998.960    10739.320 ,K.141801_5
                    if (typ != "")
                    {
                        string[] cols = wiersz.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        string status = cols[1];
                        //double x = double.Parse (cols[2]);
                        //double y = double.Parse (cols[3]);
                        string sy = cols[2];
                        string sx = cols[3];

                        //("POLYGON((5757349.870 7504603.332,5757314.580 7504610.632,5757344.200 7504575.912))");
                        if (wkt.Length == 0)
                        {
                            wkt += sx + " " + sy;
                        }
                        else
                        {
                            wkt += "," + sx + " " + sy;
                        }

                        nPunkty++;
                    }
                }
                break;
                }
            }

            if (nPunkty > 0)
            {
                DodajGeometriê(wkt);
            }
            if (_inneCount > 0)
            {
                Console.WriteLine(" Obiekty inne {0}", _inneCount);
            }

            _dzia³ki.opis();
            reader.Close();
        }
コード例 #4
0
        public Geometry scalGeometrie(string numer, bool wyzsze)
        {
            Geometry union = null;

            string nr1 = numer;
            string nr2 = "";

            if (numer.Contains("/"))
            {
                string[] cols = numer.Split('/');
                nr1 = cols[0];
                nr2 = cols[1];
            }

            string numery = "";

            foreach (KeyValuePair <string, Dzia³ka> kv in _dzia³ki)
            {
                string  nr2_    = kv.Key;
                Dzia³ka dzialka = kv.Value;
                bool    scal    = false;

                numery = numery + "," + nr2_;

                if (wyzsze)
                {
                    if (nr2 != "")
                    {
                        int n2_ = int.Parse(nr2_);
                        int n2  = int.Parse(nr2);
                        if (n2_ > n2)
                        {
                            scal = true;
                        }
                    }
                    else
                    {
                        scal = true;
                    }
                }
                else
                {
                    scal = true;
                }

                if (!scal)
                {
                    continue;
                }

                if (union == null)
                {
                    union = dzialka.geometry;
                }
                else
                {
                    union = union.Union(dzialka.geometry);
                }
            }

            Geometry buffer = null;

            if (union == null)
            {
                Console.WriteLine("scalenie jest puste dla " + numer + " z " + numery);
            }
            else
            {
                //return union.ConvexHull ();
                buffer = union.Buffer(0.0, 30);

                if (buffer.GetGeometryType() != wkbGeometryType.wkbPolygon)
                {
                    //Console.WriteLine ("scalanie podzia³u " + this.nazwa + " dla " + numer);
                    //Console.WriteLine (" *scalenie nie jest ci¹g³ym obszarem " + buffer.GetGeometryType ());
                }
            }

            return(buffer);
        }
コード例 #5
0
ファイル: Działki.cs プロジェクト: damianhintz/GeoMapToKOL
        public bool analizujRoboty(Dictionary <string, ObiektyKerg> roboty)
        {
            int    nBezZakres = 0, nZakres = 0;
            string teryt = "";
            string obreb = "";

            foreach (KeyValuePair <string, ObiektyKerg> kv in roboty)
            {
                ObiektyKerg mapKerg = kv.Value;
                string      kerg    = mapKerg.kerg;

                Geometry union = null;

                foreach (string o in mapKerg.obiekty)
                {
                    string obiekt = o;

                    if (kerg == "332/92")
                    {
                        Console.Error.WriteLine(obiekt);
                    }

                    Geometry geom = null;

                    if (obiekt.Contains("."))
                    {
                        string[] cols = obiekt.Split('.');
                        teryt = cols[0];
                        obreb = cols[1];
                    }

                    if (obiekt[obiekt.Length - 1] == '.')
                    {
                        string obiektN = obiekt.Substring(0, obiekt.Length - 1);
                        Console.WriteLine(obiekt + " -> " + obiektN);
                        obiekt = obiektN;
                    }

                    if (dzialki.ContainsKey(obiekt))
                    {
                        //dla tego obiektu znaleziono zakres roboty
                        Dzia³ka dzialka = dzialki[obiekt];
                        geom = dzialka.geometry;
                    }
                    else
                    {
                        //dla tego obiektu nie znaleziono zakresu roboty, jezeli to dzialka to mogla zostac podzielona
                        string nr1 = obiekt;
                        bool   nr2 = false;

                        if (obiekt.Contains("/"))
                        {
                            string[] cols = obiekt.Split('/');
                            nr1 = cols[0];
                            nr2 = true;
                        }

                        if (podzialy.ContainsKey(obiekt))
                        {
                            //dla tego obiektu znaleziono podzia³, trzeba bedzie scalic geometrie wszystkich dzialek w podziale aby dostac zakres roboty
                            Podzia³Dzia³ki podzial = podzialy[obiekt];
                            geom = podzial.scalGeometrie(obiekt, false);
                        }
                        else
                        {
                            if (nr2 && podzialy.ContainsKey(nr1))
                            {
                                //dla tego obiektu znaleziono podzia³, trzeba bedzie scalic geometrie wszystkich dzialek w podziale aby dostac zakres roboty
                                Podzia³Dzia³ki podzial = podzialy[nr1];
                                geom = podzial.scalGeometrie(obiekt, false);
                            }
                        }
                    }

                    if (geom != null)
                    {
                        if (union == null)
                        {
                            union = geom;
                        }
                        else
                        {
                            union = union.Union(geom);
                        }
                    }
                }

                if (union == null)
                {
                    //dla tego obiektu brak zakresu roboty, mozemy dac zakres calego obrebu
                    if (teryt.Length == 8 && obreb.Length == 4)
                    {
                        string numer = teryt + "." + obreb;
                        if (dzialki.ContainsKey(numer))
                        {
                            //dla tego obiektu znaleziono zakres roboty obrebu
                            Dzia³ka dzialka = dzialki[numer];
                            union = dzialka.geometry;
                        }
                    }
                }

                if (union != null)
                {
                    shp.DodajRobotê(union, mapKerg.kerg, mapKerg.teryt);
                    nZakres++;
                }
                else
                {
                    shp.DodajKERG(mapKerg.kerg, mapKerg.teryt,
                                  mapKerg.rodzaj, mapKerg.obiekty[0],
                                  "robota bez zakresu (" + mapKerg.obiekty.Count + " obiekty)");
                    nBezZakres++;
                }
            }

            Console.WriteLine(" Roboty z zakresem {0}/{1}", nZakres, roboty.Count);
            Console.WriteLine(" Roboty bez zakresu {0}", nBezZakres);

            return(true);
        }