- IIdentify
▣ Code Snippet
using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.esriSystem;■ Identify on a map
public static void IdentifyMap(IMap focusMap, IPoint mapPoint) { if (focusMap.LayerCount == 0) return; ESRI.ArcGIS.esriSystem.UID uid = new UIDClass(); uid.Value = "{6CA416B1-E160-11D2-9F4E-00C04F6BC78E}"; IEnumLayer enumLayer = focusMap.get_Layers(uid, true); enumLayer.Reset(); ILayer layer = enumLayer.Next(); while (layer != null) { if (layer.Valid && layer.Visible) { IdentifyLayer(focusMap, layer, mapPoint); } layer = enumLayer.Next(); } }■ Identify on a layer
static void IdentifyLayer(IMap focusMap, ILayer layer, IPoint mapPoint) { bool isFeatureLayer = layer is IFeatureLayer; IIdentify identify = (IIdentify)layer; IGeometry searchGeometry = mapPoint; if (isFeatureLayer) { IFeatureLayer featureLayer = (IFeatureLayer)layer; if (featureLayer.FeatureClass.ShapeType != esriGeometryType.esriGeometryPolygon) { ITopologicalOperator topoOpt = (ITopologicalOperator)mapPoint; double radius = PixelsToMapUnits((IActiveView)focusMap, 6d); searchGeometry = topoOpt.Buffer(radius); } } ESRI.ArcGIS.esriSystem.IArray idArray = identify.Identify(searchGeometry); if (idArray == null) { return; } IActiveView activeView = (IActiveView)focusMap; for (int k = 0; k < idArray.Count; k++) { IIdentifyObj identifyObj = (IIdentifyObj)idArray.get_Element(k); if (isFeatureLayer) { IFeatureIdentifyObj featureObj = (IFeatureIdentifyObj)identifyObj; IRowIdentifyObject rowObj = (IRowIdentifyObject)featureObj; IFeature feature = (IFeature)rowObj.Row; // flash shape identifyObj.Flash(activeView.ScreenDisplay); // show attributes string infoMsg = string.Format("{0}'s OID = {1}", layer.Name, feature.OID); System.Windows.Forms.MessageBox.Show(infoMsg); } else { IRasterIdentifyObj rasterObj = (IRasterIdentifyObj)identifyObj; // show attributes string infoMsg = string.Format("{0}'s pixel value = {1}", layer.Name, rasterObj.Name); System.Windows.Forms.MessageBox.Show(infoMsg); } } }■ Convert screen pixels to map units
static double PixelsToMapUnits(IActiveView activeView, double pixelUnits) { IDisplayTransformation displayTrans = activeView.ScreenDisplay.DisplayTransformation; tagRECT deviceRECT = displayTrans.get_DeviceFrame(); int pixelExtent = deviceRECT.right - deviceRECT.left; double realWorldDisplayExtent = displayTrans.VisibleBounds.Width; double sizeOfOnePixel = realWorldDisplayExtent / pixelExtent; return pixelUnits * sizeOfOnePixel; }
댓글 없음:
댓글 쓰기