Пример #1
0
        public static void OCPfromAPI()
        {
            DataContainer.model.infrastructure.operationControlPoints.Clear();
            CoordinateSystemFactory c      = new CoordinateSystemFactory();
            StreamReader            stream = new StreamReader("C:/Users/Edwin/OneDrive/Afstuderen/Irish Grid Conversion/Irish Grid WTK.txt");
            string            wtk          = stream.ReadLine();
            ICoordinateSystem target       = c.CreateFromWkt(wtk);
            //ICoordinateSystem target = c.CreateFromWkt("PROJCS[\"TM65 / Irish Grid\", GEOGCS[\"TM65\", DATUM[\"TM65\", SPHEROID[\"Airy Modified 1849\",6377340.189,299.3249646, AUTHORITY[\"EPSG\",\"7002\"]],AUTHORITY[\"EPSG\",\"6299\"]], PRIMEM[\"Greenwich\",0,  AUTHORITY[\"EPSG\",\"8901\"]], UNIT[\"degree\",0.01745329251994328, AUTHORITY[\"EPSG\",\"9122\"]],  AUTHORITY[\"EPSG\",\"4299\"]], PROJECTION[\"Transverse_Mercator\"], PARAMETER[\"latitude_of_origin\",53.5], PARAMETER[\"central_meridian\",-8], PARAMETER[\"scale_factor\",1.000035],PARAMETER[\"false_easting\",200000], PARAMETER[\"false_northing\",250000], UNIT[\"metre\",1,  AUTHORITY[\"EPSG\",\"9001\"]], AUTHORITY[\"EPSG\",\"29902\"],AXIS[\"Easting\",EAST],AXIS[\"Northing\",NORTH]]");
            //ICoordinateSystem source = c.CreateFromWkt("GEOGCS[\"GCS_WGS_1984\", DATUM[\"D_WGS_1984\",SPHEROID[\"WGS_1984\",6378137,298.257223563]], PRIMEM[\"Greenwich\",0], UNIT[\"Degree\",0.0174532925199433]]");
            ICoordinateSystem source = c.CreateFromWkt(stream.ReadLine());

            CoordinateTransformationFactory trf = new CoordinateTransformationFactory();
            ICoordinateTransformation       tr  = trf.CreateFromCoordinateSystems(source, target);
            //XDocument stationdoc = XDocument.Load("http://api.irishrail.ie/realtime/realtime.asmx/getAllStationsXML");
            XDocument  stationdoc = XDocument.Load("C:/Users/Edwin/OneDrive/Afstuderen/IrishRail Data/getAllStationsXML.xml");
            XNamespace ns         = stationdoc.Root.GetDefaultNamespace();

            foreach (XElement station in stationdoc.Root.Elements(ns + "objStation"))
            {
                eOcp tempocp = new eOcp();
                tempocp.id   = station.Element(ns + "StationId").Value.Trim();
                tempocp.name = station.Element(ns + "StationDesc").Value.Trim();
                tempocp.code = station.Element(ns + "StationCode").Value.Trim();
                tempocp.propOperational.operationalType = "station";
                double[] coord          = new double[] { double.Parse(station.Element(ns + "StationLongitude").Value, CultureInfo.InvariantCulture), double.Parse(station.Element(ns + "StationLatitude").Value, CultureInfo.InvariantCulture) };
                double[] irishgridcoord = tr.MathTransform.Transform(coord);
                tempocp.geoCoord.coord.Add(irishgridcoord[0]); tempocp.geoCoord.coord.Add(irishgridcoord[1]);

                AddOCPToTracks(tempocp);
                Data.DataContainer.model.infrastructure.operationControlPoints.Add(tempocp);
            }
        }
Пример #2
0
 public void OCPproperties(eOcp ocp)
 {
     propertylist.Add(new Property {
         label = "Name", source = ocp, path = "source.name"
     });
     propertylist.Add(new Property {
         label = "ID", source = ocp, path = "source.id"
     });
     propertylist.Add(new Property {
         label = "Description", source = ocp, path = "source.description"
     });
 }
