AddIN Sample学习 之 AddInTimeSeriesGraph 折线图绘制

mac2024-11-06  19

示例数据路径:C:\Program Files (x86)\ArcGIS\DeveloperKit10.1\Samples\data\StreamflowDateTime

大体效果:

代码段解析:

1.查询容差的获取

pMxDoc = (IMxDocument)ArcMap.Application.Document; // calculate tolerance rectangle to identify features inside it int Tolerance = 0; Tolerance = pMxDoc.SearchTolerancePixels; IDisplayTransformation pDispTrans = null; pDispTrans = pMxApp.Display.DisplayTransformation; tagRECT pToleranceRect = new tagRECT(); pToleranceRect.left = X - Tolerance; pToleranceRect.right = X + Tolerance; pToleranceRect.top = Y - Tolerance; pToleranceRect.bottom = Y + Tolerance; IEnvelope pSearchEnvelope = null; pSearchEnvelope = new EnvelopeClass(); pDispTrans.TransformRect(pSearchEnvelope, ref pToleranceRect, (int)(esriDisplayTransformationEnum.esriTransformPosition | esriDisplayTransformationEnum.esriTransformToMap));

 通过IMxDocument.SearchTolerancePixels获取像素容差,之后通过IDisplayTransformation接口,将鼠标点击的平面坐标x,y生成一个tagRect。

在之前的工作中,用到鼠标拾取要素之类的功能,通常的做法是获取鼠标点的位置,按照一定距离缓冲之后进行查询,这个一定距离是在代码中写死的,该功能只适用于某种业务场景,比如,一般缓冲0.5。这种查询方式存在问题:对于投影坐标,0.5的缓冲还算合适,可对于地理坐标系,缓冲0.5代表的是缓冲0.5度,这时候空间查询的范围相当大。Sample中的查询方式,通过读取地图中的查询像素容差,再将像素容差转换为地图图形进行空间查询。

2.要素拾取

IIdentify pIdentify = null; pIdentify = (IIdentify)pMxDoc.FocusMap.get_Layer(0); if (pIdentify == null) { MessageBox.Show("No layer"); return; } IArray pIDArray = null; pIDArray = pIdentify.Identify(pSearchEnvelope);

在之前的工作中,用到鼠标拾取要素时,通常的做法是构建ISpatialFilter对象,以鼠标当前的位置进行空间查询。Sample中通过IIdentify接口实现查询,FeatureLayer等图层对象都实现该接口,查询结果为IArray对象。

IArray对象中的具体对象为IIdentifyObj对象(大体翻译为 图层的被识别对象),该对象包含Flash()方法,可以用于实现对拾取对象的闪烁。

3.IDisplayTable接口 Provides access to members that work with the display table associated with a standalone table. 

通常,使用IFeatureLayer.FeatureClass接口,获取的Table对象,为要素图层数据源的表,

而使用IDisplayTable接口获取的Table对象,包含Join的表。

官方帮助建议,如果想让你的程序足够通用,使用IDisplayTable接口。

4.IFeatureLayerDefinition接口,获取图层的选择集,大致同ArcMap中的定义查询功能。

5.获取要素的Symbol,使用ILookupSymbol接口

ILookupSymbol pLookupSymbol = null; pLookupSymbol = (ILookupSymbol)pGeoFeatureLayer.Renderer; IFeature pFeature = null; pFeature = (IFeature)pRowIDObj.Row; IMarkerSymbol pSymbol = null; pSymbol = (IMarkerSymbol)pLookupSymbol.LookupSymbol(false, pFeature);

6.IDataGraphWindow2 :Provides access to members that control the DataGraph Window. ESRI自带的专题图窗口

 

最新回复(0)