private async void OnMapViewInitialized(MapViewEventArgs args)
        {
            CycloMediaLayer.ResetYears();
            LayersRemovedEvent.Subscribe(OnLayerRemoved);
            DrawCompleteEvent.Subscribe(OnDrawComplete);

            if (ContainsCycloMediaLayer(args.MapView))
            {
                await AddLayersAsync(args.MapView);
            }

            Settings settings = Settings.Instance;
            Login    login    = Login.Instance;

            settings.PropertyChanged += OnSettingsPropertyChanged;
            login.PropertyChanged    += OnLoginPropertyChanged;

            if (settings.CycloramaViewerCoordinateSystem != null)
            {
                await CoordSystemUtils.CheckInAreaCycloramaSpatialReferenceAsync();
            }

            if (!_agreement.Value)
            {
                PropertySheet.ShowDialog("streetSmartArcGISPro_optionsPropertySheet", "streetSmartArcGISPro_agreementPage");
            }
        }
        public List <XElement> GetByBbox(IEnvelope envelope, CycloMediaLayer cycloMediaLayer)
        {
            string epsgCode = cycloMediaLayer.EpsgCode;

            epsgCode = SpatialReferences.Instance.ToKnownSrsName(epsgCode);
            List <XElement> result;

            if (cycloMediaLayer is WfsLayer)
            {
                var    wfsLayer       = cycloMediaLayer as WfsLayer;
                string remoteLocation = string.Format(_ci, WfsBboxRequest, wfsLayer.Url, wfsLayer.Version, epsgCode,
                                                      envelope.XMin, envelope.YMin, envelope.XMax, envelope.YMax,
                                                      epsgCode, wfsLayer.TypeName);
                var xml = (string)GetRequest(remoteLocation, GetXmlCallback, XmlConfig);
                result = ParseXml(xml, (Namespaces.GmlNs + "featureMember"));
            }
            else
            {
                string postItem = string.Format(_ci, cycloMediaLayer.WfsRequest, epsgCode, envelope.XMin, envelope.YMin,
                                                envelope.XMax,
                                                envelope.YMax, DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:00-00:00"));
                var xml = (string)PostRequest(RecordingService, GetXmlCallback, postItem, XmlConfig);
                result = ParseXml(xml, (Namespaces.GmlNs + "featureMembers"));
            }

            return(result);
        }
        // =========================================================================
        // Interface functions
        // =========================================================================
        public List <XElement> GetByImageId(string imageId, CycloMediaLayer cycloMediaLayer)
        {
            string epsgCode = cycloMediaLayer.EpsgCode;

            epsgCode = SpatialReferences.Instance.ToKnownSrsName(epsgCode);
            string remoteLocation = string.Format(RecordingRequest, RecordingService, epsgCode, imageId);
            var    xml            = (string)GetRequest(remoteLocation, GetXmlCallback, XmlConfig);

            return(ParseXml(xml, (Namespaces.GmlNs + "featureMembers")));
        }
Beispiel #4
0
 private void OnLayerRemoved(CycloMediaLayer cycloMediaLayer)
 {
     if (CycloMediaGroupLayer != null)
     {
         if (!CycloMediaGroupLayer.ContainsLayers)
         {
             RemoveLayers();
         }
     }
 }
 private void CycloMediaLayerRemoved(CycloMediaLayer layer)
 {
     try
     {
         if (layer != null)
         {
             Checked = (layer.Name != LayerName) && Checked;
         }
     }
     catch (Exception ex)
     {
         _logClient.Error("GsHistoricalDataLayer.CycloMediaLayerRemoved", ex.Message, ex);
         Trace.WriteLine(ex.Message, "GsHistoricalDataLayers.CycloMediaRemoved");
     }
 }
Beispiel #6
0
 private void CycloMediaLayerAdded(CycloMediaLayer layer)
 {
     try
     {
         if (layer != null)
         {
             Checked = (layer.Name == LayerName) || Checked;
         }
     }
     catch (Exception ex)
     {
         _logClient.Error("GsRecentDataLayer.CycloMediaLayterAdded", ex.Message, ex);
         Trace.WriteLine(ex.Message, "GsRecentDataLayer.CycloMediaLayerAdded");
     }
 }
        protected override void OnUpdate()
        {
            try
            {
                GsExtension  extension   = GsExtension.GetExtension();
                IApplication application = ArcMap.Application;
                Enabled = ((application != null) && extension.Enabled);

                if (application != null)
                {
                    var document = application.Document as IMxDocument;

                    if (document != null)
                    {
                        var tocDisplayView = document.CurrentContentsView as TOCDisplayView;

                        if (tocDisplayView != null)
                        {
                            var selectedItem = tocDisplayView.SelectedItem as ILayer;

                            if (selectedItem != null)
                            {
                                _vectorLayer = VectorLayer.GetLayer(selectedItem);
                                CycloMediaGroupLayer cycloMediaGroupLayer = extension.CycloMediaGroupLayer;
                                _cycloMediaLayer = (cycloMediaGroupLayer == null) ? null : cycloMediaGroupLayer.GetLayer(selectedItem);

                                if (_cycloMediaLayer != null)
                                {
                                    Checked = _cycloMediaLayer.IsVisibleInGlobespotter;
                                    Enabled = _cycloMediaLayer.IsVisible;
                                }

                                if (_vectorLayer != null)
                                {
                                    Checked = _vectorLayer.IsVisibleInGlobespotter;
                                    Enabled = _vectorLayer.IsVisible;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logClient.Error("GsShowInCyclorama.OnUpdate", ex.Message, ex);
                Trace.WriteLine(ex.Message, "GsShowInCyclorama.OnUpdate");
            }
        }
        /// <summary>
        /// This function calculates the imageId for location on the screen
        /// </summary>
        /// <param name="arg">The mouse arguments</param>
        /// <param name="layer">The layer where the point has been found</param>
        /// <returns>The imageId of the point</returns>
        private static string GetImageIdFromPoint(MouseEventArgs arg, out CycloMediaLayer layer)
        {
            layer = null;
            string      result    = string.Empty;
            GsExtension extension = GsExtension.GetExtension();

            if (extension.InsideScale())
            {
                int x = arg.X;
                int y = arg.Y;
                CycloMediaGroupLayer cycloMediaGroupLayer = extension.CycloMediaGroupLayer;
                result = cycloMediaGroupLayer.GetFeatureFromPoint(x, y, out layer);
            }

            return(result);
        }
        private void UpdateRecordingLayer(CycloMediaLayer layer)
        {
            if (layer.IsVisible)
            {
                _api.SetRecordingLocationsVisible(layer.IsVisibleInGlobespotter);
                _api.SetUseDateRange(layer.UseDateRange);

                if (layer.UseDateRange)
                {
                    DateTime dateFrom = _historicalRecordings.DateFrom;
                    DateTime dateTo   = _historicalRecordings.DateTo;
                    _api.SetDateFrom($"{dateFrom.Year}-{dateFrom.Month}-{dateFrom.Day}");
                    _api.SetDateTo($"{dateTo.Year}-{dateTo.Month}-{dateTo.Day}");
                }
            }
            else if (!_layers.Aggregate(false, (current, cyclLayer) => (cyclLayer.IsVisible || current)))
            {
                _api.SetRecordingLocationsVisible(false);
            }
        }
        protected override async void OnUpdate()
        {
            MapView mapView = MapView.Active;
            IReadOnlyList <Layer> layers = mapView?.GetSelectedLayers();

            if (layers?.Count == 1)
            {
                Layer        layer        = layers[0];
                GlobeSpotter globeSpotter = GlobeSpotter.Current;

                CycloMediaGroupLayer groupLayer = globeSpotter.CycloMediaGroupLayer;
                _cycloMediaLayer = groupLayer?.GetLayer(layer);

                VectorLayerList vectorLayerList = await globeSpotter.GetVectorLayerListAsync();

                _vectorLayer = vectorLayerList.GetLayer(layer);

                if (_cycloMediaLayer != null)
                {
                    IsChecked = _cycloMediaLayer.IsVisibleInGlobespotter;
                    Enabled   = _cycloMediaLayer.IsVisible;
                }
                else if (_vectorLayer != null)
                {
                    IsChecked = _vectorLayer.IsVisibleInGlobespotter;
                    Enabled   = _vectorLayer.IsVisible;
                }
                else
                {
                    IsChecked = false;
                    Enabled   = false;
                }
            }
            else
            {
                Enabled = false;
            }

            base.OnUpdate();
        }
Beispiel #11
0
        private void OpenDocument()
        {
            try
            {
                CycloMediaLayer.ResetYears();
                var arcEvents = ArcUtils.ActiveViewEvents;

                if (arcEvents != null)
                {
                    arcEvents.ItemDeleted += ItemDeleted;
                    arcEvents.AfterDraw   += Afterdraw;
                }

                if (OpenDocumentEvent != null)
                {
                    OpenDocumentEvent();
                }

                if (ContainsCycloMediaLayer())
                {
                    AddLayers();
                }

                CycloMediaLayer.LayerRemoveEvent += OnLayerRemoved;
                GsRecentDataLayer.AddToMenu();
                GsHistoricalDataLayer.AddToMenu();
                GsCycloMediaOptions.AddToMenu();
                GsMeasurementDetail.AddToMenu();
                FrmMeasurement.Close();
                FrmIdentify.Close();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message, "GsExtension.OpenDocument");
            }
        }
/*
 *  protected async override void OnUpdate()
 *  {
 *    Cursor nowCursor = Cursor;
 *    Cursor = _containsFeatures ? Cursors.Arrow : _thisCursor;
 *
 *    if (nowCursor != Cursor)
 *    {
 *      await FrameworkApplication.SetCurrentToolAsync("esri_mapping_exploreTool");
 *      await FrameworkApplication.SetCurrentToolAsync("globeSpotterArcGISPro_openImageTool");
 *    }
 *
 *    base.OnUpdate();
 *  }
 *
 *  protected override async void OnToolMouseMove(MapViewMouseEventArgs e)
 *  {
 *    await QueuedTask.Run(() =>
 *    {
 *      var constants = ConstantsRecordingLayer.Instance;
 *      double size = constants.SizeLayer;
 *      double halfSize = size / 2;
 *      MapView activeView = MapView.Active;
 *
 *      WinPoint clientPoint = e.ClientPoint;
 *      WinPoint pointScreen = activeView.ClientToScreen(clientPoint);
 *      double x = pointScreen.X;
 *      double y = pointScreen.Y;
 *      WinPoint minPoint = new WinPoint(x - halfSize, y - halfSize);
 *      WinPoint maxPoint = new WinPoint(x + halfSize, y + halfSize);
 *      MapPoint minPoint1 = activeView.ScreenToMap(minPoint);
 *      MapPoint maxPoint1 = activeView.ScreenToMap(maxPoint);
 *      Envelope envelope = EnvelopeBuilder.CreateEnvelope(minPoint1, maxPoint1, minPoint1.SpatialReference);
 *      var features = MapView.Active?.GetFeatures(envelope);
 *      _containsFeatures = (features != null) && (features.Count >= 1);
 *    });
 *
 *    base.OnToolMouseMove(e);
 *  }
 */
        protected override Task <bool> OnSketchCompleteAsync(Geometry geometry)
        {
            return(QueuedTask.Run(() =>
            {
                MapPoint point = geometry as MapPoint;
                MapView activeView = MapView.Active;

                if (point != null && activeView != null)
                {
                    var constants = ConstantsRecordingLayer.Instance;
                    double size = constants.SizeLayer;
                    double halfSize = size / 2;

                    SpatialReference pointSpatialReference = point.SpatialReference;
                    var pointScreen = activeView.MapToScreen(point);
                    double x = pointScreen.X;
                    double y = pointScreen.Y;
                    WinPoint pointScreenMin = new WinPoint(x - halfSize, y - halfSize);
                    WinPoint pointScreenMax = new WinPoint(x + halfSize, y + halfSize);
                    var pointMapMin = activeView.ScreenToMap(pointScreenMin);
                    var pointMapMax = activeView.ScreenToMap(pointScreenMax);

                    Envelope envelope = EnvelopeBuilder.CreateEnvelope(pointMapMin, pointMapMax, pointSpatialReference);
                    var features = activeView.GetFeatures(envelope);

                    GlobeSpotter globeSpotter = GlobeSpotter.Current;
                    CycloMediaGroupLayer groupLayer = globeSpotter?.CycloMediaGroupLayer;

                    if (features != null && groupLayer != null)
                    {
                        _nearest = Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl);

                        if (_nearest)
                        {
                            Settings settings = Settings.Instance;
                            MySpatialReference cycloCoordSystem = settings.CycloramaViewerCoordinateSystem;

                            if (cycloCoordSystem != null)
                            {
                                SpatialReference cycloSpatialReference = cycloCoordSystem.ArcGisSpatialReference ??
                                                                         cycloCoordSystem.CreateArcGisSpatialReferenceAsync().Result;

                                if (pointSpatialReference.Wkid != cycloSpatialReference.Wkid)
                                {
                                    ProjectionTransformation projection = ProjectionTransformation.Create(pointSpatialReference,
                                                                                                          cycloSpatialReference);
                                    point = GeometryEngine.Instance.ProjectEx(point, projection) as MapPoint;
                                }

                                if (point != null)
                                {
                                    CultureInfo ci = CultureInfo.InvariantCulture;
                                    _location = string.Format(ci, "{0},{1}", point.X, point.Y);

                                    if (!globeSpotter.InsideScale())
                                    {
                                        double minimumScale = ConstantsRecordingLayer.Instance.MinimumScale;
                                        double scale = minimumScale / 2;
                                        Camera camera = new Camera(point.X, point.Y, scale, 0.0);
                                        MapView.Active?.ZoomTo(camera);
                                    }
                                }
                            }
                        }
                        else
                        {
                            foreach (var feature in features)
                            {
                                Layer layer = feature.Key;
                                CycloMediaLayer cycloMediaLayer = groupLayer.GetLayer(layer);

                                if (cycloMediaLayer != null)
                                {
                                    foreach (long uid in feature.Value)
                                    {
                                        Recording recording = cycloMediaLayer.GetRecordingAsync(uid).Result;

                                        if (recording.IsAuthorized == null || (bool)recording.IsAuthorized)
                                        {
                                            _location = recording.ImageId;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                return true;
            }));
        }