コード例 #1
0
        public void DeletePerimeterPoints(List <int> perimeterPointIDsToDelete)
        {
            //Validate Input
            foreach (int perimeterPointID in perimeterPointIDsToDelete)
            {
                if (perimeterPointID.IsInvalidKey())
                {
                    BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID");
                }
            }

            List <PerimeterPoint> perimeterPointsToBeDeleted = new List <PerimeterPoint>();

            foreach (int perimeterPointID in perimeterPointIDsToDelete)
            {
                PerimeterPoint perimeterPoint = new PerimeterPoint {
                    PerimeterPointID = perimeterPointID
                };
                _DatabaseContext.PerimeterPoints.Attach(perimeterPoint);
                _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPoint);
                perimeterPointsToBeDeleted.Add(perimeterPoint);
                OnPerimeterPointDeleting(perimeterPoint);
            }

            int numberOfAffectedRows = _DatabaseContext.SaveChanges();

            if (numberOfAffectedRows != perimeterPointIDsToDelete.Count)
            {
                throw new DataNotUpdatedException("One or more perimeterPoint records have not been deleted.");
            }
            foreach (PerimeterPoint perimeterPointToBeDeleted in perimeterPointsToBeDeleted)
            {
                OnPerimeterPointDeleted(perimeterPointToBeDeleted);
            }
        }
コード例 #2
0
        public void DeletePerimeterPoint(PerimeterPoint perimeterPointToBeDeleted)
        {
            //Validate Input
            if (perimeterPointToBeDeleted == null)
            {
                throw (new ArgumentNullException("perimeterPointToBeDeleted"));
            }

            // Validate Primary key value
            if (perimeterPointToBeDeleted.PerimeterPointID.IsInvalidKey())
            {
                BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID");
            }

            OnPerimeterPointSaving(perimeterPointToBeDeleted);
            OnPerimeterPointDeleting(perimeterPointToBeDeleted);

            if (perimeterPointToBeDeleted.EntityState == EntityState.Detached)
            {
                _DatabaseContext.PerimeterPoints.Attach(perimeterPointToBeDeleted);
            }
            _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPointToBeDeleted);
            int numberOfAffectedRows = _DatabaseContext.SaveChanges();

            if (numberOfAffectedRows == 0)
            {
                throw new DataNotUpdatedException("No PerimeterPoint deleted!");
            }

            OnPerimeterPointDeleted(perimeterPointToBeDeleted);
            OnPerimeterPointSaved(perimeterPointToBeDeleted);
        }
コード例 #3
0
        public void UpdatePerimeterPoint(PerimeterPoint updatedPerimeterPoint)
        {
            // Validate Parameters
            if (updatedPerimeterPoint == null)
            {
                throw (new ArgumentNullException("updatedPerimeterPoint"));
            }

            // Validate Primary key value
            if (updatedPerimeterPoint.PerimeterPointID.IsInvalidKey())
            {
                BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID");
            }

            // Apply business rules
            OnPerimeterPointSaving(updatedPerimeterPoint);
            OnPerimeterPointUpdating(updatedPerimeterPoint);

            //attaching and making ready for parsistance
            if (updatedPerimeterPoint.EntityState == EntityState.Detached)
            {
                _DatabaseContext.PerimeterPoints.Attach(updatedPerimeterPoint);
            }
            _DatabaseContext.ObjectStateManager.ChangeObjectState(updatedPerimeterPoint, System.Data.EntityState.Modified);            //this line makes the code un-testable!
            int numberOfAffectedRows = _DatabaseContext.SaveChanges();

            if (numberOfAffectedRows == 0)
            {
                throw new DataNotUpdatedException("No perimeterPoint updated!");
            }

            //Apply business workflow
            OnPerimeterPointUpdated(updatedPerimeterPoint);
            OnPerimeterPointSaved(updatedPerimeterPoint);
        }
コード例 #4
0
        public virtual int CreateNewPerimeterPoint(PerimeterPoint newPerimeterPoint)
        {
            // Validate Parameters
            if (newPerimeterPoint == null)
            {
                throw (new ArgumentNullException("newPerimeterPoint"));
            }

            // Apply business rules
            OnPerimeterPointSaving(newPerimeterPoint);
            OnPerimeterPointCreating(newPerimeterPoint);

            _DatabaseContext.PerimeterPoints.AddObject(newPerimeterPoint);
            int numberOfAffectedRows = _DatabaseContext.SaveChanges();

            if (numberOfAffectedRows == 0)
            {
                throw new DataNotUpdatedException("No perimeterPoint created!");
            }

            // Apply business workflow
            OnPerimeterPointCreated(newPerimeterPoint);
            OnPerimeterPointSaved(newPerimeterPoint);

            return(newPerimeterPoint.PerimeterPointID);
        }
コード例 #5
0
 /// <summary>
 /// Deprecated Method for adding a new object to the PerimeterPoints EntitySet. Consider using the .Add method of the associated ObjectSet&lt;T&gt; property instead.
 /// </summary>
 public void AddToPerimeterPoints(PerimeterPoint perimeterPoint)
 {
     base.AddObject("PerimeterPoints", perimeterPoint);
 }
