private async void CenterMap() { string errorMessage = null; try { await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => { Geolocator geolocator = new Geolocator(); Geoposition geoposition = null; geoposition = await geolocator.GetGeopositionAsync(); await MainMapControl.TrySetViewAsync(geoposition.Coordinate.Point, 16, 0, 0, Windows.UI.Xaml.Controls.Maps.MapAnimationKind.Bow); //mapControl.Center = geoposition.Coordinate.Point; //mapControl.ZoomLevel = 16; }); } catch (Exception ex) { errorMessage = ex.Message; } if (errorMessage != null) { MessageDialog msg = new MessageDialog("Não foi possível localizar o seu dispositivo. Por favor verifique se o sistema de localização de seu telefone está ativado para uma melhor experiência de uso.", "Seu GPS está ativado?"); await msg.ShowAsync(); } }
private void axMapControl_EagleEye_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { IPoint vPoint = new PointClass(); vPoint.PutCoords(e.mapX, e.mapY); MainMapControl.CenterAt(vPoint); }
/// <summary> /// CAD文件作为矢量图层加载 /// 分图层加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddCADByLayerToolStripMenuItem_Click(object sender, EventArgs e) { string filePath; string fileName; string filter = "CAD(*.dwg)|*.dwg"; string title = "打开CAD数据文件"; outFilePathAndFileName(title, filter, out filePath, out fileName); if (fileName == null || filePath == null) { return; } IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactory(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace; // 加载CAD文件中的线文件 IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName + ":polyline"); IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = fileName; pFeatureLayer.FeatureClass = pFeatureClass; // 新增删除数据 ClearAllData(); MainMapControl.AddLayer(pFeatureLayer); MainMapControl.Refresh(); //同步鹰眼 SynchronizeEagleEye(); }
/// <summary> /// 鹰眼地图控制器按下事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void EagleEyeMapControl_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { //if (EagleEyeMapControl.Map.LayerCount > 0) //{ // // 按下鼠标左键,移动矩形框 // if (e.button == 1) // { // if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax) // { // CanDrag = true; // } // MoveRectPoint = new PointClass(); // // 记录点击的第一个点的坐标 // MoveRectPoint.PutCoords(e.mapX, e.mapY); // } // //按下鼠标右键绘制矩形框 // else if (e.button == 2) // { // IEnvelope pEnvelope = EagleEyeMapControl.TrackRectangle(); // IPoint pTempPoint = new PointClass(); // pTempPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2); // MainMapControl.Extent = pEnvelope; // //矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心调整 // MainMapControl.CenterAt(pTempPoint); // } //} if (EagleEyeMapControl.Map.LayerCount > 0) { //按下鼠标左键移动矩形框 if (e.button == 1) { //如果指针落在鹰眼的矩形框中,标记可移动 if (e.mapX > pEnv.XMin && e.mapY > pEnv.YMin && e.mapX < pEnv.XMax && e.mapY < pEnv.YMax) { CanDrag = true; } MoveRectPoint = new PointClass(); MoveRectPoint.PutCoords(e.mapX, e.mapY); //记录点击的第一个点的坐标 } //按下鼠标右键绘制矩形框 else if (e.button == 2) { IEnvelope pEnvelope = EagleEyeMapControl.TrackRectangle(); IPoint pTempPoint = new PointClass(); pTempPoint.PutCoords(pEnvelope.XMin + pEnvelope.Width / 2, pEnvelope.YMin + pEnvelope.Height / 2); MainMapControl.Extent = pEnvelope; //矩形框的高宽和数据试图的高宽不一定成正比,这里做一个中心调整 MainMapControl.CenterAt(pTempPoint); } } }
/// <summary> /// CAD文件作为矢量图层加载 /// 整幅图加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddWhileCADToolStripMenuItem_Click(object sender, EventArgs e) { string filePath; string fileName; string filter = "CAD(*.dwg)|*.dwg"; string title = "打开CAD数据文件"; outFilePathAndFileName(title, filter, out filePath, out fileName); if (fileName == null || filePath == null) { return; } // 打开一个CAD数据集 IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactory(); IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0) as IFeatureWorkspace; // 打开一个要素集 IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName); // IFeatureClassContainer 可以管理IFeatureDataset中的每个要素类 IFeatureClassContainer pFeatureClassContainer = pFeatureDataset as IFeatureClassContainer; // 新增删除数据 ClearAllData(); // 对CAD文件中的要素进行遍历处理 for (int i = 0; i < pFeatureClassContainer.ClassCount; i++) { IFeatureClass pFeatClass = pFeatureClassContainer.get_Class(i); // 如果是注记,则添加注记层 if (pFeatClass.FeatureType == esriFeatureType.esriFTCoverageAnnotation) { IFeatureLayer pFeatureLayer = new CadAnnotationLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; MainMapControl.AddLayer(pFeatureLayer); } // 如果是点线面则添加要素层 else { IFeatureLayer pFeatureLayer = new FeatureLayerClass(); pFeatureLayer.Name = pFeatClass.AliasName; pFeatureLayer.FeatureClass = pFeatClass; MainMapControl.AddLayer(pFeatureLayer); } MainMapControl.Refresh(); } // 同步鹰眼 SynchronizeEagleEye(); }
/// <summary> /// 鹰眼同步 /// </summary> private void SynchronizeEagleEye() { if (EagleEyeMapControl.LayerCount > 0) { EagleEyeMapControl.ClearLayers(); } // 设置鹰眼视图与主地图坐标系统一致 EagleEyeMapControl.SpatialReference = MainMapControl.SpatialReference; for (int i = MainMapControl.LayerCount - 1; i >= 0; i--) { // 使鹰眼和主地图的坐标保持一致 ILayer pLayer = MainMapControl.get_Layer(i); if (pLayer is IGroupLayer || pLayer is ICompositeLayer) { ICompositeLayer comositeLayer = pLayer as ICompositeLayer; for (int j = comositeLayer.Count - 1; j >= 0; j--) { ILayer pSubLayer = comositeLayer.get_Layer(j); IFeatureLayer featureLayer = pSubLayer as IFeatureLayer; if (featureLayer != null) { if (featureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && featureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint) { EagleEyeMapControl.AddLayer(pLayer); } } } } else { IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer; if (pFeatureLayer != null) { if (pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPoint && pFeatureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryMultipoint) { EagleEyeMapControl.AddLayer(pLayer); } } } } // 设置鹰眼地图全图显示 EagleEyeMapControl.Extent = MainMapControl.FullExtent; pEnv = MainMapControl.Extent as IEnvelope; DrawRectangle(pEnv); EagleEyeMapControl.ActiveView.Refresh(); }
/// <summary> /// 地图文档保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSaveMap_Click(object sender, EventArgs e) { try { string sMxdFileName = MainMapControl.DocumentFilename; IMapDocument pMapDocument = new MapDocumentClass(); if (sMxdFileName != null && MainMapControl.CheckMxFile(sMxdFileName)) { if (pMapDocument.get_IsReadOnly(sMxdFileName)) { MessageBox.Show("本地图文档是只读,不能保存!"); pMapDocument.Close(); return; } else { SaveFileDialog pSaveFileDialog = new SaveFileDialog(); pSaveFileDialog.Title = "请选择保存路径"; pSaveFileDialog.OverwritePrompt = true; pSaveFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd|ArcMap模板(*.mxt)|*.mxt"; pSaveFileDialog.RestoreDirectory = true; if (pSaveFileDialog.ShowDialog() == DialogResult.OK) { sMxdFileName = pSaveFileDialog.FileName; } else { return; } } pMapDocument.New(sMxdFileName); pMapDocument.ReplaceContents(MainMapControl.Map as IMxdContents); pMapDocument.Save(pMapDocument.UsesRelativePaths, true); pMapDocument.Close(); MessageBox.Show("保存地图文档成功"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// 鹰眼地图控制器弹起事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void EagleEyeMapControl_OnMouseUp(object sender, IMapControlEvents2_OnMouseUpEvent e) { //if (e.button == 1 && MoveRectPoint != null) //{ // if (e.mapX == MoveRectPoint.X && e.mapY == MoveRectPoint.Y) // { // MainMapControl.CenterAt(MoveRectPoint); // MainMapControl.Refresh(); // } // CanDrag = false; //} if (e.button == 1 && MoveRectPoint != null) { if (e.mapX == MoveRectPoint.X && e.mapY == MoveRectPoint.Y) { MainMapControl.CenterAt(MoveRectPoint); } CanDrag = false; } }
/// <summary> /// 通过IMapDocument接口加载地图文档 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnIMapDocument_Click(object sender, EventArgs e) { try { OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = "打开地图文档"; pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf"; pOpenFileDialog.Multiselect = false; pOpenFileDialog.RestoreDirectory = true; if (pOpenFileDialog.ShowDialog() == DialogResult.OK) { string pFileName = pOpenFileDialog.FileName; if (pFileName == "") { return; } if (MainMapControl.CheckMxFile(pFileName)) //检查地图文档有效性 { //将数据载入pMapDocument并与Map控件关联 IMapDocument pMapDocument = new MapDocument();//using ESRI.ArcGIS.Carto; pMapDocument.Open(pFileName, ""); //获取Map中激活的地图文档 MainMapControl.Map = pMapDocument.ActiveView.FocusMap; MainMapControl.ActiveView.Refresh(); } else { MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示"); return; } } } catch (Exception ex) { MessageBox.Show("打开地图文档失败" + ex.Message); } }
/// <summary> /// 加载栅格数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddRaster_Click(object sender, EventArgs e) { string title = "打开Raster文件"; string filter = "栅格文件 (*.*)|*.bmp;*.tif;*.jpg;*.img|(*.bmp)|*.bmp|(*.tif)|*.tif|(*.jpg)|*.jpg|(*.img)|*.img"; OpenFileDialog pOpenFileDialog = createOpenFileDialog(title, filter); string pRasterFileName = pOpenFileDialog.FileName; if (pRasterFileName == "") { return; } string pPath = System.IO.Path.GetDirectoryName(pRasterFileName); string pFileName = System.IO.Path.GetFileName(pRasterFileName); IWorkspaceFactory pWorkspaceFactory = new RasterWorkspaceFactory(); IRasterWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(pPath, 0) as IRasterWorkspace; IRasterDataset pRasterDataSet = pWorkspace.OpenRasterDataset(pFileName); // 影像金字塔判断与创建 IRasterPyramid3 pRasPyrmid; pRasPyrmid = pRasterDataSet as IRasterPyramid3; if (pRasPyrmid != null) { if (!(pRasPyrmid.Present)) { // 创建金字塔 pRasPyrmid.Create(); } } IRaster pRaster = pRasterDataSet.CreateDefaultRaster(); IRasterLayer pRasterLayer = new RasterLayerClass(); pRasterLayer.CreateFromRaster(pRaster); ILayer pLayer = pRasterLayer as ILayer; MainMapControl.AddLayer(pLayer); }
/// <summary> /// CAD文件作为栅格图层加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddRasterByCADToolStripMenuItem_Click(object sender, EventArgs e) { string filePath; string fileName; string filter = "CAD(*.dwg)|*.dwg"; string title = "打开CAD数据文件"; outFilePathAndFileName(title, filter, out filePath, out fileName); if (fileName == null || filePath == null) { return; } IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactory(); IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0); ICadDrawingWorkspace pCadDrawingWorkspace = pWorkspace as ICadDrawingWorkspace; // 获取CAD数据集 ICadDrawingDataset pCadDrawingDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(fileName); ICadLayer pCadLayer = new CadLayerClass(); pCadLayer.CadDrawingDataset = pCadDrawingDataset; MainMapControl.AddLayer(pCadLayer); MainMapControl.Refresh(); }
/// <summary> /// 使用IMapControl接口的LoadFxFile方法加载地图文档 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnLoadMxFile_Click(object sender, EventArgs e) { //加载数据前如果有数据则清空 try { OpenFileDialog pOpenFileDialog = new OpenFileDialog(); pOpenFileDialog.CheckFileExists = true; pOpenFileDialog.Title = "打开地图文档"; pOpenFileDialog.Filter = "ArcMap文档(*.mxd)|*.mxd;|ArcMap模板(*.mxt)|*.mxt|发布地图文件(*.pmf)|*.pmf|所有地图格式(*.mxd;*.mxt;*.pmf)|*.mxd;*.mxt;*.pmf"; pOpenFileDialog.Multiselect = false; //不允许多个文件同时选择 pOpenFileDialog.RestoreDirectory = true; //存储打开的文件路径 if (pOpenFileDialog.ShowDialog() == DialogResult.OK) { string pFileName = pOpenFileDialog.FileName; if (pFileName == "") { return; } if (MainMapControl.CheckMxFile(pFileName)) //检查地图文档有效性 { ClearAllData(); MainMapControl.LoadMxFile(pFileName); } else { MessageBox.Show(pFileName + "是无效的地图文档!", "信息提示"); return; } } } catch (Exception ex) { MessageBox.Show("打开地图文档失败" + ex.Message); } }
/// <summary> /// 地图中鼠标按下事件监听 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MainMapControl_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { //屏幕坐标点转化为地图坐标点 pPointPt = (MainMapControl.Map as IActiveView).ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); if (e.button == 1) { IActiveView pActiveView = MainMapControl.ActiveView; IEnvelope pEnvelope = new EnvelopeClass(); switch (pMouseOperate) { case "ZoomIn": pEnvelope = MainMapControl.TrackRectangle(); // 如果拉框范围为空则返回 if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0) { return; } // 如果拉框有范围,则拉大到拉框范围 MainMapControl.ActiveView.Extent = pEnvelope; MainMapControl.ActiveView.Refresh(); break; case "ZoomOut": pEnvelope = MainMapControl.TrackRectangle(); // 如果拉框范围为空则返回 if (pEnvelope == null || pEnvelope.IsEmpty || pEnvelope.Height == 0 || pEnvelope.Width == 0) { return; } else { double dWidth = pActiveView.Extent.Width * pActiveView.Extent.Width / pEnvelope.Width; double dHeight = pActiveView.Extent.Height * pActiveView.Extent.Height / pEnvelope.Height; double dXmin = pActiveView.Extent.XMin - ((pEnvelope.XMin - pActiveView.Extent.XMin) * pActiveView.Extent.Width / pEnvelope.Width); double dYmin = pActiveView.Extent.YMin - ((pEnvelope.YMin - pActiveView.Extent.YMin) * pActiveView.Extent.Height / pEnvelope.Height); double dXmax = dXmin + dWidth; double dYmax = dYmin + dHeight; pEnvelope.PutCoords(dXmin, dYmin, dXmax, dYmax); } pActiveView.Extent = pEnvelope; pActiveView.Refresh(); break; case "Pan": MainMapControl.Pan(); break; case "MeasureLength": //判断追踪线对象是否为空,若是则实例化并设置当前鼠标点为起始点 if (pNewLineFeedback == null) { //实例化追踪线对象 pNewLineFeedback = new NewLineFeedbackClass(); pNewLineFeedback.Display = (MainMapControl.Map as IActiveView).ScreenDisplay; //设置起点,开始动态线绘制 pNewLineFeedback.Start(pPointPt); dToltalLength = 0; } else //如果追踪线对象不为空,则添加当前鼠标点 { pNewLineFeedback.AddPoint(pPointPt); } //pGeometry = m_PointPt; if (dSegmentLength != 0) { dToltalLength = dToltalLength + dSegmentLength; } break; case "MeasureArea": if (pNewPolygonFeedback == null) { //实例化追踪面对象 pNewPolygonFeedback = new NewPolygonFeedback(); pNewPolygonFeedback.Display = (MainMapControl.Map as IActiveView).ScreenDisplay; ; pAreaPointCol.RemovePoints(0, pAreaPointCol.PointCount); //开始绘制多边形 pNewPolygonFeedback.Start(pPointPt); pAreaPointCol.AddPoint(pPointPt, ref missing, ref missing); } else { pNewPolygonFeedback.AddPoint(pPointPt); pAreaPointCol.AddPoint(pPointPt, ref missing, ref missing); } break; case "SelFeature": IEnvelope pEnv = MainMapControl.TrackRectangle(); IGeometry pGeo = pEnv as IGeometry; // 矩形框若为空,即为点选时,对点的范围进行扩展 if (pEnv.IsEmpty == true) { tagRECT r; r.left = e.x - 5; r.top = e.y - 5; r.right = e.x + 5; r.bottom = e.y + 5; pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4); pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference; } pGeo = pEnv as IGeometry; MainMapControl.Map.SelectByShape(pGeo, null, false); MainMapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); //IEnvelope pEnv = MainMapControl.TrackRectangle(); //IGeometry pGeo = pEnv as IGeometry; ////矩形框若为空,即为点选时,对点范围进行扩展 //if (pEnv.IsEmpty == true) //{ // tagRECT r; // r.left = e.x - 5; // r.top = e.y - 5; // r.right = e.x + 5; // r.bottom = e.y + 5; // pActiveView.ScreenDisplay.DisplayTransformation.TransformRect(pEnv, ref r, 4); // pEnv.SpatialReference = pActiveView.FocusMap.SpatialReference; //} //pGeo = pEnv as IGeometry; //MainMapControl.Map.SelectByShape(pGeo, null, false); //MainMapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null); break; case "ExportRegion": // 删除视图中的数据 MainMapControl.ActiveView.GraphicsContainer.DeleteAllElements(); MainMapControl.ActiveView.Refresh(); IPolygon polygon = DrawPolygon(MainMapControl); if (polygon == null) { return; } ExportMap.AddElement(polygon, MainMapControl.ActiveView); if (FrmExpMap == null || FrmExpMap.IsDisposed) { FrmExpMap = new FormExportMap(MainMapControl); } FrmExpMap.IsRegion = true; FrmExpMap.GetGometry = polygon as IGeometry; FrmExpMap.Show(); FrmExpMap.Activate(); break; case "TxtSymbol": TxtSymbol(e); break; default: break; } } else if (e.button == 2) { pMouseOperate = ""; MainMapControl.MousePointer = esriControlsMousePointer.esriPointerDefault; } }