Exemplo n.º 1
0
        /// <summary>
        /// Disable map drawing after a shape is drawn
        /// </summary>
        private async void OnShapeDrawn(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            // Disable drawing mode and clear the drawing layer
            mapView.TrackOverlay.TrackMode = TrackMode.None;
            mapView.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();

            // Validate shape size to avoid queries that are too large
            // Maximum length of a line is 10km
            // Maximum area of a polygon is 10km^2
            if (e.TrackShape.GetWellKnownType() == WellKnownType.Polygon)
            {
                if (((PolygonShape)e.TrackShape).GetArea(GeographyUnit.Meter, AreaUnit.SquareKilometers) > 5)
                {
                    await DisplayAlert("Error", "Please draw a smaller polygon (limit: 5km^2)", "OK");

                    return;
                }
            }
            else if (e.TrackShape.GetWellKnownType() == WellKnownType.Line)
            {
                if (((LineShape)e.TrackShape).GetLength(GeographyUnit.Meter, DistanceUnit.Kilometer) > 5)
                {
                    await DisplayAlert("Alert", "Please draw a shorter line (limit: 5km)", "OK");

                    return;
                }
            }

            // Get elevation data for the drawn shape and update the UI
            await PerformElevationQuery(e.TrackShape);
        }
        void winformsMap1_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            RectangleShape rectangleShape = (RectangleShape)e.TrackShape;

            ShapeFileFeatureLayer worldLayer = (ShapeFileFeatureLayer)winformsMap1.FindFeatureLayer("WorldLayer");
            InMemoryFeatureLayer  spatialQueryResultLayer = (InMemoryFeatureLayer)winformsMap1.FindFeatureLayer("SpatialQueryResultLayer");

            //Spatial query to find the features intersecting the rectangle from the track rectangle.
            Collection <Feature> spatialQueryResults;

            worldLayer.Open();
            spatialQueryResults = worldLayer.QueryTools.GetFeaturesIntersecting(rectangleShape, ReturningColumnsType.NoColumns);
            worldLayer.Close();

            //Adds the selected features to the InMemoryfeatureLayer
            spatialQueryResultLayer.Open();
            spatialQueryResultLayer.EditTools.BeginTransaction();
            spatialQueryResultLayer.InternalFeatures.Clear();
            foreach (Feature feature in spatialQueryResults)
            {
                spatialQueryResultLayer.EditTools.Add(feature);
            }
            spatialQueryResultLayer.EditTools.CommitTransaction();
            spatialQueryResultLayer.Close();

            //Refreshes the layers to show new result.
            winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();
            winformsMap1.Refresh(winformsMap1.TrackOverlay);
            winformsMap1.Refresh(winformsMap1.Overlays["SpatialQueryResultOverlay"]);
        }
Exemplo n.º 3
0
 private void TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     //Set to invisible the groupbox with dynamic info after ending the tracking
     groupBoxInfo.Visible = false;
     //Clears the Shapes from TrackOverlay.
     winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();
 }
        protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            if (FileLinkable && (tempBaseShape == null || tempBaseShape.GetWellKnownText() != e.TrackShape.GetWellKnownText()))
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Multiselect = false;
                Feature tempFeature = TrackShapeLayer.InternalFeatures.FirstOrDefault(f => f.GetWellKnownText().Equals(e.TrackShape.GetWellKnownText()));
                if (openFileDialog.ShowDialog().GetValueOrDefault())
                {
                    tempBaseShape = e.TrackShape;
                    SetLinkFileName(tempFeature, openFileDialog.FileName);
                }
                else
                {
                    TrackShapeLayer.InternalFeatures.Remove(tempFeature);
                }
                SetDefaultColumnValue(AnnotaionStyleType.FileLinkStyle);
            }
            else
            {
                SetDefaultColumnValue();
            }

            var lastFeature = TrackShapeLayer.InternalFeatures.LastOrDefault();

            if (lastFeature != null)
            {
                lastFeature.Id = NewFeatureName();
            }
            GisEditor.UIManager.BeginRefreshPlugins(new RefreshArgs(this, RefreshArgsDescription.OnTrackEndedDescription));
            base.OnTrackEnded(e);
        }