コード例 #6
0
        // Creates Rndf from an input FileStream
        public IRndf createRndf(FileStream fileStream)
        {
            numWps = 0;

            // File in Read Only mode, convert to stream
            StreamReader r = new StreamReader(fileStream, Encoding.UTF8);

            // Create new queue for input buffer
            Queue q = new Queue();
            string word = "";

            // Create the Rndf (with only segments for now, no zones)
            IRndf rndf = new IRndf();
            rndf.Segments = new List<SimpleSegment>();
            rndf.Zones = new List<SimpleZone>();

            // Loop until reach end of file marker
            while ((word.Length < 8) || (word.Substring(0, 8) != "end_file"))
            {
                // get the next word
                word = parseWord(r, q);

                if (word == "RNDF_name")
                {
                    word = parseWord(r, q);
                    rndf.Name = word;
                }
                else if (word == "num_segments")
                {
                    word = parseWord(r, q);
                    rndf.NumSegs = int.Parse(word);
                }
                else if (word == "num_zones")
                {
                    word = parseWord(r, q);
                    rndf.NumZones = int.Parse(word);
                }
                else if (word == "format_version")
                {
                    word = parseWord(r, q);
                    rndf.FormatVersion = word;
                }
                else if (word == "creation_date")
                {
                    word = parseWord(r, q);
                    rndf.CreationDate = word;
                }
                else if (word == "segment")
                {
                    // create new segment
                    SimpleSegment seg = new SimpleSegment();
                    seg.Lanes = new List<SimpleLane>();

                    word = parseWord(r, q);
                    seg.Id = word;

                    // run until reach end of segment marker
                    while (word != "end_segment")
                    {
                        // get next word
                        word = parseWord(r, q);

                        if (word == "segment_name")
                        {
                            word = parseWord(r, q);
                            seg.Name = word;
                        }
                        else if (word == "num_lanes")
                        {
                            word = parseWord(r, q);
                            seg.NumLanes = int.Parse(word);
                        }
                        else if (word == "end_segment")
                        {
                            // do nothing if at the end
                        }
                        else if (word == "lane")
                        {
                            // Create new lane
                            SimpleLane ln = new SimpleLane();
                            ln.Checkpoints = new List<SimpleCheckpoint>();
                            ln.Waypoints = new List<SimpleWaypoint>();
                            ln.Stops = new List<string>();
                            ln.ExitEntries = new List<SimpleExitEntry>();

                            word = parseWord(r, q);
                            ln.Id = word;

                            // run until reach end of lane
                            while (word != "end_lane")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "num_waypoints")
                                {
                                    word = parseWord(r, q);
                                    ln.NumWaypoints = int.Parse(word);
                                }
                                else if (word == "checkpoint")
                                {
                                    // create checkpoint
                                    SimpleCheckpoint cp = new SimpleCheckpoint();

                                    // get waypoint id
                                    string wp = parseWord(r, q);
                                    cp.WaypointId = wp;

                                    // get checkpoint id
                                    string id = parseWord(r, q);
                                    cp.CheckpointId = id;

                                    // add to collection of checkpoints within lane
                                    ln.Checkpoints.Add(cp);
                                }
                                else if (word == "lane_width")
                                {
                                    word = parseWord(r, q);
                                    ln.LaneWidth = double.Parse(word);
                                }
                                else if (word == "stop")
                                {
                                    word = parseWord(r, q);
                                    ln.Stops.Add(word);
                                }
                                else if (word == "left_boundary")
                                {
                                    word = parseWord(r, q);
                                    ln.LeftBound = word;
                                }
                                else if (word == "right_boundary")
                                {
                                    word = parseWord(r, q);
                                    ln.RightBound = word;
                                }
                                else if (word == "exit")
                                {
                                    // create exit-entry pair
                                    SimpleExitEntry exitEntry = new SimpleExitEntry();

                                    // get the exit id
                                    string exit = parseWord(r, q);
                                    exitEntry.ExitId = exit;

                                    // get the entry id
                                    string entry = parseWord(r, q);
                                    exitEntry.EntryId = entry;

                                    // add to collection of exit-entry pairs within lane
                                    ln.ExitEntries.Add(exitEntry);
                                }
                                else if (word == "end_lane")
                                {
                                    // do nothing
                                }
                                // Otherwise we probably have a waypoint
                                else
                                {
                                    // check to make sure a wp by matching lane id to lane identifier of waypoint
                                    int laneIdLength = ln.Id.Length;

                                    // if waypoint matches then create the waypoint
                                    if (word.Length >= laneIdLength + 2 && (word.Substring(0, laneIdLength)).CompareTo(ln.Id) == 0)
                                    {
                                        // create a new waypoint
                                        SimpleWaypoint wp = new SimpleWaypoint();
                                        wp.Position = new UrbanChallenge.Common.Coordinates();

                                        // set its id
                                        wp.ID = word;

                                        // get latitude or X
                                        string lat = parseWord(r, q);
                                        wp.Position.X = double.Parse(lat);

                                        // get longitude or y
                                        string lon = parseWord(r, q);
                                        wp.Position.Y = double.Parse(lon);

                                        // add to lane's collection of waypoints
                                        ln.Waypoints.Add(wp);

                                        numWps += 1;
                                    }
                                    else
                                    {
                                        Console.WriteLine("Unknown identifier: " + word);
                                    }
                                }
                            }
                            seg.Lanes.Add(ln);
                        }
                        else
                        {
                            Console.WriteLine("Unknown identifier: " + word);
                        }
                    }
                    rndf.Segments.Add(seg);
                }
                else if (word == "zone")
                {
                    // create new zone
                    SimpleZone zone = new SimpleZone();
                    zone.ParkingSpots = new List<ParkingSpot>();

                    // get ID
                    word = parseWord(r, q);
                    zone.ZoneID = word;

                    // run until reach end of segment marker
                    while (word != "end_zone")
                    {
                        // get next word
                        word = parseWord(r, q);

                        if (word == "num_spots")
                        {
                            // get next word
                            word = parseWord(r, q);

                            // set num of parking spots
                            zone.NumParkingSpots = int.Parse(word);
                        }
                        else if (word == "zone_name")
                        {
                            // get next word
                            word = parseWord(r, q);

                            // set zone name
                            zone.Name = word;
                        }
                        else if (word == "perimeter")
                        {
                            // create perimeter
                            zone.Perimeter = new ZonePerimeter();
                            zone.Perimeter.ExitEntries = new List<SimpleExitEntry>();
                            zone.Perimeter.PerimeterPoints = new List<PerimeterPoint>();

                            // set perimeter id
                            zone.Perimeter.PerimeterID = parseWord(r, q);

                            while (word != "end_perimeter")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "num_perimeterpoints")
                                {
                                    // set num of perimeter points
                                    zone.Perimeter.NumPerimeterPoints = int.Parse(parseWord(r, q));
                                }
                                else if (word == "exit")
                                {
                                    // create new exit,entry
                                    SimpleExitEntry ee = new SimpleExitEntry();

                                    // set exit
                                    ee.ExitId = parseWord(r, q);

                                    // set entry
                                    ee.EntryId = parseWord(r, q);

                                    // add to perimeter exit entries
                                    zone.Perimeter.ExitEntries.Add(ee);
                                }
                                else if (word == "end_perimeter")
                                {
                                    // Do Nothing
                                }
                                else
                                {
                                    // create new perimeter point
                                    PerimeterPoint p = new PerimeterPoint();

                                    // set id
                                    p.ID = word;

                                    // create new coordinate
                                    p.position = new UrbanChallenge.Common.Coordinates();

                                    // setX
                                    p.position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    p.position.Y = Double.Parse(parseWord(r, q));

                                    // add to perimeter points
                                    zone.Perimeter.PerimeterPoints.Add(p);
                                }
                            }
                        }
                        else if (word == "spot")
                        {
                            // create a new spot
                            ParkingSpot ps = new ParkingSpot();

                            // set spot id
                            ps.SpotID = parseWord(r, q);

                            while (word != "end_spot")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "spot_width")
                                {
                                    // set spot width
                                    ps.SpotWidth = parseWord(r, q);
                                }
                                else if (word == "checkpoint")
                                {
                                    // get waypoint id that corresponds with checkpoint
                                    ps.CheckpointWaypointID = parseWord(r, q);

                                    // get checkpoint id
                                    ps.CheckpointID = parseWord(r, q);
                                }
                                else if (word == "end_spot")
                                {
                                    // add spot to zone
                                    zone.ParkingSpots.Add(ps);
                                }
                                else
                                {
                                    // SimpleWaypoint 1
                                    #region

                                    // create new waypoint for waypoint1
                                    ps.Waypoint1 = new SimpleWaypoint();
                                    ps.Waypoint1.Position = new UrbanChallenge.Common.Coordinates();

                                    // set id
                                    ps.Waypoint1.ID = word;

                                    // check if id is checkpointWaypointID
                                    if (ps.Waypoint1.ID == ps.CheckpointWaypointID)
                                    {
                                        ps.Waypoint1.IsCheckpoint = true;
                                        ps.Waypoint1.CheckpointID = ps.CheckpointID;
                                    }

                                    // setX
                                    ps.Waypoint1.Position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    ps.Waypoint1.Position.Y = Double.Parse(parseWord(r, q));

                                    #endregion

                                    // SimpleWaypoint 2
                                    #region

                                    // create new waypoint for waypoint2
                                    ps.Waypoint2 = new SimpleWaypoint();
                                    ps.Waypoint2.Position = new UrbanChallenge.Common.Coordinates();

                                    // set id
                                    ps.Waypoint2.ID = parseWord(r, q);

                                    // check if id is checkpointWaypointID
                                    if (ps.Waypoint2.ID == ps.CheckpointWaypointID)
                                    {
                                        ps.Waypoint2.IsCheckpoint = true;
                                        ps.Waypoint2.CheckpointID = ps.CheckpointID;
                                    }

                                    // setX
                                    ps.Waypoint2.Position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    ps.Waypoint2.Position.Y = Double.Parse(parseWord(r, q));

                                    #endregion
                                }
                            }
                        }
                        else if (word == "end_zone")
                        {
                            // Do Nothing
                        }
                        else
                        {
                            Console.WriteLine("Unrecognized: " + word);
                        }
                    }

                    // Add zones to zone
                    rndf.Zones.Add(zone);
                }
                else
                {
                    if (word == "end_file")
                        Console.WriteLine("Rndf Parse :: Successful");
                    else
                        Console.WriteLine("Unknown identifier: " + word);
                }
            }
            return rndf;
        }
