Beispiel #1
0
        // when someone hits the enter key, create geodetic graphic
        internal override void OnEnterKeyCommand(object obj)
        {
            if (ArcMap.Document.FocusMap.SpatialReference == null)
            {
                MessageBox.Show(
                    DistanceAndDirectionLibrary.Properties.Resources.InvalidSpatialReferenceError,
                    DistanceAndDirectionLibrary.Properties.Resources.DistanceDirectionLabel,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            string outFormattedString = string.Empty;

            CoordinateConversionLibrary.Models.CoordinateType ccType = CoordinateConversionLibrary.Models.CoordinateType.Unknown;
            if (LineFromType == LineFromTypes.Points)
            {
                ccType = CoordinateConversionLibrary.Helpers.ConversionUtils.GetCoordinateString(Point1Formatted, out outFormattedString);
                Point1 = (ccType != CoordinateConversionLibrary.Models.CoordinateType.Unknown) ? GetPointFromString(outFormattedString) : null;

                ccType = CoordinateConversionLibrary.Helpers.ConversionUtils.GetCoordinateString(Point2Formatted, out outFormattedString);
                Point2 = (ccType != CoordinateConversionLibrary.Models.CoordinateType.Unknown) ? GetPointFromString(outFormattedString) : null;
                if (!Azimuth.HasValue || Point1 == null || Point2 == null)
                {
                    return;
                }
            }
            else
            {
                ccType = CoordinateConversionLibrary.Helpers.ConversionUtils.GetCoordinateString(Point1Formatted, out outFormattedString);
                Point1 = (ccType != CoordinateConversionLibrary.Models.CoordinateType.Unknown) ? GetPointFromString(outFormattedString) : null;
                if (!Azimuth.HasValue || Point1 == null)
                {
                    return;
                }
            }

            HasPoint1 = true;
            HasPoint2 = true;
            IGeometry geo  = CreatePolyline();
            IPolyline line = geo as IPolyline;

            if (line == null)
            {
                return;
            }

            IDictionary <String, Double> lineAttributes = new Dictionary <String, Double>();

            lineAttributes.Add("distance", Distance);
            lineAttributes.Add("angle", (double)Azimuth);
            AddGraphicToMap(line, attributes: lineAttributes);
            ResetPoints();
            ClearTempGraphics();
            base.OnEnterKeyCommand(obj);
        }
        internal virtual void OnPasteCommand(object obj)
        {
            var mode = obj.ToString();

            if (string.IsNullOrWhiteSpace(mode))
            {
                return;
            }

            var input = Clipboard.GetText().Trim();

            string[] lines       = input.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
            var      coordinates = new List <string>();

            foreach (var item in lines)
            {
                string outFormattedString = string.Empty;
                string coordinate         = item.Trim().ToString();
                CoordinateConversionLibrary.Models.CoordinateType ccType = CoordinateConversionLibrary.Helpers.ConversionUtils.GetCoordinateString(coordinate, out outFormattedString);
                if (ccType == CoordinateConversionLibrary.Models.CoordinateType.Unknown)
                {
                    Regex regexMercator = new Regex(@"^(?<latitude>\-?\d+\.?\d*)[+,;:\s]*(?<longitude>\-?\d+\.?\d*)");
                    var   matchMercator = regexMercator.Match(coordinate);
                    if (matchMercator.Success && matchMercator.Length == coordinate.Length)
                    {
                        ccType = CoordinateConversionLibrary.Models.CoordinateType.DD;
                    }
                }
                MapPoint point = (ccType != CoordinateConversionLibrary.Models.CoordinateType.Unknown) ? GetMapPointFromString(outFormattedString) : null;
                if (point != null)
                {
                    if (mode == VisibilityLibrary.Properties.Resources.ToolModeObserver)
                    {
                        ToolMode = MapPointToolMode.Observer;
                        Point1   = point;
                        OnNewMapPointEvent(Point1);
                    }
                    else if (mode == VisibilityLibrary.Properties.Resources.ToolModeTarget)
                    {
                        ToolMode = MapPointToolMode.Target;
                        Point2   = point;
                        OnNewMapPointEvent(Point2);
                    }
                }
            }
        }
        public virtual void OnImportCSVFileCommand(object obj)
        {
            var mode = obj as string;

            CoordinateConversionLibrary.Models.CoordinateConversionLibraryConfig.AddInConfig.DisplayAmbiguousCoordsDlg = false;
            var fileDialog = new Microsoft.Win32.OpenFileDialog();

            fileDialog.CheckFileExists = true;
            fileDialog.CheckPathExists = true;
            fileDialog.Filter          = "csv files|*.csv";

            // attemp to import
            var fieldVM = new CoordinateConversionLibrary.ViewModels.SelectCoordinateFieldsViewModel();
            var result  = fileDialog.ShowDialog();

            if (result.HasValue && result.Value == true)
            {
                var dlg = new CoordinateConversionLibrary.Views.ProSelectCoordinateFieldsView();
                using (Stream s = new FileStream(fileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    var headers = CoordinateConversionLibrary.Helpers.ImportCSV.GetHeaders(s);
                    if (headers != null)
                    {
                        foreach (var header in headers)
                        {
                            fieldVM.AvailableFields.Add(header);
                            System.Diagnostics.Debug.WriteLine("header : {0}", header);
                        }
                        dlg.DataContext = fieldVM;
                    }
                    else
                    {
                        ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(VisibilityLibrary.Properties.Resources.MsgNoDataFound,
                                                                         VisibilityLibrary.Properties.Resources.CaptionError);
                        return;
                    }
                }
                if (dlg.ShowDialog() == true)
                {
                    using (Stream s = new FileStream(fileDialog.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        var lists = CoordinateConversionLibrary.Helpers.ImportCSV.Import <CoordinateConversionLibrary.ViewModels.ImportCoordinatesList>(s, fieldVM.SelectedFields.ToArray());

                        foreach (var item in lists)
                        {
                            string outFormattedString = string.Empty;

                            var sb = new StringBuilder();
                            sb.Append(item.lat.Trim());
                            if (fieldVM.UseTwoFields)
                            {
                                sb.Append(string.Format(" {0}", item.lon.Trim()));
                            }

                            string coordinate = sb.ToString();
                            CoordinateConversionLibrary.Models.CoordinateType ccType = CoordinateConversionLibrary.Helpers.ConversionUtils.GetCoordinateString(coordinate, out outFormattedString);
                            if (ccType == CoordinateConversionLibrary.Models.CoordinateType.Unknown)
                            {
                                Regex regexMercator = new Regex(@"^(?<latitude>\-?\d+\.?\d*)[+,;:\s]*(?<longitude>\-?\d+\.?\d*)");
                                var   matchMercator = regexMercator.Match(coordinate);
                                if (matchMercator.Success && matchMercator.Length == coordinate.Length)
                                {
                                    ccType = CoordinateConversionLibrary.Models.CoordinateType.DD;
                                }
                            }
                            MapPoint point = (ccType != CoordinateConversionLibrary.Models.CoordinateType.Unknown) ? GetMapPointFromString(outFormattedString) : null;
                            if (point != null)
                            {
                                if (mode == VisibilityLibrary.Properties.Resources.ToolModeObserver)
                                {
                                    ToolMode = MapPointToolMode.Observer;
                                    Point1   = point;
                                    OnNewMapPointEvent(Point1);
                                }
                                else if (mode == VisibilityLibrary.Properties.Resources.ToolModeTarget)
                                {
                                    ToolMode = MapPointToolMode.Target;
                                    Point2   = point;
                                    OnNewMapPointEvent(Point2);
                                }
                            }
                        }
                    }
                }
            }
        }