Exemplo n.º 5
0
        private void trackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            //Gets the shape from the tracked polygon. The tracked shapes can be found in the TrackShapeLayer of the TrackOverlay.
            AreaBaseShape areaBaseShape = (AreaBaseShape)winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures[0].GetShape();

            //Gets the features of the counties that are completely within the tracked polygon.
            LayerOverlay          layerOverlay          = (LayerOverlay)winformsMap1.Overlays["LayerOverlay"];
            ShapeFileFeatureLayer shapeFileFeatureLayer = (ShapeFileFeatureLayer)layerOverlay.Layers["CountiesLayer"];
            Collection <Feature>  features = shapeFileFeatureLayer.QueryTools.GetFeaturesWithin(areaBaseShape, ReturningColumnsType.NoColumns);

            //Adds the shape of the selected counties features to AreaBaseShape collection to perform the Union.
            Collection <AreaBaseShape> areaBaseShapes = new Collection <AreaBaseShape>();

            foreach (Feature feature in features)
            {
                areaBaseShapes.Add((AreaBaseShape)feature.GetShape());
            }
            MultipolygonShape unionMultipolygonShape = MultipolygonShape.Union(areaBaseShapes);

            //Gets the MultiPolygonShape with the inner ring(s) being the result of the Union of the selected shapes.
            MultipolygonShape resultMultiPolygonShape = areaBaseShape.GetDifference(unionMultipolygonShape);

            //Adds the result to the InMemoryFeatureLayer for display on the map.
            LayerOverlay         dynamicOverlay       = (LayerOverlay)winformsMap1.Overlays["DynamicOverlay"];
            InMemoryFeatureLayer inMemoryFeatureLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["DynamicLayer"];

            inMemoryFeatureLayer.InternalFeatures.Clear();

            inMemoryFeatureLayer.InternalFeatures.Add(new Feature(resultMultiPolygonShape));

            //We clear the tracked shape so that it does not show on the map.
            winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();

            winformsMap1.Refresh(winformsMap1.Overlays["DynamicOverlay"]);
        }
Exemplo n.º 6
0
        private void TrackInteractiveOverlayOnTrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs args)
        {
            loadingView.StartAnimating();
            Task.Factory.StartNew(() =>
            {
                MultipolygonShape resultShape = PolygonShape.Union(iOSMap.TrackOverlay.TrackShapeLayer.InternalFeatures);

                ShapeFileFeatureLayer earthquakePointLayer = (ShapeFileFeatureLayer)Global.HighLightOverlay.Layers["EarthquakePointLayer"];

                earthquakePointLayer.Open();
                Collection <Feature> features = earthquakePointLayer.FeatureSource.GetFeaturesWithinDistanceOf(new Feature(resultShape), iOSMap.MapUnit, DistanceUnit.Meter, 0.0001, ReturningColumnsType.AllColumns);

                Global.QueriedFeatures.Clear();

                foreach (Feature feature in features)
                {
                    Global.QueriedFeatures.Add(feature);
                }

                Global.FilterSelectedEarthquakeFeatures();
                InvokeOnMainThread(() =>
                {
                    Global.HighLightOverlay.Refresh();
                    loadingView.StopAnimating();
                });
            });
        }
Exemplo n.º 7
0
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            MultipolygonShape resultShape = PolygonShape.Union(Global.MapView.TrackOverlay.TrackShapeLayer.InternalFeatures);

            FeatureLayer featureLayer = earthquakePointLayer;

            if (!featureLayer.IsOpen)
            {
                featureLayer.Open();
            }
            Collection <Feature> features = featureLayer.FeatureSource.GetFeaturesWithinDistanceOf(new Feature(resultShape), Global.MapView.MapUnit, DistanceUnit.Meter, 0.0001, ReturningColumnsType.AllColumns);

            Global.BackupQueriedFeatures(features);
            Global.FilterSelectedEarthquakeFeatures(Global.GetBackupQueriedFeatures());
        }