Пример #3
0
        private static void AddOCPToTracks(eOcp ocp)
        {
            double margin   = 100;
            Point  location = new Point(ocp.geoCoord.coord[0], ocp.geoCoord.coord[1]);

            foreach (eTrack track in DataContainer.model.infrastructure.tracks)
            {
                if (track.type == "mainTrack" || track.type == "stationTrack")
                {
                    double       bestdist = 9999999999999;
                    List <Point> nodelist = NodeList(track);
                    Point        a        = new Point();
                    Point        b        = new Point();
                    int          index    = 0;
                    for (int i = 0; i < nodelist.Count - 1; i++)
                    {
                        double dist = GetDistance(nodelist[i], nodelist[i + 1], location);
                        if (dist < bestdist)
                        {
                            bestdist = dist;
                            a        = nodelist[i]; b = nodelist[i + 1];
                            index    = i;
                        }
                    }
                    if (bestdist < margin)
                    {
                        double pos = 0;
                        for (int i = 0; i < index - 1; i++)
                        {
                            pos += GetDistance(nodelist[i], nodelist[i + 1]);
                        }
                        if ((a - b).LengthSquared != 0.0)
                        {
                            var t = (location - a) * (b - a) / (a - b).LengthSquared;
                            pos += t * GetDistance(a, b);
                        }

                        tCrossSection crosssection = new tCrossSection();
                        crosssection.ocpRef = ocp.id;
                        crosssection.name   = ocp.name;
                        Data.DataContainer.IDGenerator(crosssection);
                        crosssection.pos = track.trackTopology.trackBegin.pos + (decimal)(pos * 0.000621371);
                        track.trackTopology.crossSections.Add(crosssection);
                    }
                }
            }
        }
Пример #4
0
        public void TestButton_Click(object sender, EventArgs e)
        {
            DataContainer.model = new railml();
            eTrack track1 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}};
            DataContainer.IDGenerator(track1);
            track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0);
            track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0);
            eSwitch sw1 = new eSwitch() { id = "sw1" };
            sw1.geoCoord.coord.AddRange(new double[] { 300, 0 });
            track1.trackTopology.connections.Add(sw1);

            DataContainer.model.infrastructure.tracks.Add(track1);

            eTrack track2 = new eTrack{trackTopology = new eTrackTopology{trackBegin=new eTrackBegin{pos=0, geoCoord=new tGeoCoord()}, trackEnd = new eTrackEnd{pos=600, geoCoord=new tGeoCoord()}}};
            DataContainer.IDGenerator(track2);
            track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20);
            track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20);

            DataContainer.model.infrastructure.tracks.Add(track2);

            Data.Editor.AddCrossing(track1, track2, 70, 300, 350);

            eOcp ocp1 = new eOcp { id = "34", name= "test1", geoCoord = new tGeoCoord() };
            ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp1);

            eOcp ocp2 = new eOcp { id = "443", name = "test2", geoCoord = new tGeoCoord() };
            ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp2);

            eOcp ocp3 = new eOcp { id = "344", name = "test3", geoCoord = new tGeoCoord() };
            ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp3);

            eOcp ocp4 = new eOcp { id = "343", name = "test3", geoCoord = new tGeoCoord() };
            ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp4);

            DataContainer.PrepareData();

            dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack));

            this.MainViewContentControl.Content = new BaseRailMLView();
        }
Пример #5
0
        public static void OCPfromExcel()
        {
            FileStream stream;

Loop:
            try { stream = File.Open("C:/Users/Edwin/OneDrive/Afstuderen/IrishRail Data/ReferenceData.xlsx", FileMode.Open, FileAccess.Read); }
            catch
            {
                MessageBoxResult result = MessageBox.Show("Error. Please close the excel document. Retry?", "Error", MessageBoxButton.OKCancel);
                if (result == MessageBoxResult.OK)
                {
                    goto Loop;
                }
                else
                {
                    return;
                }
            }
            CoordinateSystemFactory c           = new CoordinateSystemFactory();
            StreamReader            coordstream = new StreamReader("C:/Users/Edwin/OneDrive/Afstuderen/Irish Grid Conversion/Irish Grid WTK.txt");
            string            wtk    = coordstream.ReadLine();
            ICoordinateSystem target = c.CreateFromWkt(wtk);

            IExcelDataReader excelreader = ExcelReaderFactory.CreateOpenXmlReader(stream);

            excelreader.IsFirstRowAsColumnNames = true;
            ICoordinateSystem source = c.CreateFromWkt(coordstream.ReadLine());

            CoordinateTransformationFactory trf = new CoordinateTransformationFactory();
            ICoordinateTransformation       tr  = trf.CreateFromCoordinateSystems(source, target);


            _dataset   = excelreader.AsDataSet();
            _maintable = _dataset.Tables["tbl_rtStations"];

            foreach (DataRow row in _maintable.Rows)
            {
                eOcp ocp = new eOcp();
                ocp.id   = (row["StationID"] as string ?? string.Empty).Trim();
                ocp.name = (row["Station_Desc"] as string ?? string.Empty).Trim();
                ocp.code = (row["SEMA_Name"] as string ?? string.Empty).Trim();
                if (DataContainer.model.infrastructure.operationControlPoints.Any(x => x.name == ocp.name))
                {
                    continue;
                }
                if (row["Latitude"] != DBNull.Value && row["Longitude"] != DBNull.Value)
                {
                    double[] coord          = new double[] { (row["Longitude"] as double?) ?? 0, (row["Latitude"] as double?) ?? 0 };
                    double[] irishgridcoord = tr.MathTransform.Transform(coord);
                    ocp.geoCoord.coord.Add(irishgridcoord[0]);
                    ocp.geoCoord.coord.Add(irishgridcoord[1]);
                    AddOCPToTracks(ocp);
                }
                if (((row["suburban"] as int?) ?? 0) != 0 && ((row["mainline_station"] as int?) ?? 0) != 0 && ((row["DART_STATION"] as int?) ?? 0) != 0)
                {
                    ocp.propOperational.operationalType = "station";
                }

                DataContainer.model.infrastructure.operationControlPoints.Add(ocp);
            }
        }
