private void UpdateObs(int entityId, int pointId, MeasurementObservation observation)
        {
            if ((_entityId == entityId) && (_pointId == pointId) && (observation != null))
            {
                int    i       = 0;
                bool   found   = false;
                string imageId = observation.imageId;

                while ((i < lvObservations.Items.Count) && (!found))
                {
                    ListViewItem item = lvObservations.Items[i];
                    var          obs  = item.Tag as MeasurementObservation;

                    if (obs != null)
                    {
                        found = obs.imageId == imageId;
                    }

                    if (!found)
                    {
                        i++;
                    }
                }

                Measurement measurement = Measurement.Get(entityId);

                if (measurement != null)
                {
                    if (measurement.ContainsKey(pointId))
                    {
                        var measurementPointS = measurement[pointId];
                        measurementPointS.UpdateObservation(imageId, observation.x, observation.y, observation.z);
                    }
                }

                if (found)
                {
                    lvObservations.Items[i].Tag = observation;

                    if (_bitmapImageId.Contains(imageId))
                    {
                        int index = _bitmapImageId.IndexOf(imageId);

                        if (_idBitmap.Count > index)
                        {
                            _idBitmap[index].Dispose();
                            _idBitmap.RemoveAt(index);
                            DrawObservations();
                            RedrawObservationList();
                        }
                    }
                }
            }
        }
        // =========================================================================
        // Private Functions
        // =========================================================================
        private void AddObs(Bitmap bitmap, FrmGlobespotter frmGlobespotter, int entityId, int pointId,
                            MeasurementObservation observation)
        {
            if (_entityId != entityId)
            {
                _lastPointIdUpd = null;
            }

            string               imageId      = observation.imageId;
            GsExtension          extension    = GsExtension.GetExtension();
            CycloMediaGroupLayer groupLayer   = extension.CycloMediaGroupLayer;
            IMappedFeature       locationInfo = groupLayer.GetLocationInfo(imageId);
            var    recordingInfo = locationInfo as Recording;
            double stdX          = (recordingInfo == null) ? 0 : (recordingInfo.LongitudePrecision ?? 0);
            double stdY          = (recordingInfo == null) ? 0 : (recordingInfo.LatitudePrecision ?? 0);
            double stdZ          = (recordingInfo == null) ? 0 : (recordingInfo.HeightPrecision ?? 0);
            string std           = string.Format("{0:0.00} {1:0.00} {2:0.00}", stdX, stdY, stdZ);

            if ((_entityId != entityId) || (_pointId != pointId))
            {
                ClearForm(false);
                _entityId           = entityId;
                _pointId            = pointId;
                _measurementPoint   = null;
                _measurementPointS  = null;
                txtNumber.Text      = string.Empty;
                txtPosition.Text    = string.Empty;
                txtPositionStd.Text = string.Empty;
                RelO.Image          = null;
                SetOpenClose(false);
            }

            Measurement measurement = Measurement.Get(_entityId);

            if (measurement != null)
            {
                _measurementPointS = measurement[_pointId];
                _measurementPointS.UpdateObservation(imageId, observation.x, observation.y, observation.z);
                txtNumber.Text = _measurementPointS.M.ToString(_ci);

                if (measurement.IsPointMeasurement)
                {
                    SetOpenClose(true);

                    if (_commandItem == null)
                    {
                        _commandItem = ArcMap.Application.CurrentTool;
                        ArcUtils.SetToolActiveInToolBar("esriEditor.EditTool");
                    }
                }
            }

            if (bitmap != null)
            {
                _bitmapImageId.Add(imageId);
                _idBitmap.Add(bitmap);
            }

            bool add = true;

            foreach (ListViewItem item in lvObservations.Items)
            {
                var obs = item.Tag as MeasurementObservation;

                if (obs != null)
                {
                    if (obs.imageId == imageId)
                    {
                        add = false;
                    }
                }
            }

            if (add)
            {
                _frmGlobespotter = frmGlobespotter;
                var items        = new[] { imageId, std, "X" };
                var listViewItem = new ListViewItem(items)
                {
                    Tag = observation
                };
                lvObservations.Items.Add(listViewItem);
                DrawObservations();
                RedrawObservationList();
            }
        }
 public static void UpdateObservation(int entityId, int pointId, MeasurementObservation observation)
 {
     Instance.UpdateObs(entityId, pointId, observation);
 }
 public static void AddObservation(Bitmap bitmap, FrmGlobespotter frmGlobespotter, int entityId, int pointId,
                                   MeasurementObservation observation)
 {
     Open();
     Instance.AddObs(bitmap, frmGlobespotter, entityId, pointId, observation);
 }
        private void LookAtObservation()
        {
            MeasurementObservation observation = GetObservation();

            observation?.LookAtMe();
        }
        private void OnObservationRemoved(object sender, MouseButtonEventArgs e)
        {
            MeasurementObservation observation = GetObservation();

            observation?.RemoveMe();
        }