Exemplo n.º 8
0
        /// <summary>
        /// Disable drawing mode and draw the new query shape on the map when finished drawing a shape
        /// </summary>
        private void OnShapeDrawn(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            // Disable drawing mode and clear the drawing layer
            mapView.TrackOverlay.TrackMode = TrackMode.None;
            mapView.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();

            // Get the query shape layer from the MapView
            LayerOverlay         queriedFeaturesOverlay = (LayerOverlay)mapView.Overlays["Queried Features Overlay"];
            InMemoryFeatureLayer queryShapeFeatureLayer = (InMemoryFeatureLayer)queriedFeaturesOverlay.Layers["Query Shape Layer"];

            // Add the newly drawn shape, then redraw the overlay
            queryShapeFeatureLayer.InternalFeatures.Add(new Feature(e.TrackShape));
            queriedFeaturesOverlay.Refresh();

            PerformWorldMapsQuery();
        }
 private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     try
     {
         PolygonShape[] allPolygonFeatures = mapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.Select(f => f.GetShape()).OfType <PolygonShape>().ToArray();
         BaseShape      trackedShape       = SqlTypesGeometryHelper.Union(allPolygonFeatures);
         if (trackedShape != null)
         {
             OnQueryAreaChanged(trackedShape);
         }
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.Message);
     }
 }
        protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            base.OnTrackEnded(e);
            Vertices.Clear();

            #region Boudary Adjustment

            if (isShiftKeyDown)
            {
                MouseDownCount = 0;
            }

            #endregion

            OverlayCanvas.Children.Clear();
        }
Exemplo n.º 11
0
 private void SelectionTrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     if (SelectionOverlay.TrackMode == TrackMode.Point ||
         SelectionOverlay.TrackMode == TrackMode.Rectangle ||
         SelectionOverlay.TrackMode == TrackMode.Polygon ||
         SelectionOverlay.TrackMode == TrackMode.Circle ||
         SelectionOverlay.TrackMode == TrackMode.Line)
     {
         // Force execute all the commands's CanExecute()
         CommandManager.InvalidateRequerySuggested();
     }
     if (SelectionOverlay.FilteredLayers.Count == 0)
     {
         System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("SelectionPluginNoLayerWarningMessage"), GisEditor.LanguageManager.GetStringResource("MessageBoxWarningTitle"));
     }
 }
Exemplo n.º 12
0
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            InMemoryFeatureLayer trackShapeLayer = wpfMap.TrackOverlay.TrackShapeLayer;

            string         localFilePath;
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter = "MB Tiles Database(*.mbtiles)|*.mbtiles";
            if (saveFileDialog.ShowDialog().Value)
            {
                localFilePath = saveFileDialog.FileName.ToString();
                if (File.Exists(localFilePath))
                {
                    File.Delete(localFilePath);
                }

                PolygonShape extractingPolygon = new PolygonShape(trackShapeLayer.InternalFeatures.First().GetWellKnownBinary());

                wpfMap.TrackOverlay.TrackMode = TrackMode.None;
                pbExtractProgress.Visibility  = Visibility.Visible;
                pbExtractProgress.IsEnabled   = true;
                Task.Factory.StartNew(() =>
                {
                    ExtractTiles(extractingPolygon, localFilePath);
                    Dispatcher.Invoke(() =>
                    {
                        pbExtractProgress.IsEnabled  = false;
                        pbExtractProgress.Visibility = Visibility.Hidden;
                        trackShapeLayer.InternalFeatures.Clear();
                        wpfMap.Refresh(wpfMap.TrackOverlay);
                        wpfMap.TrackOverlay.TrackMode = TrackMode.Rectangle;

                        ThinkGeoMBTilesLayer thinkGeoMBTilesFeatureLayer = new ThinkGeoMBTilesLayer(localFilePath, new Uri(defaultJsonFilePath, UriKind.Relative));
                        thinkGeoMBTilesFeatureLayer.BitmapTileCache      = null;
                        layerOverlay.Layers.Clear();
                        layerOverlay.Layers.Add(thinkGeoMBTilesFeatureLayer);
                        chkExtractingData.IsChecked = false;
                        wpfMap.Refresh(layerOverlay);
                    });
                });
            }
            else
            {
                trackShapeLayer.InternalFeatures.Clear();
            }
        }
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            Feature queryFeature = UnionTrackedShapes();

            if (queryFeature == null)
            {
                return;
            }

            activeStyleLayer.FeatureSource.Open();
            Collection <Feature> features = activeStyleLayer.FeatureSource.GetFeaturesWithinDistanceOf(queryFeature, map.MapUnit, DistanceUnit.Meter, 0.0001, ReturningColumnsType.AllColumns);

            earthquakeItems.Clear();
            foreach (Feature feature in features)
            {
                earthquakeItems.Add(new EarthquakeItem(feature));
            }

            FilterEarthquake();
        }
