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); }
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); }
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(); }
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); }
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); }