public ActionResult Geography(Guid id)
        {
            MapDataView model = new MapDataView();
              Mission m = (from g in this.db.Missions where g.Id == id select g).First();
              ViewData["Title"] = string.Format("Mission Geography{0}", " :: " + m.StateNumber + " " + m.Title);
              ViewData["mission"] = m;

              model.Id = id;
              ViewData["coordDisplay"] = this.UserSettings.CoordinateDisplay;
              ViewData["missionId"] = id;
              return View(model);
        }
        public ActionResult Geography(Guid id)
        {
            MapDataView model = new MapDataView();
            Mission     m     = (from g in this.db.Missions where g.Id == id select g).First();

            ViewData["Title"]   = string.Format("Mission Geography{0}", " :: " + m.StateNumber + " " + m.Title);
            ViewData["mission"] = m;

            model.Id = id;
            ViewData["coordDisplay"] = this.UserSettings.CoordinateDisplay;
            ViewData["missionId"]    = id;
            return(View(model));
        }
        public DataActionResult GetGeography(Guid id, bool?overview)
        {
            if (!User.IsInRole("cdb.users"))
            {
                return(GetLoginError());
            }

            MapDataView model = new MapDataView();
            var         query = (from g in this.db.MissionGeography where g.Mission.Id == id select g);

            if (overview.HasValue && overview.Value)
            {
                query = query.Where(f => f.Kind == "found" || f.Kind == "base" || f.Kind == "cluLkp").OrderByDescending(f => f.Kind).Take(1);
            }

            model.Items.AddRange(query.AsEnumerable().Select(f => GeographyView.BuildGeographyView(f)));
            return(Data(model));
        }
        public ActionResult GetGeographies(Guid? unitId)
        {
            if (!User.IsInRole("cdb.users")) return GetLoginError();

              MapDataView model = new MapDataView();
              //var members = this.db.Members
              //    .Where(f => f.Memberships.Any(g => (g.Unit.Id == unitId || unitId == null) && g.Status.IsActive && g.EndTime == null))
              //    .ToDictionary(f => f.Id, f => f);

              var geographies = this.db.Members
              .Where(f => f.Memberships.Any(g => (g.Unit.Id == unitId || unitId == null) && g.Status.IsActive && g.EndTime == null))
              .SelectMany(f => f.Addresses).Where(f => f.Geo != null).OrderBy(f => f.Geo);

              Guid lastPerson = Guid.Empty;
              string lastGeo = string.Empty;
              GeographyView view = null;

              foreach (var row in geographies)
              {
            //Guid personRef = (Guid)row.PersonReference.EntityKey.EntityKeyValues.Single().Value;
            //if (personRef == lastPerson || !members.ContainsKey(personRef))
            if (row.Person.Id == lastPerson)
            {
              continue;
            }
            //lastPerson = personRef;
            lastPerson = row.Person.Id;

            if (row.Geo == lastGeo)
            {
              view.Description = PersonDescription(row.Person, this.db) + view.Description;
              continue;
            }
            lastGeo = row.Geo;

            view = GeographyView.BuildGeographyView(row);
            string[] parts = view.Description.Split('\n');
            view.Description = PersonDescription(row.Person, this.db) + string.Join("<br/>", parts.Skip(1));
            model.Items.Add(view);
              }
              return Data(model);
        }
