private void BrowseCustomDataClick(object sender, RoutedEventArgs e)
        {
            CustomDataCategoryViewModel customDataCategoryViewModel = ((FrameworkElement)sender).DataContext as CustomDataCategoryViewModel;
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Shape File(*.shp)|*.shp";
            if (openFileDialog.ShowDialog().GetValueOrDefault())
            {
                ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(openFileDialog.FileName);
                shapeFileFeatureLayer.Open();

                if (shapeFileFeatureLayer.GetShapeFileType() == ShapeFileType.Polygon)
                {
                    customDataCategoryViewModel.CustomDataFilePathName = openFileDialog.FileName;
                    customDataCategoryViewModel.Columns.Clear();

                    foreach (DbfColumn dbfColumn in shapeFileFeatureLayer.FeatureSource.GetColumns().OfType<DbfColumn>())
                    {
                        if (dbfColumn.ColumnType == DbfColumnType.Float
                            || dbfColumn.ColumnType == DbfColumnType.Numeric
                            || dbfColumn.ColumnType == DbfColumnType.DoubleInBinary
                            || dbfColumn.ColumnType == DbfColumnType.IntegerInBinary)
                        {
                            customDataCategoryViewModel.Columns.Add(new ColumnViewModel(dbfColumn.ColumnName, dbfColumn.ColumnName) { LegendTitle = dbfColumn.ColumnName, Parent = customDataCategoryViewModel });
                        }
                    }
                    customDataCategoryViewModel.CanUsePieView = customDataCategoryViewModel.Columns.Count >= 2;
                    mapModel.CustomDataFeatureLayer = shapeFileFeatureLayer;
                }
                else
                {
                    MessageBox.Show("The shapefile must be polygon type, please try another one.", "Warning");
                }
            }
        }
        private bool IsMultiPointLayer(FeatureLayer queryingFeatureLayer)
        {
            bool result = false;

            ShapeFileFeatureLayer shpLayer = queryingFeatureLayer as ShapeFileFeatureLayer;

            if (shpLayer != null)
            {
                result = shpLayer.GetShapeFileType() == ShapeFileType.Multipoint;
            }

            return(result);
        }
        private void CustomDataSelector_FileSelected(string pathFileName)
        {
            ShapeFileFeatureLayer featureLayer = new ShapeFileFeatureLayer(pathFileName);

            featureLayer.Open();
            if (featureLayer.GetShapeFileType() == ShapeFileType.Polygon)
            {
                AddStyleSelectors(featureLayer);
                OnCustomDataSelected(new DataSelectedCustomDataSelectorUserControlEventArgs(featureLayer));
            }
            else
            {
                MessageBox.Show("The shape file must be polygon type, please try another one.", "Warning");
            }
        }
        protected override SimpleShapeType GetFeatureSimpleShapeTypeCore(FeatureLayer featureLayer)
        {
            SimpleShapeType       result = SimpleShapeType.Unknown;
            ShapeFileFeatureLayer shapeFileFeatureLayer = featureLayer as ShapeFileFeatureLayer;
            bool isDataSourceAvailable = DataSourceResolveTool.IsDataSourceAvailable(featureLayer);

            if (shapeFileFeatureLayer != null && isDataSourceAvailable)
            {
                ShapeFileType shapeFileType = ShapeFileType.Null;
                shapeFileFeatureLayer.SafeProcess(()
                                                  => shapeFileType = shapeFileFeatureLayer.GetShapeFileType());

                switch (shapeFileType)
                {
                case ShapeFileType.Point:
                case ShapeFileType.PointZ:
                case ShapeFileType.Multipoint:
                case ShapeFileType.PointM:
                case ShapeFileType.MultipointM:
                    result = SimpleShapeType.Point;
                    break;

                case ShapeFileType.Polyline:
                case ShapeFileType.PolylineZ:
                case ShapeFileType.PolylineM:
                case ShapeFileType.Multipatch:
                    result = SimpleShapeType.Line;
                    break;

                case ShapeFileType.Polygon:
                case ShapeFileType.PolygonM:
                case ShapeFileType.PolygonZ:
                    result = SimpleShapeType.Area;
                    break;
                }
            }

            return(result);
        }
        private void BrowseCustomDataClick(object sender, RoutedEventArgs e)
        {
            CustomDataCategoryViewModel customDataCategoryViewModel = ((FrameworkElement)sender).DataContext as CustomDataCategoryViewModel;
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "Shape File(*.shp)|*.shp";
            if (openFileDialog.ShowDialog().GetValueOrDefault())
            {
                ShapeFileFeatureLayer shapeFileFeatureLayer = new ShapeFileFeatureLayer(openFileDialog.FileName);
                shapeFileFeatureLayer.Open();

                if (shapeFileFeatureLayer.GetShapeFileType() == ShapeFileType.Polygon)
                {
                    customDataCategoryViewModel.CustomDataFilePathName = openFileDialog.FileName;
                    customDataCategoryViewModel.Columns.Clear();

                    foreach (DbfColumn dbfColumn in shapeFileFeatureLayer.FeatureSource.GetColumns().OfType <DbfColumn>())
                    {
                        if (dbfColumn.ColumnType == DbfColumnType.Float ||
                            dbfColumn.ColumnType == DbfColumnType.Numeric ||
                            dbfColumn.ColumnType == DbfColumnType.DoubleInBinary ||
                            dbfColumn.ColumnType == DbfColumnType.IntegerInBinary)
                        {
                            customDataCategoryViewModel.Columns.Add(new ColumnViewModel(dbfColumn.ColumnName, dbfColumn.ColumnName)
                            {
                                LegendTitle = dbfColumn.ColumnName, Parent = customDataCategoryViewModel
                            });
                        }
                    }
                    customDataCategoryViewModel.CanUsePieView = customDataCategoryViewModel.Columns.Count >= 2;
                    mapModel.CustomDataFeatureLayer           = shapeFileFeatureLayer;
                }
                else
                {
                    MessageBox.Show("The shapefile must be polygon type, please try another one.", "Warning");
                }
            }
        }
        private static void CreateIndexFile(string idxPathFileName, string sourceShapeFilePath)
        {
            ShapeFileFeatureLayer sourceLayer = new ShapeFileFeatureLayer(sourceShapeFilePath);

            sourceLayer.RequireIndex = false;
            ShapeFileType shapeFileType = ShapeFileType.Null;

            sourceLayer.SafeProcess(() =>
            {
                shapeFileType = sourceLayer.GetShapeFileType();
            });
            //sourceLayer.Open();
            //ShapeFileType shapeFileType = sourceLayer.GetShapeFileType();
            //sourceLayer.Close();

            if (shapeFileType == ShapeFileType.Point || shapeFileType == ShapeFileType.PointZ || shapeFileType == ShapeFileType.PointM)
            {
                RtreeSpatialIndex.CreatePointSpatialIndex(idxPathFileName, RtreeSpatialIndexPageSize.EightKilobytes, RtreeSpatialIndexDataFormat.Float);
            }
            else
            {
                RtreeSpatialIndex.CreateRectangleSpatialIndex(idxPathFileName, RtreeSpatialIndexPageSize.EightKilobytes, RtreeSpatialIndexDataFormat.Float);
            }
        }