Exemplo n.º 14
0
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            InMemoryFeatureLayer trackShapeLayer = Map1.TrackOverlay.TrackShapeLayer;

            string         localFilePath;
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter = "MB Tiles Database(*.mbtiles)|*.mbtiles";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                localFilePath = saveFileDialog.FileName.ToString();
                if (File.Exists(localFilePath))
                {
                    File.Delete(localFilePath);
                }

                PolygonShape extractingPolygon = new PolygonShape(trackShapeLayer.InternalFeatures.First().GetWellKnownBinary());

                Map1.TrackOverlay.TrackMode = TrackMode.None;
                ExtractTiles(extractingPolygon, localFilePath);
                trackShapeLayer.InternalFeatures.Clear();
                Map1.Refresh(Map1.TrackOverlay);
                Map1.TrackOverlay.TrackMode = TrackMode.Rectangle;

                ThinkGeoMBTilesLayer thinkGeoMBTilesFeatureLayer = new ThinkGeoMBTilesLayer(localFilePath, new Uri(defaultJsonFilePath, UriKind.Relative));
                thinkGeoMBTilesFeatureLayer.BitmapTileCache = null;
                layerOverlay.Layers.Clear();
                layerOverlay.Layers.Add(thinkGeoMBTilesFeatureLayer);
                chkExtractingData.Checked = false;
                Map1.Refresh(layerOverlay);
            }
            else
            {
                trackShapeLayer.InternalFeatures.Clear();
            }
        }
Exemplo n.º 15
0
        protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            textBlock.Visibility = Visibility.Collapsed;
            base.OnTrackEnded(e);
            bool hasArea = MeasureLastFeatureInLayer();

            if (hasArea)
            {
                var lastTrackingFeature = TrackShapeLayer.InternalFeatures.LastOrDefault();
                if (lastTrackingFeature != null)
                {
                    lastTrackingFeature.Id = NewMeasurementName(lastTrackingFeature.ColumnValues["Result"]);

                    lastTrackingFeature.ColumnValues["DisplayName"] = lastTrackingFeature.Id;
                    var mapShape = GetMapShape(lastTrackingFeature);

                    ShapeLayer.MapShapes.Add(lastTrackingFeature.Id, mapShape);
                }

                TakeSnapshot();
                GisEditor.UIManager.BeginRefreshPlugins(new RefreshArgs(this, RefreshArgsDescription.OnTrackEndedDescription));
            }
            TrackShapeLayer.InternalFeatures.Clear();
        }
 protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     isTracking = false;
     base.OnTrackEnded(e);
 }