コード例 #7
0
    public static Int32 AddEditPerimeter(string projectID, string perimeterID, string perimeterName, string isMainPerimeter, string colorID, string perimeterPoints, string userID)
    {
        int       perimeterIDINT;
        int       projectIDINT;
        int       colorIDINT;
        Perimeter perimeter;

        using (DatabaseContext _DatabaseContext = new DatabaseContext())
        {
            if (int.TryParse(perimeterID, out perimeterIDINT) && perimeterIDINT == 0)
            {
                perimeter = new Perimeter();

                // Foreign Key Project
                projectIDINT = Convert.ToInt32(projectID);
                Project project = _DatabaseContext.Projects.First(instance => instance.ProjectID == projectIDINT);
                perimeter.ProjectID = project.ProjectID;
                perimeter.ProjectReference.EntityKey = project.EntityKey;
                //

                // Foreign Key Color
                colorIDINT = Convert.ToInt32(colorID);
                Color color = _DatabaseContext.Colors.First(instance => instance.ColorID == colorIDINT);
                perimeter.ColorID = color.ColorID;
                perimeter.ColorReference.EntityKey = color.EntityKey;
                //

                perimeter.PerimeterName   = perimeterName;
                perimeter.IsMainPerimeter = Convert.ToBoolean(isMainPerimeter);

                Dictionary <string, object> perimeterPointsList = (Dictionary <string, object>)(new JavaScriptSerializer().Deserialize <Object>(perimeterPoints));
                if (perimeterPointsList.Count > 0)
                {
                    object[] perimeterPointsObject = (object[])perimeterPointsList["perimeterPoints"];
                    foreach (Dictionary <string, object> perimeterPointObject in perimeterPointsObject)
                    {
                        PerimeterPoint perimeterPoint = new PerimeterPoint();

                        if (perimeterPointObject.Count == 2)
                        {
                            decimal obj0;
                            decimal obj1;

                            if (decimal.TryParse(perimeterPointObject.ToList()[0].Value.ToString(), out obj0))
                            {
                                if (obj0 > 0) // is Y
                                {
                                    perimeterPoint.Y = Convert.ToDecimal(obj0);
                                }
                                else if (obj0 < 0)
                                {
                                    perimeterPoint.X = Convert.ToDecimal(obj0);
                                }
                            }

                            if (decimal.TryParse(perimeterPointObject.ToList()[1].Value.ToString(), out obj1))
                            {
                                if (obj1 > 0) // is X
                                {
                                    perimeterPoint.Y = Convert.ToDecimal(obj1);
                                }
                                else if (obj1 < 0)
                                {
                                    perimeterPoint.X = Convert.ToDecimal(obj1);
                                }
                            }

                            perimeterPoint.PerimeterID = perimeter.PerimeterID;
                            perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey;

                            perimeter.PerimeterPoints.Add(perimeterPoint);
                            // _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint);
                        }
                    }
                }
                perimeter.CreatedDate   = DateTime.Now;
                perimeter.CreatorUserID = new Guid(userID);
                perimeter.EditedDate    = DateTime.Now;
                perimeter.EditorUserID  = new Guid(userID);

                _DatabaseContext.Perimeters.AddObject(perimeter);
            }
            else
            {
                perimeter = _DatabaseContext.Perimeters.First(instance => instance.PerimeterID == perimeterIDINT);

                // Foreign Key Color
                colorIDINT = Convert.ToInt32(colorID);
                Color color = _DatabaseContext.Colors.First(instance => instance.ColorID == colorIDINT);
                perimeter.ColorID = color.ColorID;
                perimeter.ColorReference.EntityKey = color.EntityKey;
                //

                perimeter.PerimeterName   = perimeterName;
                perimeter.IsMainPerimeter = Convert.ToBoolean(isMainPerimeter);

                Dictionary <string, object> perimeterPointsList = (Dictionary <string, object>)(new JavaScriptSerializer().Deserialize <Object>(perimeterPoints));
                if (perimeterPointsList.Count > 0)
                {
                    List <PerimeterPoint> oldPerimeterPoints = _DatabaseContext.PerimeterPoints.Where(instance => instance.PerimeterID == perimeterIDINT).ToList();

                    foreach (PerimeterPoint perimeterPoint in oldPerimeterPoints)
                    {
                        _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPoint);
                    }

                    object[] perimeterPointsObject = (object[])perimeterPointsList["perimeterPoints"];
                    foreach (Dictionary <string, object> perimeterPointObject in perimeterPointsObject)
                    {
                        PerimeterPoint perimeterPoint = new PerimeterPoint();

                        if (perimeterPointObject.Count == 2)
                        {
                            decimal obj0;
                            decimal obj1;

                            if (decimal.TryParse(perimeterPointObject.ToList()[0].Value.ToString(), out obj0))
                            {
                                if (obj0 > 0) // is Y
                                {
                                    perimeterPoint.Y = Convert.ToDecimal(obj0);
                                }
                                else if (obj0 < 0)
                                {
                                    perimeterPoint.X = Convert.ToDecimal(obj0);
                                }
                            }

                            if (decimal.TryParse(perimeterPointObject.ToList()[1].Value.ToString(), out obj1))
                            {
                                if (obj1 > 0) // is X
                                {
                                    perimeterPoint.Y = Convert.ToDecimal(obj1);
                                }
                                else if (obj1 < 0)
                                {
                                    perimeterPoint.X = Convert.ToDecimal(obj1);
                                }
                            }

                            perimeterPoint.PerimeterID = perimeter.PerimeterID;
                            perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey;

                            perimeter.PerimeterPoints.Add(perimeterPoint);
                            // _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint);
                        }

                        //PerimeterPoint perimeterPoint = new PerimeterPoint();
                        //perimeterPoint.Y = Convert.ToDecimal(perimeterPointObject["Ya"]);
                        //perimeterPoint.X = Convert.ToDecimal(perimeterPointObject["Za"]);

                        //perimeterPoint.PerimeterID = perimeter.PerimeterID;
                        //perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey;

                        //perimeter.PerimeterPoints.Add(perimeterPoint);
                        //// _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint);
                    }
                }
                perimeter.EditedDate   = DateTime.Now;
                perimeter.EditorUserID = new Guid(userID);
            }

            _DatabaseContext.SaveChanges();

            return(_DatabaseContext.Perimeters.ToArray()[_DatabaseContext.Perimeters.Count() - 1].PerimeterID);
        }
    }
