protected override void OnClick(Item item) { ESRI.ArcGIS.Carto.ILayer layer = item.Tag as ESRI.ArcGIS.Carto.ILayer; ESRI.ArcGIS.Geometry.IEnvelope env = layer.AreaOfInterest; ArcMap.Document.ActiveView.Extent = env; ArcMap.Document.ActiveView.Refresh(); }
protected override void OnClick() { try { // establish a reference to the running ArcMap instance ESRI.ArcGIS.ArcMapUI.IMxDocument mxDoc = (ESRI.ArcGIS.ArcMapUI.IMxDocument)ArcMap.Application.Document; // retrieve the TOC selected layer (if there is one) ESRI.ArcGIS.Carto.ILayer selectedLayer = mxDoc.SelectedLayer; // validate layer meets minmum requirements if (isLayerValid(selectedLayer)) { // open the upload dialog Dialogs.Interact.UploadToGoogleMapsEngine dialog = new Dialogs.Interact.UploadToGoogleMapsEngine(ref ext); dialog.Show(); } else { // display an error to the user System.Windows.Forms.MessageBox.Show("Please select a valid vector or raster layer."); } } catch (System.Exception ex) { // log an error, unable to open in dialog log.Error(ex); } }
/// <summary> /// Constractor /// </summary> /// <param name="layer"></param> public LayerInfo(ESRI.ArcGIS.Carto.ILayer layer) { m_Layer = layer; m_Name = m_Layer.Name; m_MaximumScale = m_Layer.MaximumScale; m_MinimumScale = m_Layer.MinimumScale; m_Cached = m_Layer.Cached; m_ShowTips = m_Layer.ShowTips; m_SupportedDrawPhases = m_Layer.SupportedDrawPhases; m_Valid = m_Layer.Valid; m_Visible = m_Layer.Visible; }
internal static ESRI.ArcGIS.Carto.IFeatureLayer2 getFeatureLayerByName(string name) { if (name.Length > 0) { ESRI.ArcGIS.Carto.ILayer layer = getLayerByName(name); if (layer != null) { ESRI.ArcGIS.Carto.IFeatureLayer2 featlayer = (ESRI.ArcGIS.Carto.IFeatureLayer2)layer; return(featlayer); } } return(null); }
protected override void OnPopup(ItemCollection items) { ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap; for (int i = 0; i < map.LayerCount; i++) { ESRI.ArcGIS.Carto.ILayer layer = map.get_Layer(i); Item item = new Item(); item.Caption = layer.Name; item.Enabled = layer.Visible; item.Message = layer.Name; item.Tag = layer; items.Add(item); } }
private ESRI.ArcGIS.Carto.ILayer GetBackgroundLayer(ESRI.ArcGIS.Carto.IMap map) { ESRI.ArcGIS.Carto.ILayer pLayer = map.get_Layer(0); ESRI.ArcGIS.Carto.ILayer pTempLayer = null; for (int i = 1; i < map.LayerCount; i++) { pTempLayer = map.get_Layer(i); if (pLayer.AreaOfInterest.Width < pTempLayer.AreaOfInterest.Width) { pLayer = pTempLayer; } } return(pLayer); }
private void axTOCControl_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ITOCControlEvents_OnMouseDownEvent e) { ESRI.ArcGIS.Controls.esriTOCControlItem pTOCControlItem = ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemNone; //HitTest引用参数定义 ESRI.ArcGIS.Carto.IBasicMap pBasicMap = null; ESRI.ArcGIS.Carto.ILayer pLayer = null; object pObjectOther = null; object pObjectIndex = null; m_TOCControl.HitTest(e.x, e.y, ref pTOCControlItem, ref pBasicMap, ref pLayer, ref pObjectOther, ref pObjectIndex); //确保有项目被选中 if (pTOCControlItem == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemMap) { m_TOCControl.SelectItem(pBasicMap, null); } else { m_TOCControl.SelectItem(pLayer, null); } //对选中的item进行处理 //选中的是Map if (pTOCControlItem == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemMap) { MapInfo pMapInfo = new MapInfo(m_MapControl.Map); propertyGrid1.SelectedObject = pMapInfo; } //layer if (pTOCControlItem == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLayer) { LayerInfo pLayerInfo = new LayerInfo(pLayer); propertyGrid1.SelectedObject = pLayerInfo; } //Heading if (pTOCControlItem == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemHeading) { MessageBox.Show("Selected Heading"); } //LegendClass if (pTOCControlItem == ESRI.ArcGIS.Controls.esriTOCControlItem.esriTOCControlItemLegendClass) { MessageBox.Show("Selected LegendClass"); } }
internal static ESRI.ArcGIS.Carto.ILayer getLayerByName(string name) { ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap; ESRI.ArcGIS.esriSystem.UID uid = new ESRI.ArcGIS.esriSystem.UIDClass(); uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}"; ESRI.ArcGIS.Carto.IEnumLayer enumLayer = map.get_Layers(null, true); ESRI.ArcGIS.Carto.ILayer l = enumLayer.Next(); while (l != null) { if (l.Name.ToUpper() == name.ToUpper()) { break; } l = enumLayer.Next(); } return(l); }
/// <summary> /// 重置mxd文档的数据源 /// </summary> /// <param name="pMapDoc"></param> /// <param name="pWs"></param> public static void ChangeMxdDataSource(ESRI.ArcGIS.Carto.IMapDocument pMapDoc, ESRI.ArcGIS.Geodatabase.IWorkspace pWs) { ESRI.ArcGIS.Geodatabase.IWorkspaceName pWsName = GetWorkspaceName(pWs); ESRI.ArcGIS.Carto.IMap pMap = pMapDoc.ActiveView.FocusMap; ESRI.ArcGIS.Carto.ILayer pLayer = null; ESRI.ArcGIS.Carto.IDataLayer pDataLayer = null; ESRI.ArcGIS.Geodatabase.IDatasetName pDataName = null; for (int i = 0; i < pMap.LayerCount; i++) { pLayer = pMap.get_Layer(i); if (pLayer.Valid == false) { if (pLayer is ESRI.ArcGIS.Carto.IDataLayer) { pDataLayer = pLayer as ESRI.ArcGIS.Carto.IDataLayer; try { pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName; //获取DatasetName,必须是要替换的工作空间下的 ESRI.ArcGIS.Geodatabase.IDatasetName pDsName = GetDatasetName(pWs, pDataName.Name); if (pDsName == null) { continue; } pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName; pDataName.WorkspaceName = pWsName; pDataLayer.Connect(pDsName as ESRI.ArcGIS.esriSystem.IName); System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataName); System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsName); //pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName; } catch { } System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataLayer); } } } System.Runtime.InteropServices.Marshal.ReleaseComObject(pWsName); System.Runtime.InteropServices.Marshal.ReleaseComObject(pMap); pMapDoc.Save(true, true); }
public static bool isLayerValid(ESRI.ArcGIS.Carto.ILayer layer) { try { // determine if there is a selected layer, it is valid, and // it is a feature class or raster type layer if (layer != null && layer.Valid && (layer is ESRI.ArcGIS.Carto.IFeatureLayer || layer is ESRI.ArcGIS.Carto.IRasterLayer)) { return(true); } else { return(false); } } catch (Exception e) { return(false); } }
private void FrmZhzzt_Load(object sender, EventArgs e) { axMapControlZZT.LoadMxFile(Application.StartupPath + @"\综合柱状图.mxd"); pLayer = DataEditCommon.GetLayerByName(axMapControlZZT.Map, LayerNames.LAYER_ALIAS_MR_Zhuzhuang); ESRI.ArcGIS.Carto.IFeatureLayer pFeatureLayer = (ESRI.ArcGIS.Carto.IFeatureLayer)pLayer; pFeatureClass = pFeatureLayer.FeatureClass; if (pFeatureLayer == null) { MessageBox.Show("柱状图图层缺失!"); this.Close(); return; } if (pFeatureClass == null) { MessageBox.Show("柱状图图层缺失!"); this.Close(); return; } if (BID == "" || pGeometry == null) { return; } List <IGeometry> listgeo = new List <IGeometry>(); IQueryFilter pFilter = new QueryFilterClass(); pFilter.WhereClause = "BID='" + BID + "'"; IFeatureCursor pCursor = pFeatureClass.Search(pFilter, false); IFeature pFeature = pCursor.NextFeature(); while (pFeature != null) { listgeo.Add(pFeature.Shape); pFeature = pCursor.NextFeature(); } pGeometry = setgeo(MyMapHelp.GetGeoFromGeos(listgeo)); axMapControlZZT.Extent = pGeometry.Envelope; axMapControlZZT.MapScale = blc; axMapControlZZT.ActiveView.Refresh(); }
// The execute part of the algorithm private void InternalExecute(ISchematicLayer schematicLayer, ISchematicInMemoryDiagram inMemoryDiagram, ITrackCancel CancelTracker) { if (schematicLayer == null || inMemoryDiagram == null) { return; } // get the diagram spatial reference for geometry transformation IGeoDataset geoDataset = (IGeoDataset)inMemoryDiagram; if (geoDataset == null) { return; } ISpatialReference spatialReference = geoDataset.SpatialReference; ISchematicDiagramClass diagramClass; diagramClass = inMemoryDiagram.SchematicDiagramClass; if (diagramClass == null) { return; } ISchematicDataset schemDataset; schemDataset = diagramClass.SchematicDataset; if (schemDataset == null) { return; } ISchematicAlgorithmEventsTrigger algorithmEventsTrigger; algorithmEventsTrigger = (ISchematicAlgorithmEventsTrigger)schemDataset; if (algorithmEventsTrigger == null) { return; } ESRI.ArcGIS.Carto.ILayer layer = (ESRI.ArcGIS.Carto.ILayer)schematicLayer; ISchematicAlgorithm algorithm = (ISchematicAlgorithm)this; bool canExecute = true; algorithmEventsTrigger.FireBeforeExecuteAlgorithm(layer, algorithm, ref canExecute); if (!canExecute) { return; // cannot execute } // Get the selected Features IEnumSchematicFeature enumFeatures = schematicLayer.GetSchematicSelectedFeatures(true); if (enumFeatures == null) { return; } // Count the selected nodes ISchematicInMemoryFeatureClass inMemoryFeatureClass; ISchematicFeature selectedFeature = null; int iCount = 0; ISchematicFeature schemFeature; enumFeatures.Reset(); schemFeature = enumFeatures.Next(); while (schemFeature != null && iCount < 2) { // just want SchematicFeatureNode inMemoryFeatureClass = (ISchematicInMemoryFeatureClass)schemFeature.Class; if (inMemoryFeatureClass.SchematicElementClass.SchematicElementType == esriSchematicElementType.esriSchematicNodeType) { selectedFeature = schemFeature; iCount++; } schemFeature = enumFeatures.Next(); } if (iCount != 1 || selectedFeature == null) { return; // must be only one } // Create a new SchematicAnalystFindConnected algorithm ISchematicAnalystFindConnected analystFindConnected = null; analystFindConnected = (ISchematicAnalystFindConnected) new SchematicAnalystFindConnected(); if (analystFindConnected == null) { return; } // Modifying parameters value for this SchematicAnalystFindConnected algorithm so that when it is launched the trace result appears a selection set{ analystFindConnected.SelectLink = true; analystFindConnected.SelectNode = true; analystFindConnected.UseFlow = false; //pAnalystFindConnected.FlowDirection = 1; // Execute the algorithm analystFindConnected.Execute(schematicLayer, CancelTracker); // Retrieving the trace result (if any) IEnumSchematicFeature resultFeatures; resultFeatures = analystFindConnected.TraceResult; // free the schematic analyst COM object while (System.Runtime.InteropServices.Marshal.ReleaseComObject(analystFindConnected) > 0) { } if (resultFeatures == null || resultFeatures.Count < 1) { return; } // Apply the translation to the result //ISchematicInMemoryDiagram inMemoryDiagram; //inMemoryDiagram = schematicLayer.SchematicInMemoryDiagram; // Translating each traced elements according to the TranslationFactorX and TranslationFactorY parameters current values ISchematicInMemoryFeature inMemoryFeature; resultFeatures.Reset(); while ((inMemoryFeature = (ISchematicInMemoryFeature)resultFeatures.Next()) != null) { IGeometry geometry; ITransform2D transform; esriSchematicElementType elemType; inMemoryFeatureClass = (ISchematicInMemoryFeatureClass)inMemoryFeature.Class; elemType = inMemoryFeatureClass.SchematicElementClass.SchematicElementType; if (elemType == esriSchematicElementType.esriSchematicLinkType || elemType == esriSchematicElementType.esriSchematicNodeType) { // get a copy of the feature geometry // then process the cloned geometry rather than the feature geometry directly // Thus the modifications are stored in the heap of the current operation // meaning it can be undone then redo (undo/redo) geometry = inMemoryFeature.ShapeCopy; // Convert the geometry into the SpatialReference of diagram class geometry.Project(spatialReference); // Move the geometry transform = (ITransform2D)geometry; if (transform != null) { transform.Move(m_paramX, m_paramY); // Convert the moved geometry into the spatial reference of storage // and feed it back to the feature IObjectClass table = inMemoryFeature.Class; if (table == null) { continue; } IGeoDataset featureGeoDataset = (IGeoDataset)table; if (featureGeoDataset == null) { continue; } ISpatialReference featureSpatialRef = featureGeoDataset.SpatialReference; if (featureSpatialRef == null) { continue; } IGeometry movedGeometry = (IGeometry)transform; movedGeometry.Project(featureSpatialRef); inMemoryFeature.Shape = movedGeometry; } } } // After Execute part algorithmEventsTrigger.FireAfterExecuteAlgorithm(layer, algorithm); // update the diagram extent schematicLayer.UpdateExtent(); }