Exemplo n.º 17
0
 /// <summary>
 /// Performs the spatial query when a new polygon is drawn
 /// </summary>
 private void OnPolygonDrawn(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     GetFeaturesWithin((PolygonShape)e.TrackShape);
 }
        protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            isTracking = false;
            base.OnTrackEnded(e);

            if (TrackShapeLayer.InternalFeatures.Count != 0)
            {
                Collection <Feature>          features  = new Collection <Feature>();
                Collection <ErrorFeatureInfo> errorInfo = new Collection <ErrorFeatureInfo>();
                Dictionary <string, Collection <Feature> > currentSelectedFeatures = new Dictionary <string, Collection <Feature> >();
                foreach (var trackedFeature in TrackShapeLayer.InternalFeatures)
                {
                    Feature currentTrackedFeature = trackedFeature;

                    if (currentTrackedFeature.CanMakeValid && !currentTrackedFeature.IsValid())
                    {
                        currentTrackedFeature = currentTrackedFeature.MakeValid();
                    }
                    if (currentTrackedFeature.GetShape() != null && currentTrackedFeature.GetWellKnownType() == WellKnownType.Point)
                    {
                        PointShape trackedPoint = (PointShape)currentTrackedFeature.GetShape();
                        double     resolution   = MapArguments.CurrentResolution;
                        currentTrackedFeature = new Feature(new RectangleShape(trackedPoint.X - tolerance * resolution,
                                                                               trackedPoint.Y + tolerance * resolution,
                                                                               trackedPoint.X + tolerance * resolution,
                                                                               trackedPoint.Y - tolerance * resolution).GetWellKnownBinary(), currentTrackedFeature.Id);
                    }
                    else if (currentTrackedFeature.GetShape() != null && currentTrackedFeature.GetWellKnownType() == WellKnownType.Line)
                    {
                        var toleranceDistance = MapUtils.GetResolutionFromScale(MapArguments.CurrentScale, GeographyUnit.Meter) * tolerance;
                        try
                        {
                            currentTrackedFeature = currentTrackedFeature.Buffer(toleranceDistance, MapArguments.MapUnit, DistanceUnit.Meter);
                        }
                        catch { }
                    }


                    foreach (var queryingFeatureLayer in TargetFeatureLayers.Where(l => FilteredLayers.Contains(l)))
                    {
                        IEnumerable <Feature> queriedFeatures = new Collection <Feature>();
                        if (currentTrackedFeature.GetShape() != null)
                        {
                            bool isClosed = false;
                            Monitor.Enter(queryingFeatureLayer);
                            if (!queryingFeatureLayer.IsOpen)
                            {
                                isClosed = true;
                                queryingFeatureLayer.Open();
                            }

                            try
                            {
                                Func <Feature, bool, Func <Feature, bool>, IEnumerable <Feature> > processSpatialQueryFunc
                                    = new Func <Feature, bool, Func <Feature, bool>, IEnumerable <Feature> >((tmpTrackedFeature, filter, spatialQueryFunc) =>
                                {
                                    var bbox = tmpTrackedFeature.GetBoundingBox();
                                    Collection <Feature> featuresInsideOfBBox = null;

                                    if (filter)
                                    {
                                        featuresInsideOfBBox = queryingFeatureLayer.QueryTools.GetFeaturesIntersecting(bbox, queryingFeatureLayer.GetDistinctColumnNames());
                                    }
                                    else
                                    {
                                        featuresInsideOfBBox = queryingFeatureLayer.QueryTools.GetAllFeatures(queryingFeatureLayer.GetDistinctColumnNames());
                                    }

                                    var featuresToProcessing = featuresInsideOfBBox.AsParallel().Where(featureToValidate =>
                                    {
                                        if (featureToValidate.IsValid())
                                        {
                                            return(true);
                                        }
                                        else
                                        {
                                            errorInfo.Add(new ErrorFeatureInfo {
                                                FeatureId = featureToValidate.Id, Message = "Invalid feature"
                                            });
                                            return(false);
                                        }
                                    }).ToArray();

                                    var resultQueriedFeatures = new Collection <Feature>();
                                    foreach (var tmpFeature in featuresToProcessing)
                                    {
                                        var validFeature = MakeFeatureValidate(tmpFeature);

                                        if (spatialQueryFunc(validFeature))
                                        {
                                            resultQueriedFeatures.Add(validFeature);
                                        }
                                    }

                                    return(resultQueriedFeatures.GetVisibleFeatures(queryingFeatureLayer.ZoomLevelSet, MapArguments.CurrentExtent, MapArguments.ActualWidth, MapArguments.MapUnit));
                                });

                                currentTrackedFeature = currentTrackedFeature.MakeValid();

                                switch (spatialQueryMode)
                                {
                                case SpatialQueryMode.Touching:
                                    queriedFeatures = processSpatialQueryFunc(currentTrackedFeature, true, tmpFeature
                                                                              => currentTrackedFeature.GetShape().Intersects(tmpFeature));
                                    break;

                                case SpatialQueryMode.CompletelyContained:
                                    queriedFeatures = processSpatialQueryFunc(currentTrackedFeature, true, tmpFeature
                                                                              => currentTrackedFeature.GetShape().Contains(tmpFeature));
                                    break;

                                case SpatialQueryMode.Intersecting:
                                    queriedFeatures = processSpatialQueryFunc(currentTrackedFeature, true, tmpFeature
                                                                              => currentTrackedFeature.GetShape().Intersects(tmpFeature));
                                    break;

                                case SpatialQueryMode.Nearest:
                                    queriedFeatures = queryingFeatureLayer.QueryTools.GetFeaturesNearestTo(currentTrackedFeature, GeographyUnit.DecimalDegree, 1, queryingFeatureLayer.GetDistinctColumnNames());
                                    break;

                                case SpatialQueryMode.NotTouching:
                                    queriedFeatures = processSpatialQueryFunc(currentTrackedFeature, false, tmpFeature
                                                                              => tmpFeature.GetShape().IsDisjointed(currentTrackedFeature));
                                    break;
                                }
                            }
                            catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message, "Invalid Features", MessageBoxButtons.OK, MessageBoxIcon.Error); }

                            if (isClosed)
                            {
                                queryingFeatureLayer.Close();
                            }

                            Monitor.Exit(queryingFeatureLayer);

                            foreach (var feature in queriedFeatures)
                            {
                                feature.Tag = queryingFeatureLayer;
                                features.Add(feature);
                            }
                        }
                    }
                }

                if (errorInfo.Count > 0)
                {
                    System.Windows.Forms.MessageBox.Show(Resources.InvalidFeatures, "Invalid Features", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                TrackShapeLayer.InternalFeatures.Clear();
                features = new Collection <Feature>(RenameFeatures(features).GroupBy(f => f.Id).Select(g => g.FirstOrDefault()).Where(f => f != null).ToList());
                switch (selectionMode)
                {
                case SelectionMode.None:
                    UsingFeatureLayer(HighlightFeatureLayer, (layer) =>
                    {
                        layer.InternalFeatures.Clear();
                        foreach (var feature in features)
                        {
                            //if (!feature.ColumnValues.ContainsKey(featureIdColumnName))
                            //{

                            //    //string featureIdColumn = LayerPluginHelper.GetFeatureIdColumn(ownerFeatureLayer);
                            //    //if (feature.ColumnValues.ContainsKey(featureIdColumn))
                            //    //{
                            //    //    header = feature.ColumnValues[featureIdColumn];
                            //    //}

                            //    string featureId = feature.Id;

                            //    if (featureId.Contains(FeatureIdSeparator))
                            //    {
                            //        featureId = featureId.Split(new string[] { FeatureIdSeparator }, StringSplitOptions.RemoveEmptyEntries)[0];
                            //    }

                            //    feature.ColumnValues.Add(featureIdColumnName, featureId);
                            //}
                            layer.EditTools.Add(feature);
                        }
                    });
                    break;

                case SelectionMode.Added:
                    UsingFeatureLayer(HighlightFeatureLayer, (layer) =>
                    {
                        ToggleExistingFeatures(features);
                        foreach (var feature in features)
                        {
                            if (!layer.InternalFeatures.Contains(feature))
                            {
                                layer.EditTools.Add(feature);
                            }
                        }
                    });
                    break;

                case SelectionMode.Subtract:
                    UsingFeatureLayer(HighlightFeatureLayer, (layer) =>
                    {
                        foreach (var feature in features)
                        {
                            if (layer.InternalFeatures.Contains(feature))
                            {
                                layer.EditTools.Delete(feature.Id);
                            }
                        }
                    });
                    break;
                }
                this.selectionMode = SelectionMode.None;

                OnFeatureSelected(this, new EventArgs());
            }
        }