コード例 #8
0
    public static object SetPerimeterFromSIP(string projectID, string JStr, string userID)
    {
        Project project = new ProjectBLL().GetProjectByProjectId2(Convert.ToInt32(projectID));

        using (DatabaseContext _DatabaseContext = new DatabaseContext())
        {
            var nList = new JavaScriptSerializer().Deserialize <Object>(JStr);

            ProjectInfoTreeLocation projectInfoTreeLocation = project.ProjectInfoTreeLocations.Count == 0 ? new ProjectInfoTreeLocation() : _DatabaseContext.ProjectInfoTreeLocations.First(instance => instance.ProjectID == project.ProjectID);
            projectInfoTreeLocation.X = ((Dictionary <string, object>)nList).ContainsKey("X") ? Convert.ToDecimal(((Dictionary <string, object>)nList)["X"]) : projectInfoTreeLocation.X;
            projectInfoTreeLocation.Y = ((Dictionary <string, object>)nList).ContainsKey("Y") ? Convert.ToDecimal(((Dictionary <string, object>)nList)["Y"]) : projectInfoTreeLocation.Y;

            string url =
                "http://www.gis.sip.pr.gov/ArcGIS/rest/services/Tools/Localizdor_JS8/MapServer/identify?f=json&geometry=%7B%22" +
                "x%22%3A" + miX + "%2C%22" +
                "y%22%3A" + miY + "%2C%22" +
                "spatialReference%22%3A%7B%22wkid%22%3A32161%7D%7D&tolerance=1&returnGeometry=true&mapExtent=%7B%22" +
                "xmin%22%3A" + miX + "%2C%22" +
                "ymin%22%3A" + miY + "%2C%22" +
                "xmax%22%3A" + miX + "%2C%22" +
                "ymax%22%3A" + miY + "%2C%22" +
                "spatialReference%22%3A%7B%22wkid%22%3A32161%7D%7D&imageDisplay=1920%2C304%2C96&geometryType=esriGeometryPoint&sr=32161&layers=all%3A0&callback=dojo.io.script.jsonp_dojoIoScript6._jsonpCallback";

            var json = new WebClient().DownloadString(url);

            var points = new JavaScriptSerializer().Deserialize <Object>(json.Replace("dojo.io.script.jsonp_dojoIoScript6._jsonpCallback(", "").Replace(");", ""));

            JObject j      = JObject.FromObject(points);
            JArray  jArray = GetRings(j);

            Perimeter mainPerimeter = _DatabaseContext.Perimeters.FirstOrDefault(instance => instance.IsMainPerimeter);
            if (mainPerimeter != null)
            {
                mainPerimeter.IsMainPerimeter = false;
                mainPerimeter.PerimeterName   = "Perímetro";

                // Foreign Key Color
                Color blue = _DatabaseContext.Colors.First(instance => instance.ColorID == 1);
                mainPerimeter.ColorID = blue.ColorID;
                mainPerimeter.ColorReference.EntityKey = blue.EntityKey;
                //
            }

            Perimeter newPerimeter = new Perimeter();

            List <PerimeterPoint> perimeterPoints        = new List <PerimeterPoint>();
            List <object>         perimeterPointsObjects = new List <object>();

            // Initialize a context
            using (JavascriptContext context = new JavascriptContext())
            {
                System.Collections.Generic.Dictionary <string, object> anewpointObj = new Dictionary <string, object>();
                using (var streamReader = new StreamReader(new Page().Server.MapPath(@"~/App_Resources\client-scripts\tl\proj4js-compressed.js")))
                {
                    context.Run(streamReader.ReadToEnd() + ScriptFileSeparator);
                }

                foreach (JToken JToken1 in jArray)
                {
                    foreach (JToken JToken2 in JToken1)
                    {
                        // Script
                        string script = @"
                                            function ConvertToLatLng(x, y) {
                                                Proj4js.defs[""EPSG:32161""] = ""+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"";
                                                Proj4js.defs[""EPSG:4326""] = ""+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"";
                                                var source = new Proj4js.Proj('EPSG:32161');
                                                var dest = new Proj4js.Proj('EPSG:4326');
                                                var anewpoint = new Proj4js.Point(x, y);
                                                Proj4js.transform(source, dest, anewpoint);
                                                return anewpoint;
                                            }

                                           var anewpoint = ConvertToLatLng(parseFloat('" + ((JValue)(JToken2[0])).Value.ToString() + "'),parseFloat('" + ((JValue)(JToken2[1])).Value.ToString() + "')); ";

                        // Running the script
                        context.Run(script);

                        // Getting a parameter
                        anewpointObj = (System.Collections.Generic.Dictionary <string, object>)context.GetParameter("anewpoint");

                        PerimeterPoint perimeterPoint = new PerimeterPoint();

                        perimeterPoint.Y = Convert.ToDecimal(anewpointObj["y"]);
                        perimeterPoint.X = Convert.ToDecimal(anewpointObj["x"]);

                        perimeterPoint.PerimeterID = newPerimeter.PerimeterID;
                        perimeterPoint.PerimeterReference.EntityKey = newPerimeter.EntityKey;

                        newPerimeter.PerimeterPoints.Add(perimeterPoint);

                        var perimeterPointObject = new
                        {
                            perimeterPoint.PerimeterID,
                            perimeterPoint.PerimeterPointID,
                            perimeterPoint.X,
                            perimeterPoint.Y
                        };
                        perimeterPointsObjects.Add(perimeterPointObject);
                    }
                }
            }

            newPerimeter.IsMainPerimeter = true;
            newPerimeter.PerimeterName   = "Perímetro Principal";

            newPerimeter.CreatedDate   = DateTime.Now;
            newPerimeter.CreatorUserID = new Guid(userID);
            newPerimeter.EditedDate    = DateTime.Now;
            newPerimeter.EditorUserID  = new Guid(userID);


            // Foreign Key Project
            newPerimeter.ProjectID = project.ProjectID;
            newPerimeter.ProjectReference.EntityKey = project.EntityKey;
            //

            // Foreign Key Color
            Color red = _DatabaseContext.Colors.First(instance => instance.ColorID == 2);
            newPerimeter.ColorID = red.ColorID;
            newPerimeter.ColorReference.EntityKey = red.EntityKey;
            //

            _DatabaseContext.Perimeters.AddObject(newPerimeter);

            _DatabaseContext.SaveChanges();

            var perimeterObject = new
            {
                newPerimeter.ColorID,
                newPerimeter.Color.Code,
                newPerimeter.Color.ColorDesc,
                newPerimeter.IsMainPerimeter,
                newPerimeter.PerimeterID,
                newPerimeter.PerimeterName,
                PerimeterPoints = perimeterPointsObjects,
                newPerimeter.ProjectID
            };

            return(perimeterObject);
        }
    }