예제 #7
0
        void AddLayers()
        {
            var colors = new List <Color>
            {
                Color.Red,
                Color.Blue,
                Color.Yellow,
                Color.Green,
                Color.Brown,
                Color.Orange,
                Color.Purple
            };

            string[]            fnames  = GetShapefiles();
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.SetTitle("Select Shape File?");
            builder.SetItems(fnames, (sender, args) =>
            {
                if (fnames[args.Which] != null)
                {
                    //  Toast.MakeText( this , "Choose existing Service picked" +  fnames [args.Which], ToastLength.Short).Show();
                    string layername             = fnames[args.Which];
                    ShapeFileFeatureLayer nLayer = new ShapeFileFeatureLayer(System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).ToString(), layername), ShapeFileReadWriteMode.ReadOnly);
                    nLayer.RequireIndex          = false;
                    nLayer.Open();

                    if (nLayer.GetShapeFileType() == ShapeFileType.Point)
                    {
                        nLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle   = PointStyles.CreateSimplePointStyle(PointSymbolType.Circle, GeoColor.StandardColors.Red, GeoColor.StandardColors.Orange, 2);
                        nLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                    }
                    else if (nLayer.GetShapeFileType() == ShapeFileType.Polyline)
                    {
                        nLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle    = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.LightPink, 2, GeoColor.StandardColors.Black, 0, false);
                        nLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                    }
                    else if (nLayer.GetShapeFileType() == ShapeFileType.Polygon)

                    {
                        nLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(
                            GeoColor.FromArgb(100, GeoColor.StandardColors.LightYellow), GeoColor.StandardColors.Blue);
                    }
                    var v           = nLayer.QueryTools.GetColumns();
                    string[] fields = new string[v.Count];
                    //for (int i = 0; i<v.Count ; ++i)
                    int i = 0;
                    foreach (FeatureSourceColumn c in v)
                    {
                        fields[i] = c.ColumnName;
                        i++;
                    }
                    AlertDialog.Builder bld = new AlertDialog.Builder(this);
                    bld.SetTitle("Select labelling field?");
                    bld.SetItems(fields, (senders, argss) =>
                    {
                        if (fields[argss.Which] != null)
                        {
                            string d = fields[argss.Which].ToString();
                            if (nLayer.GetShapeFileType() == ShapeFileType.Polyline)
                            {
                                nLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.LocalRoad1(fields[argss.Which]);
                            }
                            else
                            {
                                nLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = new TextStyle(fields[argss.Which], new GeoFont("Arail", 9, DrawingFontStyles.Bold), new GeoSolidBrush(GeoColor.SimpleColors.Black));
                            }
                            nLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                            nLayer.Close();
                            nLayer.FeatureSource.Projection = proj4;
                            LayerOverlay lOverlay           = new LayerOverlay();
                            lOverlay.Layers.Add(layername, nLayer);
                            androidMap.Overlays.Add(layername, lOverlay);
                            androidMap.Refresh();
                        }
                    });
                    bld.Create().Show();
                }
                else if (fnames[args.Which] == null)
                {
                    Toast.MakeText(this, "Cancel picked", ToastLength.Short).Show();
                    //How to close dialog Here
                }
            });
            builder.Create().Show();
        }
        private void Refresh()
        {
            Dictionary <string, object> information = new Dictionary <string, object>();

            targetFeatureLayer.SafeProcess(() =>
            {
                string fileName = targetFeatureLayer.ShapePathFilename.Replace('/', '\\');
                information.Add("File Name", fileName);
                information.Add("File Size", string.Format("{0} bytes", new FileInfo(targetFeatureLayer.ShapePathFilename).Length));

                string indexPathFileName = targetFeatureLayer.IndexPathFilename.Replace('/', '\\');
                information.Add("Index File", indexPathFileName);
                information.Add("ShapeFile Type", targetFeatureLayer.GetShapeFileType().ToString());
                information.Add("Layer Name", targetFeatureLayer.Name);
                information.Add("Columns Count", targetFeatureLayer.QueryTools.GetColumns().Count.ToString());
                information.Add("Rows Count", targetFeatureLayer.GetRecordCount().ToString());


                if (targetFeatureLayer.HasBoundingBox)
                {
                    RectangleShape boundingBox = targetFeatureLayer.GetBoundingBox();
                    information.Add("Upper Left X:", boundingBox.UpperLeftPoint.X.ToString("N4"));
                    information.Add("Upper Left Y:", boundingBox.UpperLeftPoint.Y.ToString("N4"));
                    information.Add("Lower Right X:", boundingBox.LowerRightPoint.X.ToString("N4"));
                    information.Add("Lower Right Y:", boundingBox.LowerRightPoint.Y.ToString("N4"));
                }
                else
                {
                    information.Add("Upper Left X:", double.NaN.ToString());
                    information.Add("Upper Left Y:", double.NaN.ToString());
                    information.Add("Lower Right X:", double.NaN.ToString());
                    information.Add("Lower Right Y:", double.NaN.ToString());
                }

                if (!targetFeatureLayer.Name.Equals("TempLayer"))
                {
                    information.Add("Encoding", GetAllEncodings());
                    selectedEncoding = targetFeatureLayer.Encoding;
                    targetFeatureLayer.SafeProcess(() =>
                    {
                        columns.Add(PleaseSelectText, PleaseSelectText);
                        foreach (var item in targetFeatureLayer.FeatureSource.GetColumns())
                        {
                            columns.Add(item.ColumnName, targetFeatureLayer.FeatureSource.GetColumnAlias(item.ColumnName));
                        }

                        information.Add("Feature ID Column", columns);
                        if (string.IsNullOrEmpty(FeatureIDColumn) && columns.Count > 0)
                        {
                            FeatureIDColumnAlias = columns.FirstOrDefault();
                        }

                        if (!string.IsNullOrEmpty(FeatureIDColumn) && columns.Count > 0)
                        {
                            FeatureIDColumnAlias = columns.FirstOrDefault(c => c.Key == FeatureIDColumn);
                        }
                    });
                }
            });

            LayerInformation = information;
        }