Exemplo n.º 19
0
 private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     try
     {
         PolygonShape[] allPolygonFeatures = mapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.Select(f => f.GetShape()).OfType<PolygonShape>().ToArray();
         BaseShape trackedShape = SqlTypesGeometryHelper.Union(allPolygonFeatures);
         if (trackedShape != null)
         {
             OnQueryAreaChanged(trackedShape);
         }
     }
     catch (Exception ex)
     {
         Debug.WriteLine(ex.Message);
     }
 }
 private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     currentTopologyTestCase.AddInputShape(e.TrackShape);
 }
 protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     textBlock.Visibility = Visibility.Collapsed;
     base.OnTrackEnded(e);
 }
Exemplo n.º 22
0
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            if (mapModel.MapControl.TrackOverlay.TrackMode == TrackMode.Polygon)
            {
                PolygonShape polygonShape = e.TrackShape as PolygonShape;
                if (polygonShape != null)
                {
                    double area     = -1;
                    string areaUnit = "sq.m.";
                    switch (SelectedUnitSystem)
                    {
                    case UnitSystem.Metric:
                        areaUnit = "sq.m.";
                        area     = polygonShape.GetArea(GeographyUnit.Meter, AreaUnit.SquareMeters);
                        break;

                    case UnitSystem.Imperial:
                        areaUnit = "ac.";
                        area     = polygonShape.GetArea(GeographyUnit.Meter, AreaUnit.Acres);
                        break;
                    }
                    if (area > 0)
                    {
                        string content = string.Format(CultureInfo.InvariantCulture, "Area: {0} {1}", area.ToString("N1"), areaUnit);
                        ShowPopup(new PointShape(polygonShape.OuterRing.Vertices[polygonShape.OuterRing.Vertices.Count - 2]), content);
                    }
                    mapModel.MapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.LastOrDefault().Tag = "Measure";
                }
            }

            if (mapModel.MapControl.TrackOverlay.TrackMode == TrackMode.Line)
            {
                string    unit      = string.Empty;
                LineShape lineShape = e.TrackShape as LineShape;
                if (lineShape != null)
                {
                    double lenth = 0;
                    if (SelectedUnitSystem == UnitSystem.Metric)
                    {
                        lenth = lineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Meter);
                        unit  = "m";
                        if (lenth >= 1000)
                        {
                            unit  = "km";
                            lenth = Math.Round(lenth / 1000d, 1, MidpointRounding.AwayFromZero);
                        }
                    }
                    else if (SelectedUnitSystem == UnitSystem.Imperial)
                    {
                        lenth = lineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Feet);
                        unit  = "ft";
                        if (lenth >= 5280)
                        {
                            unit  = "mi";
                            lenth = Math.Round(lenth / 5280d, 1, MidpointRounding.AwayFromZero);
                        }
                    }

                    string lengthString = lenth.ToString("N1");
                    string content      = string.Format(CultureInfo.InvariantCulture, "Total Length: {0} {1}", lengthString, unit);
                    ShowPopup(new PointShape(lineShape.Vertices[lineShape.Vertices.Count - 1]), content);
                    mapModel.MapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.LastOrDefault().Tag = "Measure";
                }
            }
        }
 protected override void OnTrackEnded(TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     textBlock.Visibility = Visibility.Collapsed;
     base.OnTrackEnded(e);
 }
        private void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            if (mapModel.MapControl.TrackOverlay.TrackMode == TrackMode.Polygon)
            {
                PolygonShape polygonShape = e.TrackShape as PolygonShape;
                if (polygonShape != null)
                {
                    double area = -1;
                    string areaUnit = "sq.m.";
                    switch (SelectedUnitSystem)
                    {
                        case UnitSystem.Metric:
                            areaUnit = "sq.m.";
                            area = polygonShape.GetArea(GeographyUnit.Meter, AreaUnit.SquareMeters);
                            break;

                        case UnitSystem.Imperial:
                            areaUnit = "ac.";
                            area = polygonShape.GetArea(GeographyUnit.Meter, AreaUnit.Acres);
                            break;
                    }
                    if (area > 0)
                    {
                        string content = string.Format(CultureInfo.InvariantCulture, "Area: {0} {1}", area.ToString("N1"), areaUnit);
                        ShowPopup(new PointShape(polygonShape.OuterRing.Vertices[polygonShape.OuterRing.Vertices.Count - 2]), content);
                    }
                    mapModel.MapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.LastOrDefault().Tag = "Measure";
                }
            }

            if (mapModel.MapControl.TrackOverlay.TrackMode == TrackMode.Line)
            {
                string unit = string.Empty;
                LineShape lineShape = e.TrackShape as LineShape;
                if (lineShape != null)
                {
                    double lenth = 0;
                    if (SelectedUnitSystem == UnitSystem.Metric)
                    {
                        lenth = lineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Meter);
                        unit = "m";
                        if (lenth >= 1000)
                        {
                            unit = "km";
                            lenth = Math.Round(lenth / 1000d, 1, MidpointRounding.AwayFromZero);
                        }
                    }
                    else if (SelectedUnitSystem == UnitSystem.Imperial)
                    {
                        lenth = lineShape.GetLength(GeographyUnit.Meter, DistanceUnit.Feet);
                        unit = "ft";
                        if (lenth >= 5280)
                        {
                            unit = "mi";
                            lenth = Math.Round(lenth / 5280d, 1, MidpointRounding.AwayFromZero);
                        }
                    }

                    string lengthString = lenth.ToString("N1");
                    string content = string.Format(CultureInfo.InvariantCulture, "Total Length: {0} {1}", lengthString, unit);
                    ShowPopup(new PointShape(lineShape.Vertices[lineShape.Vertices.Count - 1]), content);
                    mapModel.MapControl.TrackOverlay.TrackShapeLayer.InternalFeatures.LastOrDefault().Tag = "Measure";
                }
            }
        }
