private static void ExportGraaf(Graaf g) { int graafId = g.Id; using (SqlConnection conn = new SqlConnection(_connString)) { string sql = "INSERT INTO Graaf(Id)" + "VALUES (@Id);"; SqlCommand cmd = new SqlCommand(sql, conn); cmd.Parameters.Add("@Id", SqlDbType.Int); cmd.Parameters["@Id"].Value = graafId; try { conn.Open(); cmd.ExecuteNonQuery(); } catch (Exception e) { Console.WriteLine(e.Message); } } if (g.Map != null) { foreach (var segment in g.Map) { if (!_weggeschrevenSegmenten.Contains(segment.Id)) { ExportSegment(segment); _weggeschrevenSegmenten.Add(segment.Id); } ExportTussenTabel(graafId, segment.Id, "GraafId_SegmentId"); } } }
//hulpmethode public Graaf BouwGraaf(List <Segment> segmenten, int straatId) { Dictionary <Knoop, List <Segment> > map = new Dictionary <Knoop, List <Segment> >(); foreach (Segment seg in segmenten) { if (map.ContainsKey(seg.BeginKnoop)) { map[seg.BeginKnoop].Add(seg); } else { map.Add(seg.BeginKnoop, new List <Segment> { seg }); } if (map.ContainsKey(seg.EindKnoop)) { map[seg.EindKnoop].Add(seg); } else { map.Add(seg.EindKnoop, new List <Segment> { seg }); } } Graaf result = new Graaf(straatId, map); return(result); }
// // geeft al de straten die in provincie>gemeente>straat zitten een wegsegment terug. // Wegsegmenten werden gemaakt door MaakSegmenten_vanDocument(). public void GeefStratenWegSegment(List <Straat> stratenLijst) { List <Segment> wegSegmentenLijst = new List <Segment>(); //duurt 20 sec wegSegmentenLijst = MaakSegmenten_vanDocument().OrderBy(o => o.linksStraatnaamID).ToList(); // v idk yet, neemt veel in //int x = wegSegmentenLijst.RemoveAll(wsg => !provincies.Any(p => p.gemeenteLijst.Any // (g => g.stratenNaamId.Contains(wsg.linksStraatnaamID.ToString()) // || g.stratenNaamId.Contains(wsg.rechtsStraatnaamID.ToString())))); List <Segment> wegSegmentenLijst_VoorHuidige_straat; for (int i = 0; i < stratenLijst.Count(); i++) { wegSegmentenLijst_VoorHuidige_straat = new List <Segment>(); foreach (Segment se in wegSegmentenLijst.Where(ws => ws.linksStraatnaamID <= stratenLijst[i].straatID + 1 && ws.linksStraatnaamID >= stratenLijst[i].straatID - 1 )) { if (se.linksStraatnaamID.Equals(stratenLijst[i].straatID)) { if (wegSegmentenLijst_VoorHuidige_straat.Count.Equals(0) || !wegSegmentenLijst_VoorHuidige_straat.Exists(segm => segm.beginknoop.Equals(se.beginknoop) && segm.eindknoop.Equals(se.eindknoop) )) { wegSegmentenLijst_VoorHuidige_straat.Add(se); } else { Segment segmKop = wegSegmentenLijst_VoorHuidige_straat.Where(segm => segm.beginknoop.Equals(se.beginknoop) && segm.eindknoop.Equals(se.eindknoop)).First(); if (segmKop.Length > se.Length) { //doe niets } else { wegSegmentenLijst_VoorHuidige_straat.Add(se); wegSegmentenLijst_VoorHuidige_straat.Remove(segmKop); } } } } if (wegSegmentenLijst_VoorHuidige_straat.Count > 0) { Graaf graafx = Graaf.buildGraaf(wegSegmentenLijst_VoorHuidige_straat); stratenLijst[i].graaf = graafx; stratenLijst[i].StraatLengthBerekenen(); if (stratenLijst[i].Length == 0) { stratenLijst.Remove(stratenLijst[i]); } List <Segment> toRemove = new List <Segment>(); toRemove = wegSegmentenLijst_VoorHuidige_straat; foreach (Segment item in toRemove) { wegSegmentenLijst.Remove(item); } } } }
// GraafBestand.txt(>GraafId; KnoopId; knoop x punt; knoop y punt; (segmID;segm.beginknoop.knoopID;segm.eindknoop.knoopID)[(punt.x,punt.y)(punt.x,punt.y)...]<) //geeft Graaf lijst terug public List <Graaf> getGraafenLijst() { //deze code is niet bepaald mooi, maar het werkt, en ik ben er wel beetje trots op :) getalleknopen = new List <Knoop>(); getallesegmenten = new List <Segment>(); List <Graaf> graafLijst = new List <Graaf>(); List <string> GraafInfoLIJN; using (FileStream fs = File.Open(@"..\..\..\..\dataVanTool1\GraafTest2.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (BufferedStream bs = new BufferedStream(fs)) using (StreamReader sreader = new StreamReader(bs)) { string input = null; //sla de eerste regel over. sreader.ReadLine(); Graaf dummyGraaf; while ((input = sreader.ReadLine()) != null) { GraafInfoLIJN = new List <string>(); string woord = input; //Splits het tekstbestand op per graaf sinds elke graaf begint met een '>' teken. string[] wholeLine = woord.Split('>').Where(val => val != "").ToArray();; string x = wholeLine[0]; //dit lijn vergemakelijkt het later om de tekst te manipuleren. string[] wholeLine1 = x.Replace(")]) ", ")]); ").Replace(")])<", ")]); ").Split(';'); //doet bv. "graafID9" => "9". wholeLine1[0] = wholeLine1[0].Replace("graafID", ""); //maak graaf aan met id, gaat hij voor elke graaf doen. dummyGraaf = new Graaf(Convert.ToInt32(wholeLine1[0])); //verwijder de id [0] van de te bewerken data (want de id werd al gebruikt) wholeLine1 = wholeLine1.Skip(1).ToArray(); //maakt knopenLijst opnieuw leeg aan, hier komen al de knopen voor de graaf. List <Knoop> knopen = new List <Knoop>(); //gaat meestal tijdelijk een knoopid, x, y punten bijhouden List <String> knooptekst = new List <string>(); //overloop de graaf tot zijn tekst opgebruikt is //mijn manier van werken is de lijst steeds te verminderen door lijnen te verwijderen eens ik het gebruikt heb. while (wholeLine1.Count() != 0) { //graaf tekst is op gebruikt? voeg graaf toe aan de lijst die je gaat terug geven. if (wholeLine1[0] == " ") { foreach (Knoop knp in knopen) { dummyGraaf.map.Add(knp, knp.segmenten); //nodig gehad om dbo.Knoop aan te maken //getalleknopen.Add(knp); foreach (Segment seg in knp.segmenten) { getallesegmenten.Add(seg); } } graafLijst.Add(dummyGraaf); wholeLine1 = wholeLine1.Skip(1).ToArray(); } for (int i = 0; i < wholeLine1.Count(); i++) { //is de volgende info een knoop? if (wholeLine1[0].StartsWith(" KnoopId")) { knooptekst = wholeLine1.Take(3).ToList(); knooptekst[0] = knooptekst[0].Replace(" KnoopId,puntx,punty: ", ""); knopen.Add(new Knoop(Convert.ToInt32(knooptekst[0]), new Punt(Convert.ToDouble(knooptekst[1]), Convert.ToDouble(knooptekst[2])))); wholeLine1 = wholeLine1.Skip(3).ToArray(); } //is de volgende info een segment? if (wholeLine1[0].StartsWith("( segmentID") || wholeLine1[0].StartsWith(" segmentID,be") ) { // neemt de segmentID,beginknoop.knoopID,eindknoop.knoopID van een knoop List <String> segmentTekst = wholeLine1.Take(5).ToList(); segmentTekst[0] = segmentTekst[0].Replace("( segmentID,beginknoop.knoopID,eindknoop.knoopID,linksStraatnaamID,rechtsStraatnaamID: ", ""); segmentTekst[0] = segmentTekst[0].Replace(" segmentID,beginknoop.knoopID,eindknoop.knoopID,linksStraatnaamID,rechtsStraatnaamID: ", ""); // maakt een segment van die (segmentID,beginknoop.knoopID,eindknoop.knoopID van een knoop) Segment dummySeg = new Segment(Convert.ToInt32(segmentTekst[0]), Convert.ToInt32(segmentTekst[1]), Convert.ToInt32(segmentTekst[2]), Convert.ToInt32(segmentTekst[3]), Convert.ToInt32(segmentTekst[4])); // verwijder de 3 gebruikte lijnen wholeLine1 = wholeLine1.Skip(5).ToArray(); //nu de punten van de segment hierboven ophalen string[] punten = wholeLine1[0].Replace(";[(", "").Split(']'); List <Punt> puntenLijst = new List <Punt>(); punten[0] = punten[0].Replace("[(", "").Replace("(", "".Replace(")", "")); List <String> puntenApart = punten[0].Split(')').ToList(); puntenApart.ForEach(lijn => { if (lijn != "") { String[] lx = lijn.Split(","); dummySeg.punten_verticles.Add(new Punt(Convert.ToDouble(lx[0]), Convert.ToDouble(lx[1]))); } }); knopen.Where(k => k.knoopID == Convert.ToInt32(knooptekst[0])).First().segmenten.Add(dummySeg); wholeLine1 = wholeLine1.Skip(1).ToArray(); //punten heeft altijd een Lijst<Punt> op punten[0] //maar soms neemt die de volgende segm mee en die komt dan naar punten[1] //enkel als de knoop meerdere segm heeft if (punten.Length > 0) { if (punten[1] != ")") { punten[1] = punten[1].Replace(") segmentID,beginknoop.knoopID,eindknoop.knoopID,linksStraatnaamID,rechtsStraatnaamID: ", ""); } ; } } } } } return(graafLijst); } }
public void InputGraaf(Node startNode, Node eindNode, List <Node> list) { g = new Graaf(list); nodess = g.Dijkstra(startNode, eindNode); g = null; }
//extra ter vervollediging public Gemeente ReturnGemeenteVoorGemeenteNaam(string gemeenteNaam) { string gemeenteQuery = "SELECT * FROM dbo.gemeente WHERE Naam=@gemeenteNaam"; string straatQuery = "SELECT * FROM dbo.straat JOIN gemeenteStraatLink ON gemeenteStraatLink.StraatId = straat.Id WHERE gemeenteStraatLink.GemeenteId = @GemeenteId"; string segmentQuery = "SELECT * FROM dbo.segment JOIN straatSegmenten ON straatSegmenten.SegmentId = segment.Id WHERE straatId = @StraatId"; string knoopQuery = "SELECT punt.X,punt.Y FROM dbo.knoop JOIN punt ON knoop.PuntId = Punt.Id WHERE knoop.Id = @KnoopId"; string puntQuery = "SELECT * FROM dbo.punt JOIN dbo.vertices ON punt.Id=vertices.PuntId WHERE vertices.segmentId = @segmentId"; SqlConnection connection = getConnection(); using (SqlCommand knoopCommand = connection.CreateCommand()) using (SqlCommand puntCommand = connection.CreateCommand()) using (SqlCommand segmentCommand = connection.CreateCommand()) using (SqlCommand gemeenteCommand = connection.CreateCommand()) using (SqlCommand straatCommand = connection.CreateCommand()) { gemeenteCommand.CommandText = gemeenteQuery; gemeenteCommand.Parameters.Add(new SqlParameter("@GemeenteNaam", SqlDbType.NVarChar)); gemeenteCommand.Parameters["@GemeenteNaam"].Value = gemeenteNaam; straatCommand.CommandText = straatQuery; straatCommand.Parameters.Add(new SqlParameter("@GemeenteId", SqlDbType.Int)); segmentCommand.CommandText = segmentQuery; segmentCommand.Parameters.Add(new SqlParameter("@StraatId", SqlDbType.Int)); knoopCommand.CommandText = knoopQuery; knoopCommand.Parameters.Add(new SqlParameter("@KnoopId", SqlDbType.Int)); puntCommand.CommandText = puntQuery; puntCommand.Parameters.Add(new SqlParameter("@SegmentId", SqlDbType.Int)); connection.Open(); try { SqlDataReader reader = gemeenteCommand.ExecuteReader(); reader.Read(); int gemeenteId = (int)reader["Id"]; reader.Close(); List <int> straatIds = new List <int>(); List <string> straatNamen = new List <string>(); straatCommand.Parameters["@GemeenteId"].Value = gemeenteId; reader = straatCommand.ExecuteReader(); Gemeente gemeente = new Gemeente(gemeenteId, gemeenteNaam); while (reader.Read()) { straatIds.Add((int)reader["Id"]); straatNamen.Add((string)reader["Naam"]); } reader.Close(); for (int index = 0; index < straatIds.Count; index++) { segmentCommand.Parameters["@StraatId"].Value = straatIds[index]; reader = segmentCommand.ExecuteReader(); List <Segment> segmenten = new List <Segment>(); List <int> segmentIds = new List <int>(); List <int> beginKnoopIds = new List <int>(); List <int> eindKnoopIds = new List <int>(); while (reader.Read()) { segmentIds.Add((int)reader["Id"]); beginKnoopIds.Add((int)reader["BeginKnoopId"]); eindKnoopIds.Add((int)reader["EindKnoopId"]); } reader.Close(); //hier beginnen we te loopen om onze segmenten op te bouwen. for (int i = 0; i < segmentIds.Count; i++) { knoopCommand.Parameters["@KnoopId"].Value = beginKnoopIds[i]; reader = knoopCommand.ExecuteReader(); reader.Read(); double beginX = (double)reader["X"]; double beginY = (double)reader["Y"]; reader.Close(); knoopCommand.Parameters["@KnoopId"].Value = eindKnoopIds[i]; reader = knoopCommand.ExecuteReader(); reader.Read(); double eindX = (double)reader["X"]; double eindY = (double)reader["Y"]; reader.Close(); puntCommand.Parameters["@SegmentId"].Value = segmentIds[i]; reader = puntCommand.ExecuteReader(); List <Punt> punten = new List <Punt>(); while (reader.Read()) { punten.Add(new Punt((double)reader["X"], (double)reader["Y"])); } reader.Close(); Knoop beginKnoop = new Knoop(beginKnoopIds[i], new Punt(beginX, beginY)); Knoop eindKnoop = new Knoop(eindKnoopIds[i], new Punt(eindX, eindY)); segmenten.Add(new Segment(segmentIds[i], beginKnoop, eindKnoop, punten)); } Graaf tempGraaf = BouwGraaf(segmenten, straatIds[index]); Straat tempstraat = new Straat(straatIds[index], straatNamen[index], tempGraaf, gemeente); } return(gemeente); } catch (Exception ex) { Console.WriteLine(ex); return(null); } finally { connection.Close(); } } }
public Straat ReturnStraatInGemeente(int straatId, Gemeente gemeente) { string straatQuery = "SELECT * FROM dbo.straat WHERE Id=@StraatId"; string segmentQuery = "SELECT * FROM dbo.segment JOIN straatSegmenten ON straatSegmenten.SegmentId = segment.Id WHERE straatId = @StraatId"; string knoopQuery = "SELECT punt.X,punt.Y FROM dbo.knoop JOIN punt ON knoop.PuntId = Punt.Id WHERE knoop.Id = @KnoopId"; string puntQuery = "SELECT * FROM dbo.punt JOIN dbo.vertices ON punt.Id=vertices.PuntId WHERE vertices.segmentId = @segmentId ORDER BY vertices.PuntId"; SqlConnection connection = getConnection(); using (SqlCommand puntCommand = connection.CreateCommand()) using (SqlCommand knoopCommand = connection.CreateCommand()) using (SqlCommand segmentCommand = connection.CreateCommand()) using (SqlCommand straatCommand = connection.CreateCommand()) { straatCommand.CommandText = straatQuery; straatCommand.Parameters.Add(new SqlParameter("@StraatId", SqlDbType.Int)); straatCommand.Parameters["@StraatId"].Value = straatId; segmentCommand.CommandText = segmentQuery; segmentCommand.Parameters.Add(new SqlParameter("@StraatId", SqlDbType.Int)); segmentCommand.Parameters["@StraatId"].Value = straatId; knoopCommand.CommandText = knoopQuery; knoopCommand.Parameters.Add(new SqlParameter("@KnoopId", SqlDbType.Int)); puntCommand.CommandText = puntQuery; puntCommand.Parameters.Add(new SqlParameter("@SegmentId", SqlDbType.Int)); connection.Open(); try { List <Segment> segmenten = new List <Segment>(); SqlDataReader reader = straatCommand.ExecuteReader(); reader.Read(); string straatnaam = (string)reader["Naam"]; reader.Close(); reader = segmentCommand.ExecuteReader(); List <int> segmentIds = new List <int>(); List <int> beginKnoopIds = new List <int>(); List <int> eindKnoopIds = new List <int>(); while (reader.Read()) { segmentIds.Add((int)reader["Id"]); beginKnoopIds.Add((int)reader["BeginKnoopId"]); eindKnoopIds.Add((int)reader["EindKnoopId"]); } reader.Close(); //hier beginnen we te loopen om onze segmenten op te bouwen. for (int i = 0; i < segmentIds.Count; i++) { knoopCommand.Parameters["@KnoopId"].Value = beginKnoopIds[i]; reader = knoopCommand.ExecuteReader(); reader.Read(); double beginX = (double)reader["X"]; double beginY = (double)reader["Y"]; reader.Close(); knoopCommand.Parameters["@KnoopId"].Value = eindKnoopIds[i]; reader = knoopCommand.ExecuteReader(); reader.Read(); double eindX = (double)reader["X"]; double eindY = (double)reader["Y"]; reader.Close(); puntCommand.Parameters["@SegmentId"].Value = segmentIds[i]; reader = puntCommand.ExecuteReader(); Knoop beginKnoop = new Knoop(beginKnoopIds[i], new Punt(beginX, beginY)); Knoop eindKnoop = new Knoop(eindKnoopIds[i], new Punt(eindX, eindY)); List <Punt> punten = new List <Punt>() { beginKnoop.SegmentPunt }; while (reader.Read()) { punten.Add(new Punt((double)reader["X"], (double)reader["Y"])); } reader.Close(); punten.Add(eindKnoop.SegmentPunt); segmenten.Add(new Segment(segmentIds[i], beginKnoop, eindKnoop, punten)); } Graaf tempGraaf = BouwGraaf(segmenten, straatId); Straat returnStraat = new Straat(straatId, straatnaam, tempGraaf, gemeente); return(returnStraat); } catch (Exception ex) { Console.WriteLine(ex); return(null); } finally { connection.Close(); } } }
//Console.WriteLine("testen"); //Belgie belg = TestData(); ////Knoop knoop1 = new Knoop(30, new Punt(2.45, 3.45)); ////dp.FillDataBase(); //} static Belgie TestData() { Punt testPunt1 = new Punt(2.45, 3.45); Punt testPunt2 = new Punt(3.45, 4.45); Punt testPunt3 = new Punt(4.45, 5.45); Punt testPunt4 = new Punt(5.45, 6.45); Punt testPunt5 = new Punt(6.45, 7.45); Knoop knoop1 = new Knoop(30, testPunt1); Knoop knoop2 = new Knoop(40, testPunt2); Knoop knoop3 = knoop1; Knoop knoop4 = new Knoop(50, testPunt3); List <Punt> puntlijstSeg1 = new List <Punt> { testPunt4 }; List <Punt> puntlijstSeg2 = new List <Punt> { testPunt5 }; Segment testSegment1 = new Segment(112, knoop1, knoop2, puntlijstSeg1); Segment testSegment2 = new Segment(113, knoop3, knoop4, puntlijstSeg2); Dictionary <Knoop, List <Segment> > testMap1 = new Dictionary <Knoop, List <Segment> >(); testMap1.Add(knoop1, new List <Segment> { testSegment1 }); testMap1.Add(knoop2, new List <Segment> { testSegment1 }); Dictionary <Knoop, List <Segment> > testMap2 = new Dictionary <Knoop, List <Segment> >(); testMap2.Add(knoop1, new List <Segment> { testSegment2 }); testMap2.Add(knoop2, new List <Segment> { testSegment2 }); Graaf testGraaf1 = new Graaf(250, testMap1); Graaf testGraaf2 = new Graaf(260, testMap2); Gemeente testGemeente = new Gemeente(12, "testGemeente"); Straat testStraat1 = new Straat(10, "TestStraat1", testGraaf1, testGemeente); Straat testStraat2 = new Straat(20, "TestStraat2", testGraaf2, testGemeente); Provincie testProvincie = new Provincie(1, "testProvincie"); testProvincie.VoegGemeenteToe(testGemeente); Belgie belg = new Belgie(new List <Provincie>() { testProvincie }); DataProcessing dp = new DataProcessing(belg); dp.CompletelyFillDataBase(); return(belg); }
private void Read() { GenericParser reader = new GenericParser(Config.Path + "/" + Config.Straatnamen) { ColumnDelimiter = ';', MaxBufferSize = 49600, FirstRowHasHeader = true }; while (reader.Read()) { int id = Convert.ToInt32(reader[0].Trim()); string straatNaam = reader[1].Trim(); if (_idStraatnaam.ContainsKey(id)) { continue; } _idStraatnaam.Add(id, straatNaam); } reader = new GenericParser(Config.Path + "/" + Config.StraatIdGemeenteId) { ColumnDelimiter = ';', MaxBufferSize = 49600, FirstRowHasHeader = true }; int graafIdCounter = 0; while (reader.Read()) { int gemeenteId = Convert.ToInt32(reader[1].Trim()); int straatNaamId = Convert.ToInt32(reader[0].Trim()); Graaf graaf = new Graaf(); graaf.Id = ++graafIdCounter; var map = _wrDataProvider.GetSegmentListByStraatId(straatNaamId); if (map == null) { continue; } graaf.Map = map; string straatnaam = _idStraatnaam.ContainsKey(straatNaamId) ? _idStraatnaam[straatNaamId] : null; if (straatnaam != null) { Straat s = new Straat(straatNaamId, straatnaam, gemeenteId, graaf); if (_gemIdStraten.ContainsKey(gemeenteId)) { _gemIdStraten[gemeenteId].Add(s); } else { _gemIdStraten.Add(gemeenteId, new List <Straat> { s }); } } } }