//<CSCM> //******************************************************************************** //** 函 数 名: GetCursorByFieldAndValue //** 版 权: CopyRight (C) //** 创 建 人: 杨旭斌 //** 功能描述: 通过某字段的值获得与该字段对应的要素,比如通过图幅号获得某个图幅, // 该函数返回一个光标,用户从光标中取需要的要素,如果是多个字段,则调用 GetFeatCursor 即可 //** 创建日期: //** 修 改 人: //** 修改日期: //** 修改时间: 20070817 //** 参数列表: sValue (String) // sFieldName (String) // sFieldNameLeftgBrace (String) // sFieldNameRightBrace (String) // pFeatCls (IFeatureClass) //** 版 本:1.0 //********************************************************************************* //</CSCM> public static IFeatureCursor GetCursorByFieldAndValue(string sValue, string sFieldName, ref IFeatureClass pFeatCls, bool bIsOID) { //bIsOID = false; IFeatureCursor functionReturnValue = default(IFeatureCursor); IQueryFilter pQueryFilter = default(IQueryFilter); IFeatureCursor pFeatCursor = default(IFeatureCursor); string sSQL = null; string sOIDName = null; int lFieldIndex = 0; IField pField = default(IField); // ERROR: Not supported in C#: OnErrorStatement try { if (bIsOID == true) { sOIDName = pFeatCls.OIDFieldName; sSQL = sOIDName + "=" + sValue; } else { lFieldIndex = pFeatCls.Fields.FindField(sFieldName); pField = pFeatCls.Fields.get_Field(lFieldIndex); if (pField.Type == ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString) { sSQL = sFieldName + "='" + sValue + "'"; } else if ((int)pField.Type < 4 | (int)pField.Type == 6) { sSQL = sFieldName + "=" + sValue; } else { functionReturnValue = null; return(functionReturnValue); } } pQueryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilter(); pQueryFilter.WhereClause = sSQL; pFeatCursor = pFeatCls.Search(pQueryFilter, false); functionReturnValue = pFeatCursor; return(functionReturnValue); } catch (System.Runtime.InteropServices.COMException ex) { if (ex.ErrorCode == -2147216117) { MessageBoxEx.Show("失去了与SDE服务器的连接,提取失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); } functionReturnValue = null; return(functionReturnValue); } }
public static double DefaultIndexGrid(ref ESRI.ArcGIS.Geodatabase.IFeatureClass InFC) { int lngNumFeat; int lngSampleSize; ESRI.ArcGIS.Geodatabase.IFields pFields; ESRI.ArcGIS.Geodatabase.IField pField; string strFIDName; string strWhereClause; //int lngCurrFID; ESRI.ArcGIS.Geodatabase.IFeature pFeat; ESRI.ArcGIS.Geodatabase.IFeatureCursor pFeatCursor; ESRI.ArcGIS.Geometry.IEnvelope pFeatEnv; ESRI.ArcGIS.Geodatabase.IQueryFilter pQueryFilter; List <int> pNewCol = new List <int>(); int lngKMax; double dblMaxDelta; dblMaxDelta = 0; double dblMinDelta; dblMinDelta = 1000000000000; double dblSquareness; dblSquareness = 1; const short SampleSize = 1; const short Factor = 1; object[] ColInfo = new object[1]; object[] c0 = new object[4]; c0[0] = "minext"; c0[1] = System.Convert.ToInt16(5); c0[2] = System.Convert.ToInt16(-1); c0[3] = false; ColInfo[0] = c0; lngNumFeat = InFC.FeatureCount(null) - 1; if (lngNumFeat <= 0) { return(1000); } if (InFC.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryMultipoint | InFC.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint) { return(DefaultIndexGridPoint(ref InFC)); } lngSampleSize = lngNumFeat * SampleSize; if (lngSampleSize > 1000) { lngSampleSize = 1000; } pFields = InFC.Fields; // GET the OBJECTID field pField = pFields.get_Field(0); for (int m = 0; m < pFields.FieldCount; m++) { if (pFields.get_Field(m).Name == InFC.OIDFieldName) { pField = pFields.get_Field(m); break; } } strFIDName = pField.Name; for (int i = 1; i <= lngNumFeat; i += System.Convert.ToInt32(lngNumFeat / lngSampleSize)) { pNewCol.Add(i); } for (int j = 0; j <= pNewCol.Count - 1; j += 250) { lngKMax = Min(pNewCol.Count - j, 250); strWhereClause = strFIDName + " IN("; for (int k = 0; k < lngKMax; k++) { strWhereClause = strWhereClause + System.Convert.ToString(pNewCol[(j + k)]) + ","; } //strWhereClause = Mid(strWhereClause, 1, strWhereClause.Length - 1) + ")"; strWhereClause = strWhereClause.Substring(0, strWhereClause.Length - 1) + ")"; pQueryFilter = new ESRI.ArcGIS.Geodatabase.QueryFilter(); pQueryFilter.WhereClause = strWhereClause; pFeatCursor = InFC.Search(pQueryFilter, true); pFeat = pFeatCursor.NextFeature(); while (!(pFeat == null)) { pFeatEnv = pFeat.Extent; if (!pFeatEnv.IsEmpty) { dblMaxDelta = Max(dblMaxDelta, Max((pFeatEnv.Width), (pFeatEnv.Height))); dblMinDelta = Min(dblMinDelta, Min((pFeatEnv.Width), (pFeatEnv.Height))); if (dblMinDelta != 0) { dblSquareness = dblSquareness + ((Min((pFeatEnv.Width), (pFeatEnv.Height)) / (Max((pFeatEnv.Width), (pFeatEnv.Height))))); } else { dblSquareness = dblSquareness + 0.0001; } } pFeat = pFeatCursor.NextFeature(); } } if (((dblSquareness / lngSampleSize) > 0.5)) { return((dblMinDelta + ((dblMaxDelta - dblMinDelta) / 2)) * Factor); } else { return((dblMaxDelta / 2) * Factor); } }