コード例 #9
0
        // Creates Rndf from an input FileStream
        public IRndf createRndf(FileStream fileStream)
        {
            numWps = 0;

            // File in Read Only mode, convert to stream
            StreamReader r = new StreamReader(fileStream, Encoding.UTF8);

            // Create new queue for input buffer
            Queue  q    = new Queue();
            string word = "";

            // Create the Rndf (with only segments for now, no zones)
            IRndf rndf = new IRndf();

            rndf.Segments = new List <SimpleSegment>();
            rndf.Zones    = new List <SimpleZone>();

            // Loop until reach end of file marker
            while ((word.Length < 8) || (word.Substring(0, 8) != "end_file"))
            {
                // get the next word
                word = parseWord(r, q);

                if (word == "RNDF_name")
                {
                    word      = parseWord(r, q);
                    rndf.Name = word;
                }
                else if (word == "num_segments")
                {
                    word         = parseWord(r, q);
                    rndf.NumSegs = int.Parse(word);
                }
                else if (word == "num_zones")
                {
                    word          = parseWord(r, q);
                    rndf.NumZones = int.Parse(word);
                }
                else if (word == "format_version")
                {
                    word = parseWord(r, q);
                    rndf.FormatVersion = word;
                }
                else if (word == "creation_date")
                {
                    word = parseWord(r, q);
                    rndf.CreationDate = word;
                }
                else if (word == "segment")
                {
                    // create new segment
                    SimpleSegment seg = new SimpleSegment();
                    seg.Lanes = new List <SimpleLane>();

                    word   = parseWord(r, q);
                    seg.Id = word;

                    // run until reach end of segment marker
                    while (word != "end_segment")
                    {
                        // get next word
                        word = parseWord(r, q);

                        if (word == "segment_name")
                        {
                            word     = parseWord(r, q);
                            seg.Name = word;
                        }
                        else if (word == "num_lanes")
                        {
                            word         = parseWord(r, q);
                            seg.NumLanes = int.Parse(word);
                        }
                        else if (word == "end_segment")
                        {
                            // do nothing if at the end
                        }
                        else if (word == "lane")
                        {
                            // Create new lane
                            SimpleLane ln = new SimpleLane();
                            ln.Checkpoints = new List <SimpleCheckpoint>();
                            ln.Waypoints   = new List <SimpleWaypoint>();
                            ln.Stops       = new List <string>();
                            ln.ExitEntries = new List <SimpleExitEntry>();

                            word  = parseWord(r, q);
                            ln.Id = word;

                            // run until reach end of lane
                            while (word != "end_lane")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "num_waypoints")
                                {
                                    word            = parseWord(r, q);
                                    ln.NumWaypoints = int.Parse(word);
                                }
                                else if (word == "checkpoint")
                                {
                                    // create checkpoint
                                    SimpleCheckpoint cp = new SimpleCheckpoint();

                                    // get waypoint id
                                    string wp = parseWord(r, q);
                                    cp.WaypointId = wp;

                                    // get checkpoint id
                                    string id = parseWord(r, q);
                                    cp.CheckpointId = id;

                                    // add to collection of checkpoints within lane
                                    ln.Checkpoints.Add(cp);
                                }
                                else if (word == "lane_width")
                                {
                                    word         = parseWord(r, q);
                                    ln.LaneWidth = double.Parse(word);
                                }
                                else if (word == "stop")
                                {
                                    word = parseWord(r, q);
                                    ln.Stops.Add(word);
                                }
                                else if (word == "left_boundary")
                                {
                                    word         = parseWord(r, q);
                                    ln.LeftBound = word;
                                }
                                else if (word == "right_boundary")
                                {
                                    word          = parseWord(r, q);
                                    ln.RightBound = word;
                                }
                                else if (word == "exit")
                                {
                                    // create exit-entry pair
                                    SimpleExitEntry exitEntry = new SimpleExitEntry();

                                    // get the exit id
                                    string exit = parseWord(r, q);
                                    exitEntry.ExitId = exit;

                                    // get the entry id
                                    string entry = parseWord(r, q);
                                    exitEntry.EntryId = entry;

                                    // add to collection of exit-entry pairs within lane
                                    ln.ExitEntries.Add(exitEntry);
                                }
                                else if (word == "end_lane")
                                {
                                    // do nothing
                                }
                                // Otherwise we probably have a waypoint
                                else
                                {
                                    // check to make sure a wp by matching lane id to lane identifier of waypoint
                                    int laneIdLength = ln.Id.Length;

                                    // if waypoint matches then create the waypoint
                                    if (word.Length >= laneIdLength + 2 && (word.Substring(0, laneIdLength)).CompareTo(ln.Id) == 0)
                                    {
                                        // create a new waypoint
                                        SimpleWaypoint wp = new SimpleWaypoint();
                                        wp.Position = new UrbanChallenge.Common.Coordinates();

                                        // set its id
                                        wp.ID = word;

                                        // get latitude or X
                                        string lat = parseWord(r, q);
                                        wp.Position.X = double.Parse(lat);

                                        // get longitude or y
                                        string lon = parseWord(r, q);
                                        wp.Position.Y = double.Parse(lon);

                                        // add to lane's collection of waypoints
                                        ln.Waypoints.Add(wp);

                                        numWps += 1;
                                    }
                                    else
                                    {
                                        Console.WriteLine("Unknown identifier: " + word);
                                    }
                                }
                            }
                            seg.Lanes.Add(ln);
                        }
                        else
                        {
                            Console.WriteLine("Unknown identifier: " + word);
                        }
                    }
                    rndf.Segments.Add(seg);
                }
                else if (word == "zone")
                {
                    // create new zone
                    SimpleZone zone = new SimpleZone();
                    zone.ParkingSpots = new List <ParkingSpot>();

                    // get ID
                    word        = parseWord(r, q);
                    zone.ZoneID = word;

                    // run until reach end of segment marker
                    while (word != "end_zone")
                    {
                        // get next word
                        word = parseWord(r, q);

                        if (word == "num_spots")
                        {
                            // get next word
                            word = parseWord(r, q);

                            // set num of parking spots
                            zone.NumParkingSpots = int.Parse(word);
                        }
                        else if (word == "zone_name")
                        {
                            // get next word
                            word = parseWord(r, q);

                            // set zone name
                            zone.Name = word;
                        }
                        else if (word == "perimeter")
                        {
                            // create perimeter
                            zone.Perimeter                 = new ZonePerimeter();
                            zone.Perimeter.ExitEntries     = new List <SimpleExitEntry>();
                            zone.Perimeter.PerimeterPoints = new List <PerimeterPoint>();

                            // set perimeter id
                            zone.Perimeter.PerimeterID = parseWord(r, q);

                            while (word != "end_perimeter")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "num_perimeterpoints")
                                {
                                    // set num of perimeter points
                                    zone.Perimeter.NumPerimeterPoints = int.Parse(parseWord(r, q));
                                }
                                else if (word == "exit")
                                {
                                    // create new exit,entry
                                    SimpleExitEntry ee = new SimpleExitEntry();

                                    // set exit
                                    ee.ExitId = parseWord(r, q);

                                    // set entry
                                    ee.EntryId = parseWord(r, q);

                                    // add to perimeter exit entries
                                    zone.Perimeter.ExitEntries.Add(ee);
                                }
                                else if (word == "end_perimeter")
                                {
                                    // Do Nothing
                                }
                                else
                                {
                                    // create new perimeter point
                                    PerimeterPoint p = new PerimeterPoint();

                                    // set id
                                    p.ID = word;

                                    // create new coordinate
                                    p.position = new UrbanChallenge.Common.Coordinates();

                                    // setX
                                    p.position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    p.position.Y = Double.Parse(parseWord(r, q));

                                    // add to perimeter points
                                    zone.Perimeter.PerimeterPoints.Add(p);
                                }
                            }
                        }
                        else if (word == "spot")
                        {
                            // create a new spot
                            ParkingSpot ps = new ParkingSpot();

                            // set spot id
                            ps.SpotID = parseWord(r, q);

                            while (word != "end_spot")
                            {
                                // get next word
                                word = parseWord(r, q);

                                if (word == "spot_width")
                                {
                                    // set spot width
                                    ps.SpotWidth = parseWord(r, q);
                                }
                                else if (word == "checkpoint")
                                {
                                    // get waypoint id that corresponds with checkpoint
                                    ps.CheckpointWaypointID = parseWord(r, q);

                                    // get checkpoint id
                                    ps.CheckpointID = parseWord(r, q);
                                }
                                else if (word == "end_spot")
                                {
                                    // add spot to zone
                                    zone.ParkingSpots.Add(ps);
                                }
                                else
                                {
                                    // SimpleWaypoint 1
                                    #region

                                    // create new waypoint for waypoint1
                                    ps.Waypoint1          = new SimpleWaypoint();
                                    ps.Waypoint1.Position = new UrbanChallenge.Common.Coordinates();

                                    // set id
                                    ps.Waypoint1.ID = word;

                                    // check if id is checkpointWaypointID
                                    if (ps.Waypoint1.ID == ps.CheckpointWaypointID)
                                    {
                                        ps.Waypoint1.IsCheckpoint = true;
                                        ps.Waypoint1.CheckpointID = ps.CheckpointID;
                                    }

                                    // setX
                                    ps.Waypoint1.Position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    ps.Waypoint1.Position.Y = Double.Parse(parseWord(r, q));

                                    #endregion

                                    // SimpleWaypoint 2
                                    #region

                                    // create new waypoint for waypoint2
                                    ps.Waypoint2          = new SimpleWaypoint();
                                    ps.Waypoint2.Position = new UrbanChallenge.Common.Coordinates();

                                    // set id
                                    ps.Waypoint2.ID = parseWord(r, q);

                                    // check if id is checkpointWaypointID
                                    if (ps.Waypoint2.ID == ps.CheckpointWaypointID)
                                    {
                                        ps.Waypoint2.IsCheckpoint = true;
                                        ps.Waypoint2.CheckpointID = ps.CheckpointID;
                                    }

                                    // setX
                                    ps.Waypoint2.Position.X = Double.Parse(parseWord(r, q));

                                    // setY
                                    ps.Waypoint2.Position.Y = Double.Parse(parseWord(r, q));

                                    #endregion
                                }
                            }
                        }
                        else if (word == "end_zone")
                        {
                            // Do Nothing
                        }
                        else
                        {
                            Console.WriteLine("Unrecognized: " + word);
                        }
                    }

                    // Add zones to zone
                    rndf.Zones.Add(zone);
                }
                else
                {
                    if (word == "end_file")
                    {
                        Console.WriteLine("Rndf Parse :: Successful");
                    }
                    else
                    {
                        Console.WriteLine("Unknown identifier: " + word);
                    }
                }
            }
            return(rndf);
        }
コード例 #10
0
 partial void OnPerimeterPointDeleted(PerimeterPoint perimeterPoint);
コード例 #11
0
 partial void OnPerimeterPointSaved(PerimeterPoint perimeterPoint);
コード例 #12
0
 partial void OnPerimeterPointUpdated(PerimeterPoint perimeterPoint);
コード例 #13
0
 partial void OnPerimeterPointCreated(PerimeterPoint perimeterPoint);
コード例 #14
0
 partial void OnPerimeterPointSaving(PerimeterPoint perimeterPoint);