Ejemplo n.º 5
0
        public ActionResult MapDisplay()
        {
            MapDataView model = new MapDataView(repository);

            return(View(model));
        }
        public JsonDataContractResult GetGeographies(DateTime? start, DateTime? stop, bool? overview)
        {
            MapDataView model = new MapDataView();
              List<string> messages = new List<string>();
              var query = (from g in this.db.MissionGeography.Include("Mission") select g);
              if (start.HasValue)
              {
            query = query.Where(f => f.Mission.StartTime >= start.Value);
              }
              if (stop.HasValue)
              {
            query = query.Where(f => f.Mission.StopTime < stop.Value);
              }

              Guid lastMission = Guid.Empty;
              int excluded = 0;

              Dictionary<Mission, GeographyView> views = new Dictionary<Mission, GeographyView>();

              foreach (MissionGeography geo in query.ToList().OrderBy(f => f.Mission.StartTime).ThenBy(f => f.Mission.StateNumber).ThenBy(f => f.Mission.Id).ThenBy(f => f.Geography.STDimension()).ThenByDescending(f => f.Kind))
              {
            if (geo.Mission.Id == lastMission)
            {
              continue;
            }

            if (!User.IsInRole("cdb.users") && (geo.Mission.MissionType.ToLowerInvariant().Contains("urban") || geo.Mission.MissionType.ToLowerInvariant().Contains("evidence")))
            {
              excluded++;
              lastMission = geo.Mission.Id;
              continue;
            }

            if ((overview ?? true) && !(geo.Kind == "found" || geo.Kind == "base" || geo.Kind == "cluLkp"))
            {
              continue;
            }

            if (geo.Geography.STDimension() == 1)
            {
              geo.Geography = geo.Geography.STPointN(1);
            }

            GeographyView view = GeographyView.BuildGeographyView(geo);

            view.Description = string.Format("{0:yyyy-MM-dd}, #{1}<br/>{2}<br/>{3}",
            geo.Mission.StartTime.Date,
            geo.Mission.StateNumber,
            geo.Mission.Title,
            User.IsInRole("cdb.users") ? "<a target=\"_blank\" href=\"" + Url.Action("geography", new { id = geo.Mission.Id }) + "\">View Details</a>" : ""
            );
            view.EventId = geo.Mission.Id;

            model.Items.Add(view);

            lastMission = geo.Mission.Id;
              }

              if (excluded > 0)
              {
            messages.Add(string.Format("{0} evidence and/or urban searches not shown to anonymous users.", excluded));
              }

              if (messages.Count > 0)
              {
            model.Messages = messages.ToArray();
              }

              return new JsonDataContractResult(model);
        }
        public DataActionResult GetGeography(Guid id, bool? overview)
        {
            if (!User.IsInRole("cdb.users")) return GetLoginError();

              MapDataView model = new MapDataView();
              var query = (from g in this.db.MissionGeography where g.Mission.Id == id select g);
              if (overview.HasValue && overview.Value)
              {
            query = query.Where(f => f.Kind == "found" || f.Kind == "base" || f.Kind == "cluLkp").OrderByDescending(f => f.Kind).Take(1);
              }

              model.Items.AddRange(query.AsEnumerable().Select(f => GeographyView.BuildGeographyView(f)));
              return Data(model);
        }
        public FileContentResult MissionKML(Guid id)
        {
            MapDataView data = (MapDataView)GetGeography(id, false).Data;

            Mission m = (from mission in this.db.Missions where mission.Id == id select mission).FirstOrDefault();

            XNamespace ns  = "http://earth.google.com/kml/2.1";
            KmlBuilder kml = (new KmlBuilder {
                Name = string.Format("{0}: {1}", m.StateNumber, m.Title), Description = ""
            }).AddIconStyles(this.AbsoluteUrl(Url.Content("~/content/images/maps")));


            string[] colors     = "ff4500,ff42c3,904cff".Split(',');
            Guid     teamFolder = Guid.Empty;

            foreach (var item in data.Items)
            {
                Guid?folder = null;
                if (item.Kind == "team")
                {
                    if (teamFolder == Guid.Empty)
                    {
                        teamFolder = kml.CreateFolder("Team Positions", null);
                    }
                    folder = teamFolder;
                }

                string name = string.IsNullOrWhiteSpace(item.Description) ? item.Kind : item.Description;

                kml.AddItem(item, name, item.Kind, null, folder);


                //var itemNode = new XElement(ns + "Placemark");
                //itemNode.Add(new XElement(ns + "name", item.Description));
                //itemNode.Add(new XElement(ns + "description", item.Description));

                //if (item is RouteView)
                //{
                //    itemNode.Add(new XElement(ns + "styleUrl", "#_" + colors[i++ % colors.Length]));
                //    var lineNode = new XElement(ns + "LineString");
                //    lineNode.Add(new XElement(ns + "extrude", 1));
                //    lineNode.Add(new XElement(ns + "tessellate", 1));
                //    lineNode.Add(new XElement(ns + "altitudeMode", "clampToGround"));
                //    //lineNode.Add(new XElement(ns + "color", colors[i++ % colors.Length]+"ff"));
                //    lineNode.Add(new XElement(ns + "coordinates", string.Join("\n", ((RouteView)item).Points.Select(f => string.Format("{0},{1},10", f.Long, f.Lat)).ToArray())));
                //    itemNode.Add(lineNode);
                //}
                //else if (item is WaypointView)
                //{
                //    WaypointView wpt = (WaypointView)item;
                //    itemNode.Add(new XElement(ns + "Point", new XElement(ns + "coordinates", string.Format("{0},{1}", wpt.Long, wpt.Lat))));
                //    if (item.Kind == "team")
                //    {
                //        itemNode.Add(new XElement(ns + "visibility", 0));
                //    }
                //}
                //docNode.Add(itemNode);
            }



            return(new FileContentResult(System.Text.Encoding.UTF8.GetBytes(kml.ToString()), "application/vnd.google-earth.kml+xml")
            {
                FileDownloadName = m.StateNumber + ".kml"
            });
        }
        public JsonDataContractResult GetGeographies(DateTime?start, DateTime?stop, bool?overview)
        {
            MapDataView   model    = new MapDataView();
            List <string> messages = new List <string>();
            var           query    = (from g in this.db.MissionGeography.Include("Mission") select g);

            if (start.HasValue)
            {
                query = query.Where(f => f.Mission.StartTime >= start.Value);
            }
            if (stop.HasValue)
            {
                query = query.Where(f => f.Mission.StopTime < stop.Value);
            }

            Guid lastMission = Guid.Empty;
            int  excluded    = 0;

            Dictionary <Mission, GeographyView> views = new Dictionary <Mission, GeographyView>();

            foreach (MissionGeography geo in query.ToList().OrderBy(f => f.Mission.StartTime).ThenBy(f => f.Mission.StateNumber).ThenBy(f => f.Mission.Id).ThenBy(f => f.Geography.STDimension()).ThenByDescending(f => f.Kind))
            {
                if (geo.Mission.Id == lastMission)
                {
                    continue;
                }

                if (!User.IsInRole("cdb.users") && (geo.Mission.MissionType.ToLowerInvariant().Contains("urban") || geo.Mission.MissionType.ToLowerInvariant().Contains("evidence")))
                {
                    excluded++;
                    lastMission = geo.Mission.Id;
                    continue;
                }

                if ((overview ?? true) && !(geo.Kind == "found" || geo.Kind == "base" || geo.Kind == "cluLkp"))
                {
                    continue;
                }

                if (geo.Geography.STDimension() == 1)
                {
                    geo.Geography = geo.Geography.STPointN(1);
                }

                GeographyView view = GeographyView.BuildGeographyView(geo);

                view.Description = string.Format("{0:yyyy-MM-dd}, #{1}<br/>{2}<br/>{3}",
                                                 geo.Mission.StartTime.Date,
                                                 geo.Mission.StateNumber,
                                                 geo.Mission.Title,
                                                 User.IsInRole("cdb.users") ? "<a target=\"_blank\" href=\"" + Url.Action("geography", new { id = geo.Mission.Id }) + "\">View Details</a>" : ""
                                                 );
                view.EventId = geo.Mission.Id;

                model.Items.Add(view);

                lastMission = geo.Mission.Id;
            }

            if (excluded > 0)
            {
                messages.Add(string.Format("{0} evidence and/or urban searches not shown to anonymous users.", excluded));
            }

            if (messages.Count > 0)
            {
                model.Messages = messages.ToArray();
            }

            return(new JsonDataContractResult(model));
        }