Exemplo n.º 25
0
        private void AnnotationOverlay_SelectionFinished(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
        {
            bool isShiftKeyDown = Keyboard.Modifiers == ModifierKeys.Shift;

            if (!isShiftKeyDown)
            {
                AnnotationHelper.CommitEdit();
            }

            var selectionArea = e.TrackShape.GetBoundingBox();

            CurrentAnnotationOverlay.TrackShapeLayer.SafeProcess(() =>
            {
                var tmpFeatureIdsToExclude = new Collection <string>();
                foreach (var id in CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude)
                {
                    tmpFeatureIdsToExclude.Add(id);
                }
                CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude.Clear();

                var selectedFeatures = CurrentAnnotationOverlay.TrackShapeLayer.QueryTools.GetFeaturesInsideBoundingBox(selectionArea, CurrentAnnotationOverlay.TrackShapeLayer.GetDistinctColumnNames());

                foreach (var id in tmpFeatureIdsToExclude)
                {
                    CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude.Add(id);
                }

                bool needMarkerOverlayRefreshed = false;
                foreach (var selectedFeature in selectedFeatures)
                {
                    bool isEditing = true;
                    if (!CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude.Contains(selectedFeature.Id))
                    {
                        CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude.Add(selectedFeature.Id);
                    }
                    else
                    {
                        isEditing = false;
                        if (isShiftKeyDown)
                        {
                            CurrentAnnotationOverlay.TrackShapeLayer.FeatureIdsToExclude.Remove(selectedFeature.Id);
                            if (CurrentEditOverlay.EditShapesLayer.InternalFeatures.Contains(selectedFeature.Id))
                            {
                                CurrentEditOverlay.EditShapesLayer.InternalFeatures.Remove(selectedFeature.Id);
                            }
                            else if (MarkerHelper.CurrentMarkerOverlay.Markers.Contains(selectedFeature.Id))
                            {
                                MarkerHelper.CurrentMarkerOverlay.Markers.Remove(selectedFeature.Id);
                                needMarkerOverlayRefreshed = true;
                            }
                        }
                    }

                    if (needMarkerOverlayRefreshed)
                    {
                        MarkerHelper.CurrentMarkerOverlay.Refresh();
                    }

                    if (isEditing)
                    {
                        AnnotationHelper.SetAnnotationToEditMode(selectedFeature);
                    }
                }
            });

            CurrentEditOverlay.CalculateAllControlPoints();
            CurrentEditOverlay.Refresh();
            CurrentAnnotationOverlay.Refresh();
            SyncUIState();

            TakeSnapshot();
        }
Exemplo n.º 26
0
 private void AnnotationOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
     SyncUIState();
     TakeSnapshot();
 }