日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArcGIS API for Silverlight 实现修改地图上的工程点位置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
ArcGIS API for Silverlight 實現(xiàn)修改地圖上的工程點位置 原文:ArcGIS API for Silverlight 實現(xiàn)修改地圖上的工程點位置


#region 處理工程點點擊編輯相關事件public Graphic editgraphics = null; //待編輯的Graphics圖層public Graphic oldgraphics = null; //原先Graphics圖層public Symbol symbolold = null;/// <summary>/// 在地圖上點擊編輯點處理事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>void myMap_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();try{if (editgraphics != null){if (isedit){System.Windows.Point screenPoint = e.GetPosition(myMap);ESRI.ArcGIS.Client.Geometry.MapPoint mapPoint = myMap.ScreenToMap(screenPoint);double x = Math.Round(mapPoint.X, 4);double y = Math.Round(mapPoint.Y, 4);MapPoint mp = new MapPoint(x, y);editgraphics.Geometry = mp;}else{editgraphics = oldgraphics;}}else{}}catch (Exception){return;}}void graphic_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){Graphic graphic = sender as Graphic;oldgraphics = graphic; //保存原先的Graphics圖層isedit = true;//選工程點if (graphic != null){//將上一個圖元還原第一個圖元if (symbolold != null){editgraphics.Symbol = symbolold;}editgraphics = graphic;symbolold = editgraphics.Symbol;editgraphics.Symbol = ((SimpleMarkerSymbol)this.FindName("SimpleSymbol"));ESRI.ArcGIS.Client.Geometry.MapPoint mp = (MapPoint)graphic.Geometry;ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();mp = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(mp) as ESRI.ArcGIS.Client.Geometry.MapPoint);//打開Tab進行編輯操作this.gridTab2.Width = new GridLength(278, GridUnitType.Pixel);tbTip1.Text = "<<";string title = graphic.Attributes["NAME"].ToString(); //工程名稱this.tbProjectName.Text = title;this.tbLatitute.Text = Math.Round(mp.X, 4).ToString(); //經(jīng)度this.tbLongitute.Text = Math.Round(mp.Y, 4).ToString(); //緯度}}void graphic_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){Graphic graphic = sender as Graphic;editgraphics.Symbol = ((SimpleMarkerSymbol)this.FindName("SimpleSymbol"));ESRI.ArcGIS.Client.Geometry.MapPoint mp = (MapPoint)graphic.Geometry;ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();mp = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(mp) as ESRI.ArcGIS.Client.Geometry.MapPoint);string title = graphic.Attributes["NAME"].ToString(); //工程名稱this.tbProjectName.Text = title;this.tblEditName.Text = title;this.tbLatitute.Text = Math.Round(mp.X, 4).ToString(); //經(jīng)度this.tbLongitute.Text = Math.Round(mp.Y, 4).ToString(); //緯度}void graphic_MouseMove(object sender, MouseEventArgs e){Graphic graphic = sender as Graphic;Grid grid = new Grid();grid.Background = new SolidColorBrush(Colors.Blue);TextBlock msg = new TextBlock();msg.Foreground = new SolidColorBrush(Colors.White);msg.FontSize = 13;msg.FontFamily = new FontFamily("Microsoft YaHei");msg.Text = graphic.Attributes["NAME"].ToString();grid.Children.Add(msg);graphic.MapTip = grid;}RichTextBox rtb;void graphic_MouseRightButtonUp(object sender, MouseButtonEventArgs e){if (isedit){//只有在選中點開始編輯后,才可以取消編輯RTBContextMenu menu = new RTBContextMenu(rtb, this);menu.Show(e.GetPosition(LayoutRoot));}else{//什么也不執(zhí)行}}void graphic_MouseRightButtonDown(object sender, MouseButtonEventArgs e){e.Handled = true;}private void btnModify_Click(object sender, System.Windows.RoutedEventArgs e){try{if (string.IsNullOrEmpty(this.tbProjectName.Text)){MessageBox.Show("請先選擇一個工程點!");}else{MapPoint mp = (MapPoint)editgraphics.Geometry;getDataSoapClient client = new getDataSoapClient();client.updagePositionCompleted += new EventHandler<AsyncCompletedEventArgs>(client_updagePositionCompleted);MapPoint mapPoint = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(mp) as ESRI.ArcGIS.Client.Geometry.MapPoint);client.updagePositionAsync(this.tbProjectName.Text, Math.Round(mapPoint.X, 4).ToString(), Math.Round(mapPoint.Y, 4).ToString());}}catch (Exception){MessageBox.Show("請先選擇一個工程點!");}}void client_updagePositionCompleted(object sender, AsyncCompletedEventArgs e){//重新加載數(shù)據(jù),這里需要維持地圖縮放的比例ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(editgraphics.Geometry).Extent; //選中點的位置double expandPercentage = 10;//加數(shù)值后,聚焦(這里需要注意,進行地理坐標和墨卡托坐標的轉換)double widthExpand = (selectedFeatureExtent.Width + 5) * (expandPercentage / 100);double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);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)))){SpatialReference = new SpatialReference(102100)};MessageBox.Show("工程位置更新成功!");//重新加載地圖GetGCInfoByType(tip_Base.CurrentValue);//重新置文本輸入框為空this.tbProjectName.Text = "";this.tbLatitute.Text = "";this.tbLongitute.Text = "";}#endregionusing System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using System.Windows.Media.Imaging; using System.Windows.Media.Effects; using ESRI.ArcGIS.Client.FeatureService.Symbols; using ESRI.ArcGIS.Client.Geometry;namespace MapClient.CommonClass {public class RTBContextMenu : ContextMenu{RichTextBox rtb;GCSiteM _gcSite;public RTBContextMenu(RichTextBox rtb, GCSiteM gcSite){this.rtb = rtb;_gcSite = gcSite;}//構造菜單按鈕并返回一個FrameworkElement對象protected override FrameworkElement GetContent(){Border border = new Border() { BorderBrush = new SolidColorBrush(Color.FromArgb(255, 167, 171, 176)), BorderThickness = new Thickness(1), Background = new SolidColorBrush(Colors.White) };border.Effect = new DropShadowEffect() { BlurRadius = 3, Color = Color.FromArgb(255, 230, 227, 236) };//取消選中Button tjspButton = new Button() { Height = 22, Margin = new Thickness(0, 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top, HorizontalContentAlignment = HorizontalAlignment.Left };tjspButton.Style = Application.Current.Resources["ContextMenuButton"] as Style;tjspButton.Click += new RoutedEventHandler(tjspButton_Click);tjspButton.Content = "取消選中";border.Child = tjspButton;return border;}void tjspButton_Click(object sender, RoutedEventArgs e){//恢復原來的顏色_gcSite.editgraphics.Symbol = new SimpleMarkerSymbol(){Color = new SolidColorBrush(ColorRevert.ToColor("#FF0551A7")),Size = 10,Style = ESRI.ArcGIS.Client.FeatureService.Symbols.SimpleMarkerSymbol.SimpleMarkerStyle.Circle};_gcSite.isedit = false;//重新加載數(shù)據(jù),這里需要維持地圖縮放的比例ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(_gcSite.oldgraphics.Geometry).Extent; //原先選中點的位置double expandPercentage = 10;//加數(shù)值后,聚焦(這里需要注意,進行地理坐標和墨卡托坐標的轉換)double widthExpand = (selectedFeatureExtent.Width + 5) * (expandPercentage / 100);double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);ESRI.ArcGIS.Client.Geometry.Envelope displayExt http:// ent = 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)))){SpatialReference = new SpatialReference(102100)};//重新加載地圖_gcSite.GetGCInfoByType(tip_Base.CurrentValue);//重新置文本輸入框為空_gcSite.tbProjectName.Text = "";_gcSite.tbLatitute.Text = "";_gcSite.tbLongitute.Text = "";Close();}} }

以上使用到的右鍵菜單功能ContextMenu.cs類請參考:http://blog.csdn.net/taomanman/article/details/7333612



posted on 2016-08-09 23:19 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/5755007.html

總結

以上是生活随笔為你收集整理的ArcGIS API for Silverlight 实现修改地图上的工程点位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。