ArcGISRuntime.Samples.Desktop.Pages.SnapToGeometryPage.Snap C# (CSharp) Method

Snap() private method

現在のマウス位置(座標値)でスナップ処理を実行
private Snap ( Esri mapPoint, double mapResolution ) : void
mapPoint Esri
mapResolution double
return void
        private void Snap(Esri.ArcGISRuntime.Geometry.MapPoint mapPoint, double mapResolution)
        {
            if (mapPoint == null) return;

            //サンプル ポリゴンのジオメトリを取得
            var layer = (GraphicsLayer)mapView.Map.Layers["sampleDataLayer"];
            var geometry = layer.Graphics[0].Geometry;

            //スナップ許容値(距離)= 現在のマップの 1 ピクセルあたりの距離 * スナップ許容値(ピクセル数)
            var tolerance = mapResolution * this.snapToleranceByPixel;

            //スナップ対象のジオメトリの空間参照をマップの空間参照に一致
            if (mapPoint.SpatialReference.Wkid != geometry.SpatialReference.Wkid)
            {
                geometry = GeometryEngine.Project(geometry, mapPoint.SpatialReference);
            }

            //スナップ処理を実行
            SnapResult snapResult = null;
            switch(this.snapMode)
            {
                case "geometry":
                    snapResult = ExecuteSnap(mapPoint, geometry, SnapType.Vertex | SnapType.Segment, tolerance);
                    break;
                case "vertex":
                    snapResult = ExecuteSnap(mapPoint, geometry, SnapType.Vertex, tolerance);
                    break;
                case "segment":
                    snapResult = ExecuteSnap(mapPoint, geometry, SnapType.Segment, tolerance);
                    break;
            }

            //スナップ結果が存在しない場合はスナップ エフェクトを非表示
            if(snapResult == null)
            {
                this.snapOverlay.IsVisible = false;
                this.snapOverlay.Graphics[0].Geometry = null;
                return;
            }

            //スナップ エフェクトを表示
            this.snapOverlay.IsVisible = true;
            this.snapOverlay.Graphics[0].Geometry = snapResult.Result.Point;

            //スナップ エフェクトのシンボル色を頂点(赤)と線分(白)で変更
            if (snapResult.Type == SnapType.Vertex)
            {
                (this.snapOverlay.Graphics[0].Symbol as SimpleMarkerSymbol).Color = Colors.Red;
            }
            else
            {
                (this.snapOverlay.Graphics[0].Symbol as SimpleMarkerSymbol).Color = Colors.White;
            }
        }