Пример #6
0
 public Route GetRoute(eOcp origin, eOcp destination)
 {
     return(GetRoute(origin.id, destination.id));
 }
Пример #7
0
        public void TestButton_Click(object sender, EventArgs e)
        {
            DataContainer.model = new railml();
            eTrack track1 = new eTrack {
                trackTopology = new eTrackTopology {
                    trackBegin = new eTrackBegin {
                        pos = 0, geoCoord = new tGeoCoord()
                    }, trackEnd = new eTrackEnd {
                        pos = 600, geoCoord = new tGeoCoord()
                    }
                }
            };

            DataContainer.IDGenerator(track1);
            track1.trackTopology.trackBegin.geoCoord.coord.Add(0); track1.trackTopology.trackBegin.geoCoord.coord.Add(0);
            track1.trackTopology.trackEnd.geoCoord.coord.Add(600); track1.trackTopology.trackEnd.geoCoord.coord.Add(0);
            eSwitch sw1 = new eSwitch()
            {
                id = "sw1"
            };

            sw1.geoCoord.coord.AddRange(new double[] { 300, 0 });
            track1.trackTopology.connections.Add(sw1);

            DataContainer.model.infrastructure.tracks.Add(track1);

            eTrack track2 = new eTrack {
                trackTopology = new eTrackTopology {
                    trackBegin = new eTrackBegin {
                        pos = 0, geoCoord = new tGeoCoord()
                    }, trackEnd = new eTrackEnd {
                        pos = 600, geoCoord = new tGeoCoord()
                    }
                }
            };

            DataContainer.IDGenerator(track2);
            track2.trackTopology.trackBegin.geoCoord.coord.Add(6000); track2.trackTopology.trackBegin.geoCoord.coord.Add(20);
            track2.trackTopology.trackEnd.geoCoord.coord.Add(8000); track2.trackTopology.trackEnd.geoCoord.coord.Add(20);


            DataContainer.model.infrastructure.tracks.Add(track2);

            Data.Editor.AddCrossing(track1, track2, 70, 300, 350);

            eOcp ocp1 = new eOcp {
                id = "34", name = "test1", geoCoord = new tGeoCoord()
            };

            ocp1.geoCoord.coord.Add(0); ocp1.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp1);

            eOcp ocp2 = new eOcp {
                id = "443", name = "test2", geoCoord = new tGeoCoord()
            };

            ocp2.geoCoord.coord.Add(600); ocp2.geoCoord.coord.Add(0);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp2);

            eOcp ocp3 = new eOcp {
                id = "344", name = "test3", geoCoord = new tGeoCoord()
            };

            ocp3.geoCoord.coord.Add(600); ocp3.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp3);

            eOcp ocp4 = new eOcp {
                id = "343", name = "test3", geoCoord = new tGeoCoord()
            };

            ocp4.geoCoord.coord.Add(0); ocp4.geoCoord.coord.Add(20);
            DataContainer.model.infrastructure.operationControlPoints.Add(ocp4);

            DataContainer.PrepareData();

            dynamic result = DataContainer.model.infrastructure.tracks[2].trackTopology.trackBegin.FindParent(typeof(eTrack));

            this.MainViewContentControl.Content = new BaseRailMLView();
        }
 public void OCPproperties(eOcp ocp)
 {
     propertylist.Add(new Property { label = "Name", source = ocp, path = "source.name" });
     propertylist.Add(new Property { label = "ID", source = ocp, path = "source.id" });
     propertylist.Add(new Property { label = "Description", source = ocp, path = "source.description" });
 }