ArcGIS API for Silverlight 实现修改地图上的工程点位置 .

ArcGIS API for Silverlight 实现修改地图上的工程点位置 .,第1张

概述[csharp] view plaincopyprint?01. #region 处理工程点点击编辑相关事件 02. 03. public Graphic editgraphics = null; //待编辑的Graphics图层 04. public Graphic oldgraphics = null; //原先Graphics图层
[csharp] vIEw plaincopyprint?01. #region 处理工程点点击编辑相关事件   02.  03.        public Graphic editgraphics = null; //待编辑的Graphics图层   04.        public Graphic oldgraphics = null; //原先Graphics图层   05.        public Symbol symbolold = null;  06.  07.        /// <summary>   08.        /// 在地图上点击编辑点处理事件   09.        /// </summary>   10.        /// <param name="sender"></param>   11.        /// <param name="e"></param>   12.        voID myMap_MouseleftbuttonDown(object sender,MousebuttonEventArgs e)  13.        {  14.            ESRI.ArcGIS.ClIEnt.Projection.WebMercator mercator = new ESRI.ArcGIS.ClIEnt.Projection.WebMercator();  15.            try  16.            {  17.                if (editgraphics != null)  18.                {  19.                    if (isedit)  20.                    {  21.                        System.windows.Point screenPoint = e.Getposition(myMap);  22.                        ESRI.ArcGIS.ClIEnt.Geometry.MapPoint mapPoint = myMap.ScreenToMap(screenPoint);  23.                        double x = Math.Round(mapPoint.X,4);  24.                        double y = Math.Round(mapPoint.Y,4);  25.                        MapPoint mp = new MapPoint(x,y);  26.                        editgraphics.Geometry = mp;  27.                    }  28.                    else  29.                    {  30.                        editgraphics = oldgraphics;  31.                    }  32.                }  33.                else  34.                {  35.  36.                }  37.            }  38.            catch (Exception)  39.            {  40.                return;  41.            }  42.        }  43.  44.        voID graphic_MouseleftbuttonDown(object sender,MousebuttonEventArgs e)  45.        {  46.            Graphic graphic = sender as Graphic;  47.            oldgraphics = graphic; //保存原先的Graphics图层   48.            isedit = true;  49.            //选工程点   50.            if (graphic != null)  51.            {  52.                //将上一个图元还原第一个图元   53.                if (symbolold != null)  54.                {  55.                    editgraphics.Symbol = symbolold;  56.                }  57.  58.                editgraphics = graphic;  59.                symbolold = editgraphics.Symbol;  60.                editgraphics.Symbol = ((SimpleMarkerSymbol)this.Findname("SimpleSymbol"));  61.  62.                ESRI.ArcGIS.ClIEnt.Geometry.MapPoint mp = (MapPoint)graphic.Geometry;  63.                ESRI.ArcGIS.ClIEnt.Projection.WebMercator mercator = new ESRI.ArcGIS.ClIEnt.Projection.WebMercator();  64.                mp = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.ClIEnt.Geometry.Geometry.normalizeCentralMerIDian(mp) as ESRI.ArcGIS.ClIEnt.Geometry.MapPoint);  65.                //打开Tab进行编辑 *** 作   66.                this.grIDTab2.WIDth = new GrIDLength(278,GrIDUnitType.Pixel);  67.                tbTip1.Text = "<<";  68.                string Title = graphic.Attributes["name"].ToString(); //工程名称   69.                this.tbProjectname.Text = Title;  70.                this.tblatitute.Text = Math.Round(mp.X,4).ToString(); //经度   71.                this.tbLongitute.Text = Math.Round(mp.Y,4).ToString(); //纬度   72.            }  73.        }  74.  75.        voID graphic_MouseleftbuttonUp(object sender,MousebuttonEventArgs e)  76.        {  77.            Graphic graphic = sender as Graphic;  78.  79.            editgraphics.Symbol = ((SimpleMarkerSymbol)this.Findname("SimpleSymbol"));  80.  81.            ESRI.ArcGIS.ClIEnt.Geometry.MapPoint mp = (MapPoint)graphic.Geometry;  82.            ESRI.ArcGIS.ClIEnt.Projection.WebMercator mercator = new ESRI.ArcGIS.ClIEnt.Projection.WebMercator();  83.            mp = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.ClIEnt.Geometry.Geometry.normalizeCentralMerIDian(mp) as ESRI.ArcGIS.ClIEnt.Geometry.MapPoint);  84.            string Title = graphic.Attributes["name"].ToString(); //工程名称   85.            this.tbProjectname.Text = Title;  86.            this.tblEditname.Text = Title;  87.            this.tblatitute.Text = Math.Round(mp.X,4).ToString(); //经度   88.            this.tbLongitute.Text = Math.Round(mp.Y,4).ToString(); //纬度   89.        }  90.  91.        voID graphic_MouseMove(object sender,MouseEventArgs e)  92.        {  93.            Graphic graphic = sender as Graphic;  94.            GrID grID = new GrID();  95.            grID.Background = new SolIDcolorBrush(colors.Blue);  96.            TextBlock msg = new TextBlock();  97.            msg.Foreground = new SolIDcolorBrush(colors.White);  98.            msg.FontSize = 13;  99.            msg.FontFamily = new FontFamily("Microsoft YaHei");  100.            msg.Text = graphic.Attributes["name"].ToString();  101.            grID.Children.Add(msg);  102.            graphic.MapTip = grID;  103.        }  104.  105.        RichTextBox rtb;  106.  107.        voID graphic_MouseRightbuttonUp(object sender,MousebuttonEventArgs e)  108.        {  109.            if (isedit)  110.            {  111.                //只有在选中点开始编辑后,才可以取消编辑   112.                RTBContextMenu menu = new RTBContextMenu(rtb,this);  113.                menu.Show(e.Getposition(LayoutRoot));  114.            }  115.            else  116.            {  117.                //什么也不执行   118.            }  119.        }  120.  121.        voID graphic_MouseRightbuttonDown(object sender,MousebuttonEventArgs e)  122.        {  123.            e.Handled = true;  124.        }  125.  126.        private voID btnModify_Click(object sender,System.windows.RoutedEventArgs e)  127.        {  128.            try  129.            {  130.                if (string.IsNullOrEmpty(this.tbProjectname.Text))  131.                {  132.                    MessageBox.Show("请先选择一个工程点!");  133.                }  134.                else  135.                {  136.                    MapPoint mp = (MapPoint)editgraphics.Geometry;  137.                    getDataSoapClIEnt clIEnt = new getDataSoapClIEnt();  138.                    clIEnt.updagepositionCompleted += new EventHandler<AsyncCompletedEventArgs>(clIEnt_updagepositionCompleted);  139.                    MapPoint mapPoint = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.ClIEnt.Geometry.Geometry.normalizeCentralMerIDian(mp) as ESRI.ArcGIS.ClIEnt.Geometry.MapPoint);  140.                    clIEnt.updagepositionAsync(this.tbProjectname.Text,Math.Round(mapPoint.X,4).ToString(),Math.Round(mapPoint.Y,4).ToString());  141.                }  142.            }  143.            catch (Exception)  144.            {  145.                MessageBox.Show("请先选择一个工程点!");  146.            }  147.  148.        }  149.  150.        voID clIEnt_updagepositionCompleted(object sender,AsyncCompletedEventArgs e)  151.        {  152.            //重新加载数据,这里需要维持地图缩放的比例   153.            ESRI.ArcGIS.ClIEnt.Projection.WebMercator mercator = new ESRI.ArcGIS.ClIEnt.Projection.WebMercator();  154.            ESRI.ArcGIS.ClIEnt.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(editgraphics.Geometry).Extent; //选中点的位置   155.            double expandPercentage = 10;  156.  157.            //加数值后,聚焦(这里需要注意,进行地理坐标和墨卡托坐标的转换)   158.            double wIDthExpand = (selectedFeatureExtent.WIDth + 5) * (expandPercentage / 100);  159.            double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);  160.            ESRI.ArcGIS.ClIEnt.Geometry.Envelope displayExtent = new Envelope(WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMin - (wIDthExpand / 2),selectedFeatureExtent.YMin - (heightExpand / 2))),WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMax + (wIDthExpand / 2),selectedFeatureExtent.YMax + (heightExpand / 2))))  161.            {  162.                SpatialReference = new SpatialReference(102100)  163.            };  164.  165.            MessageBox.Show("工程位置更新成功!");  166.            //重新加载地图   167.            GetGCInfoByType(tip_Base.CurrentValue);  168.            //重新置文本输入框为空   169.            this.tbProjectname.Text = "";  170.            this.tblatitute.Text = "";  171.            this.tbLongitute.Text = "";  172.        }  173. 174.        #endregion   175.          176.using System;  177.using System.Net;  178.using System.windows;  179.using System.windows.Controls;  180.using System.windows.documents;  181.using System.windows.Ink;  182.using System.windows.input;  183.using System.windows.Media;  184.using System.windows.Media.Animation;  185.using System.windows.Shapes;  186.using System.windows.Media.Imaging;  187.using System.windows.Media.Effects;  188.using ESRI.ArcGIS.ClIEnt.FeatureService.Symbols;  189.using ESRI.ArcGIS.ClIEnt.Geometry;  190.  191.  192.namespace MapClIEnt.CommonClass  193.{  194.    public class RTBContextMenu : ContextMenu  195.    {  196.        RichTextBox rtb;  197.        GCSiteM _gcSite;  198.  199.        public RTBContextMenu(RichTextBox rtb,GCSiteM gcSite)  200.        {  201.            this.rtb = rtb;  202.            _gcSite = gcSite;  203.        }  204.  205.  206.        //构造菜单按钮并返回一个FrameworkElement对象   207.        protected overrIDe FrameworkElement GetContent()  208.        {  209.            border border = new border() { borderBrush = new SolIDcolorBrush(color.FromArgb(255,167,171,176)),borderThickness = new Thickness(1),Background = new SolIDcolorBrush(colors.White) };  210.            border.Effect = new DropShadowEffect() { BlurRadius = 3,color = color.FromArgb(255,230,227,236) };  211.  212.  213.            //取消选中   214.            button tJspbutton = new button() { Height = 22,margin = new Thickness(0,0),HorizontalAlignment = HorizontalAlignment.Stretch,VerticalAlignment = VerticalAlignment.top,HorizontalContentAlignment = HorizontalAlignment.left };  215.            tJspbutton.Style = Application.Current.Resources["ContextMenubutton"] as Style;  216.            tJspbutton.Click += new RoutedEventHandler(tJspbutton_Click);  217.  218.            tJspbutton.Content = "取消选中";  219.  220.            border.Child = tJspbutton;  221.            return border;  222.        }  223.  224.  225.        voID tJspbutton_Click(object sender,RoutedEventArgs e)  226.        {  227.            //恢复原来的颜色   228.            _gcSite.editgraphics.Symbol = new SimpleMarkerSymbol()  229.            {  230.                color = new SolIDcolorBrush(colorRevert.Tocolor("#FF0551A7")),231.                Size = 10,232.                Style = ESRI.ArcGIS.ClIEnt.FeatureService.Symbols.SimpleMarkerSymbol.SimpleMarkerStyle.Circle  233.            };  234.            _gcSite.isedit = false;  235.  236.  237.            //重新加载数据,这里需要维持地图缩放的比例   238.            ESRI.ArcGIS.ClIEnt.Projection.WebMercator mercator = new ESRI.ArcGIS.ClIEnt.Projection.WebMercator();  239.            ESRI.ArcGIS.ClIEnt.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(_gcSite.oldgraphics.Geometry).Extent; //原先选中点的位置   240.            double expandPercentage = 10;  241.  242.  243.            //加数值后,聚焦(这里需要注意,进行地理坐标和墨卡托坐标的转换)   244.            double wIDthExpand = (selectedFeatureExtent.WIDth + 5) * (expandPercentage / 100);  245.            double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);  246.            ESRI.ArcGIS.ClIEnt.Geometry.Envelope displayExt http:// ent = new Envelope(WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMin - (wIDthExpand / 2),selectedFeatureExtent.YMax + (heightExpand / 2))))   247.            {  248.                SpatialReference = new SpatialReference(102100)  249.            };  250.  251.  252.            //重新加载地图   253.            _gcSite.GetGCInfoByType(tip_Base.CurrentValue);  254.            //重新置文本输入框为空   255.            _gcSite.tbProjectname.Text = "";  256.            _gcSite.tblatitute.Text = "";  257.            _gcSite.tbLongitute.Text = "";  258.            Close();  259.        }  260.    }  261.}  


 

以上使用到的右键菜单功能ContextMenu.cs类请参考:http://blog.csdn.net/taomanman/article/details/7333612

 

 

原文地址http://blog.csdn.net/taomanman/article/details/8602366

总结

以上是内存溢出为你收集整理的ArcGIS API for Silverlight 实现修改地图上的工程点位置 .全部内容,希望文章能够帮你解决ArcGIS API for Silverlight 实现修改地图上的工程点位置 .所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1020543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存