/// <summary> ///测试getFeature与getFeatures /// </summary> /// <param name="featureCls"></param> /// <param name="oids"></param> /// <param name="fieldIndex"></param> public void SearchById(IFeatureClass featureCls, int[] oids, int fieldIndex) { foreach (var oid in oids) { var feature = featureCls.GetFeature(oid); Console.WriteLine("oid:" + feature.get_Value(fieldIndex)); } using (var comReleaser = new ComReleaser()) { IFeatureCursor featureCursor = featureCls.GetFeatures(oids, true);; IFeature feature = featureCursor.NextFeature(); while (feature != null) { Console.WriteLine("oid:" + feature.get_Value(fieldIndex)); feature = featureCursor.NextFeature(); } } using (var comReleaser = new ComReleaser()) { IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(featureCls, oids, true);; IFeature feature = featureCursor.NextFeature(); while (feature != null) { Console.WriteLine("oid:" + feature.get_Value(fieldIndex)); feature = featureCursor.NextFeature(); } } }
public override bool CalculateIndex(ProgressBar progress) { if (indexName == "" || strFormula == "") { return(false); } try { progress.Maximum = baseData.zoneValue.Count; progress.Value = 0; for (int i = 0; i < baseData.zoneValue.Count; i++) { List <string> tempData = new List <string>(); double tempResut = 0; int[] oidlist = baseData.patchIDArray[i]; using (ComReleaser comReleaser = new ComReleaser()) { //获取每个分区的要素集; IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(baseData.zoneLCA_FC, ref oidlist, true); tempData = customCal.SearchData(featureCursor); tempResut = calculator.CalculateFormula(tempData); resultList.Add(tempResut); } progress.Value++; } } catch (System.Exception ex) { return(false); } return(true); }
/// <summary> /// 重写计算指标 /// </summary> /// <returns></returns> public override bool CalculateIndex(ProgressBar progress) { try { //计算每一个分区 List <string> zones = baseData.zoneValue; progress.Maximum = zones.Count * patchClassCac.Count; for (int i = 0; i < zones.Count; i++) { List <List <double> > temp = new List <List <double> >(); string zid = zones[i]; int[] oidlist = baseData.patchIDArray[i]; using (ComReleaser comReleaser = new ComReleaser()) { for (int j = 0; j < patchClassCac.Count; j++) { IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(baseData.zoneLCA_FC, ref oidlist, true); temp.Add(patchClassCac[j].CaculateClassIndex(featureCursor, baseData)); progress.Value++; } } result_list.Add(temp); } } catch (System.Exception ex) { return(false); } return(true); }
private void setDynamicDefaults(IObject inObject, string mode) { try { //Convert row to feature (test for feature is null before using - this could be a table update) IFeature inFeature = inObject as IFeature; // Skip Orphan Junctions (saves time) if (inFeature != null) { INetworkFeature inNetFeat = inObject as INetworkFeature; if ((inNetFeat != null) && (inFeature.Class.ObjectClassID == inNetFeat.GeometricNetwork.OrphanJunctionFeatureClass.ObjectClassID)) return; } //Get cursor to dynamic values table retriving only ICursor tabCursor; getDefaultRows(inObject, out tabCursor); IRow row = null; if (tabCursor != null) row = tabCursor.NextRow(); //for each row in the matching rows (matched by table name or wildcard) returned from the config table while (row != null) { //get fieldname string fieldName = row.get_Value(dynTargetField).ToString(); //if this field is found in the feature/object being added or modified... int fieldNum = inObject.Fields.FindField(fieldName); if (fieldNum > -1) { // get requested method and any data parameters string valMethod = row.get_Value(dynMethodField).ToString(); string valData = row.get_Value(dynDataField).ToString(); switch (mode) { case "OnCreate": //Continue to next field in config table if create events were not requested if (row.get_Value(dynCreateField).ToString() == "0") { row = tabCursor.NextRow(); continue; } break; case "OnChange": // Collect value for changed feature (stored for LAST VALUE method) IRowChanges inChanges = inObject as IRowChanges; bool changed = inChanges.get_ValueChanged(fieldNum); if (changed) lastValueProperties.SetProperty(fieldName, inObject.get_Value(fieldNum)); //Continue to next field in config table if change events were not requested if (row.get_Value(dynChangeField).ToString() == "0") { row = tabCursor.NextRow(); continue; } break; } // set values as specified switch (valMethod) { case "TIMESTAMP": inObject.set_Value(fieldNum, DateTime.Now); break; case "LAST_VALUE": if (mode == "OnCreate") { //if (inObject.get_Value(fieldNum) == null) //{ object lastValue = lastValueProperties.GetProperty(fieldName); if (lastValue != null) inObject.set_Value(fieldNum, lastValue); //} } break; case "FIELD": // verify that field to copy exists int fieldCopy = inObject.Fields.FindField(valData as string); if (fieldCopy > -1) { //copy value only if current field is empty string currentValue = inObject.get_Value(fieldNum).ToString(); if (currentValue == "") inObject.set_Value(fieldNum, inObject.get_Value(fieldCopy)); } break; case "CURRENT_USER": if (lastEditorName == null) lastEditorName = getCurrentUser(); inObject.set_Value(fieldNum, lastEditorName); break; case "GUID": if (mode == "OnCreate") // SHould only set this once on create to give the object a unique value { object currentValue = inObject.get_Value(fieldNum); if (DBNull.Value == currentValue) // Do not overwrite if someone else has already generated { Guid g = Guid.NewGuid(); inObject.set_Value(fieldNum, g.ToString("B").ToUpper()); } } break; case "EXPRESSION": if (mode == "OnCreate") { if (inFeature != null & valData != null) { try { int calcField = inFeature.Fields.FindField(fieldName); //if (inFeature.get_Value(calcField) == null) //{ int[] fids = { inFeature.OID }; IGeoDatabaseBridge gdbBridge = new GeoDatabaseHelperClass(); IFeatureCursor fCursor = (IFeatureCursor)gdbBridge.GetFeatures((IFeatureClass)inFeature.Class, ref fids, false); ICalculator calc = new CalculatorClass(); calc.Expression = valData; calc.Field = fieldName; calc.Cursor = (ICursor)fCursor; calc.ShowErrorPrompt = false; ICalculatorCallback calculatorCallback = new CalculatorCallback(); calc.Callback = calculatorCallback; calc.Calculate(); calculatorCallback = null; //} } catch { } } } break; default: break; } } row = tabCursor.NextRow(); } if (null != tabCursor) { System.Runtime.InteropServices.Marshal.ReleaseComObject(tabCursor); } } catch (Exception ex) { _logHelper.addLogEntry(DateTime.Now.ToString(), "ERROR", "Error applying dynamic defaults.", ex.ToString()); MessageBox.Show("Error: \n" + ex.ToString()); } }
static void Main(string[] args) { //ESRI License Initializer generated code. m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB }, new esriLicenseExtensionCode[] { }); //ESRI License Initializer generated code. IWorkspaceFactory2 wsf2 = new SdeWorkspaceFactoryClass() as IWorkspaceFactory2; IWorkspace ws = wsf2.OpenFromFile(@"C:\Users\User123\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\ConnectionToSQLServer.sde", 0); IFeatureWorkspace fws = ws as IFeatureWorkspace; ESRI.ArcGIS.Geodatabase.IFeatureClass fc = fws.OpenFeatureClass("DB_101.DBO.Points_Projected_UTMz11NCopy4_3"); ITableWrite tw = fc as ITableWrite; int numRows = 300; Int32[] int32Array = new Int32[numRows]; for (Int32 i = 0; i < numRows; i++) { int32Array[i] = i; } IGeoDatabaseBridge2 gdbBridge2 = new GeoDatabaseHelperClass(); //IGeoDatabaseBridge2 fc_gdbBridge2 = fc as IGeoDatabaseBridge2; bool Recycling = false; IFeatureCursor featCursor = gdbBridge2.GetFeatures(fc, ref int32Array, Recycling); ISet setOfRows = new SetClass(); IFeature feat; feat = featCursor.NextFeature(); while (feat != null) { IObject obj = feat as IObject; setOfRows.Add(obj); feat = featCursor.NextFeature(); } // TEST 1: ITableWrite.DeleteRows //------------------------------- DateTime dateTimeNow_Start = System.DateTime.Now; tw.DeleteRows(setOfRows); DateTime dateTimeNow_End = System.DateTime.Now; Double timeDifference = dateTimeNow_End.Subtract(dateTimeNow_Start).Milliseconds; System.Diagnostics.Debug.WriteLine("ITableWrite.DeleteRows(" + numRows + "rows): Processing time = " + timeDifference + " Milliseconds."); // TEST 2: ITableWrite.RemoveRows //------------------------------- //DateTime dateTimeNow_Start = System.DateTime.Now; //tw.RemoveRows(setOfRows); //DateTime dateTimeNow_End = System.DateTime.Now; //Double timeDifference = dateTimeNow_End.Subtract(dateTimeNow_Start).Milliseconds; //System.Diagnostics.Debug.WriteLine("ITableWrite.RemoveRows(" + numRows + "rows): Processing time = " + // timeDifference + " Milliseconds."); //Do not make any call to ArcObjects after ShutDownApplication() m_AOLicenseInitializer.ShutdownApplication(); }
static void Main(string[] args) { //ESRI License Initializer generated code. m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeEngine, esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB }, new esriLicenseExtensionCode[] { }); //ESRI License Initializer generated code. IWorkspaceFactory2 wsf2 = new SdeWorkspaceFactoryClass() as IWorkspaceFactory2; IWorkspace ws = wsf2.OpenFromFile(@"C:\Users\User123\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\ConnectionToSQLServer.sde", 0); IFeatureWorkspace fws = ws as IFeatureWorkspace; ESRI.ArcGIS.Geodatabase.IFeatureClass fc = fws.OpenFeatureClass("DB_101.DBO.Points_Projected_UTMz11NCopy4_3"); ITableWrite tw = fc as ITableWrite; int numRows = 300; Int32[] int32Array = new Int32[numRows]; for (Int32 i = 0; i < numRows; i++) { int32Array[i] = i; } IGeoDatabaseBridge2 gdbBridge2 = new GeoDatabaseHelperClass(); //IGeoDatabaseBridge2 fc_gdbBridge2 = fc as IGeoDatabaseBridge2; bool Recycling = false; IFeatureCursor featCursor = gdbBridge2.GetFeatures(fc, ref int32Array, Recycling); ISet setOfRows = new SetClass(); IFeature feat; feat = featCursor.NextFeature(); while (feat != null) { IObject obj = feat as IObject; setOfRows.Add(obj); feat = featCursor.NextFeature(); } // TEST 1: ITableWrite.DeleteRows //------------------------------- DateTime dateTimeNow_Start = System.DateTime.Now; tw.DeleteRows(setOfRows); DateTime dateTimeNow_End = System.DateTime.Now; Double timeDifference = dateTimeNow_End.Subtract(dateTimeNow_Start).Milliseconds; System.Diagnostics.Debug.WriteLine("ITableWrite.DeleteRows(" + numRows + "rows): Processing time = " + timeDifference + " Milliseconds."); // TEST 2: ITableWrite.RemoveRows //------------------------------- //DateTime dateTimeNow_Start = System.DateTime.Now; //tw.RemoveRows(setOfRows); //DateTime dateTimeNow_End = System.DateTime.Now; //Double timeDifference = dateTimeNow_End.Subtract(dateTimeNow_Start).Milliseconds; //System.Diagnostics.Debug.WriteLine("ITableWrite.RemoveRows(" + numRows + "rows): Processing time = " + // timeDifference + " Milliseconds."); //Do not make any call to ArcObjects after ShutDownApplication() m_AOLicenseInitializer.ShutdownApplication(); }
public override bool CalculateIndex(ProgressBar progress) { try { progress.Maximum = baseData.zoneValue.Count; progress.Value = 0; zoneArea = new ZoneClassArea(baseData); for (int i = 0; i < baseData.zoneValue.Count; i++) { List <double> temp = new List <double>(); int[] oidlist = baseData.patchIDArray[i]; using (ComReleaser comReleaser = new ComReleaser()) { SCLASSAREA ClassArea = new SCLASSAREA(); //定义分区结构体; //获取每个分区的要素集; IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(baseData.zoneLCA_FC, ref oidlist, true); ClassArea = zoneArea.StatisticClassArea(featureCursor); ClassArea.TotalArea = baseData.zoneArea[i]; //普通生态环境评价指标计算; if (indexNameList[0].Count > 0) { dt_Popualtion = MainForm.dt_Population; if (dt_Popualtion != null) { for (int j = 0; j < dt_Popualtion.Rows.Count; j++) { if (baseData.zoneValue[i].ToString() == dt_Popualtion.Rows[j][0].ToString()) { population = Convert.ToDouble(dt_Popualtion.Rows[j][1].ToString()); } } } commonIndex = new CommonEcoIndex(ClassArea, indexNameList[0]); commonIndex.ComEcoIndexCal(); temp.AddRange(commonIndex.comEcoIndexResult); } //生态功能区生态环境评价指标计算; if (indexNameList[1].Count > 0) { specialIndex = new SpecialEcoIndex(ClassArea, indexNameList[1]); specialIndex.SpecialEcoIndexCal(); temp.AddRange(specialIndex.speEcoIndexResult); } //自然保护区生态环境评价指标计算; if (indexNameList[2].Count > 0) { natureIndex = new NatureEcoIndex(ClassArea, indexNameList[2]); natureIndex.NatureEcoIndexCal(); temp.AddRange(natureIndex.natEcoIndexResult); } progress.Value++; } indexCalResult.Add(temp); } } catch (System.Exception ex) { return(false); } return(true); }
private void setDynamicDefaults(IObject inObject, string mode) { try { //Convert row to feature (test for feature is null before using - this could be a table update) IFeature inFeature = inObject as IFeature; // Skip Orphan Junctions (saves time) if (inFeature != null) { INetworkFeature inNetFeat = inObject as INetworkFeature; if ((inNetFeat != null) && (inFeature.Class.ObjectClassID == inNetFeat.GeometricNetwork.OrphanJunctionFeatureClass.ObjectClassID)) { return; } } //Get cursor to dynamic values table retriving only ICursor tabCursor; getDefaultRows(inObject, out tabCursor); IRow row = null; if (tabCursor != null) { row = tabCursor.NextRow(); } //for each row in the matching rows (matched by table name or wildcard) returned from the config table while (row != null) { //get fieldname string fieldName = row.get_Value(dynTargetField).ToString(); //if this field is found in the feature/object being added or modified... int fieldNum = inObject.Fields.FindField(fieldName); if (fieldNum > -1) { // get requested method and any data parameters string valMethod = row.get_Value(dynMethodField).ToString(); string valData = row.get_Value(dynDataField).ToString(); switch (mode) { case "OnCreate": //Continue to next field in config table if create events were not requested if (row.get_Value(dynCreateField).ToString() == "0") { row = tabCursor.NextRow(); continue; } break; case "OnChange": // Collect value for changed feature (stored for LAST VALUE method) IRowChanges inChanges = inObject as IRowChanges; bool changed = inChanges.get_ValueChanged(fieldNum); if (changed) { lastValueProperties.SetProperty(fieldName, inObject.get_Value(fieldNum)); } //Continue to next field in config table if change events were not requested if (row.get_Value(dynChangeField).ToString() == "0") { row = tabCursor.NextRow(); continue; } break; } // set values as specified switch (valMethod) { case "TIMESTAMP": inObject.set_Value(fieldNum, DateTime.Now); break; case "LAST_VALUE": if (mode == "OnCreate") { //if (inObject.get_Value(fieldNum) == null) //{ object lastValue = lastValueProperties.GetProperty(fieldName); if (lastValue != null) { inObject.set_Value(fieldNum, lastValue); } //} } break; case "FIELD": // verify that field to copy exists int fieldCopy = inObject.Fields.FindField(valData as string); if (fieldCopy > -1) { //copy value only if current field is empty string currentValue = inObject.get_Value(fieldNum).ToString(); if (currentValue == "") { inObject.set_Value(fieldNum, inObject.get_Value(fieldCopy)); } } break; case "CURRENT_USER": if (lastEditorName == null) { lastEditorName = getCurrentUser(); } inObject.set_Value(fieldNum, lastEditorName); break; case "GUID": if (mode == "OnCreate") // SHould only set this once on create to give the object a unique value { object currentValue = inObject.get_Value(fieldNum); if (DBNull.Value == currentValue) // Do not overwrite if someone else has already generated { Guid g = Guid.NewGuid(); inObject.set_Value(fieldNum, g.ToString("B").ToUpper()); } } break; case "EXPRESSION": if (mode == "OnCreate") { if (inFeature != null & valData != null) { try { int calcField = inFeature.Fields.FindField(fieldName); //if (inFeature.get_Value(calcField) == null) //{ int[] fids = { inFeature.OID }; IGeoDatabaseBridge gdbBridge = new GeoDatabaseHelperClass(); IFeatureCursor fCursor = (IFeatureCursor)gdbBridge.GetFeatures((IFeatureClass)inFeature.Class, ref fids, false); ICalculator calc = new CalculatorClass(); calc.Expression = valData; calc.Field = fieldName; calc.Cursor = (ICursor)fCursor; calc.ShowErrorPrompt = false; ICalculatorCallback calculatorCallback = new CalculatorCallback(); calc.Callback = calculatorCallback; calc.Calculate(); calculatorCallback = null; //} } catch { } } } break; default: break; } } row = tabCursor.NextRow(); } if (null != tabCursor) { System.Runtime.InteropServices.Marshal.ReleaseComObject(tabCursor); } } catch (Exception ex) { _logHelper.addLogEntry(DateTime.Now.ToString(), "ERROR", "Error applying dynamic defaults.", ex.ToString()); MessageBox.Show("Error: \n" + ex.ToString()); } }
/// <summary> /// 重写计算指标 /// </summary> /// <returns></returns> public override bool CalculateIndex(ProgressBar progress) { try { //计算每一个分区 List <string> zones = baseData.zoneValue; progress.Maximum = zones.Count * patchLandCac.Count; for (int i = 0; i < zones.Count; i++) { List <double> temp = new List <double>(); string zid = zones[i]; int[] oidlist = baseData.patchIDArray[i]; double zoneArea = baseData.zoneArea[i]; double zoneLength = 0.0; double zoneAreaTrue = 0.0; if (baseData.zone_FC != null) { zoneLength = (double)baseData.zone_FC.GetFeature(baseData.zoneObjectID[i]).get_Value(baseData.perimeterIndex_zone); zoneAreaTrue = (double)baseData.zone_FC.GetFeature(baseData.zoneObjectID[i]).get_Value(baseData.areaIndex_zone); } using (ComReleaser comReleaser = new ComReleaser()) { for (int j = 0; j < patchLandCac.Count; j++) { IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(baseData.zoneLCA_FC, ref oidlist, true); switch (patchLandCac[j].Name()) { case "UMeshIndex": temp.Add(patchLandCac[j].CaculateLandIndex(featureCursor, baseData) / zoneAreaTrue * 100); break; case "MeshIndex": temp.Add(patchLandCac[j].CaculateLandIndex(featureCursor, baseData) / zoneAreaTrue * 0.000001); break; case "MEffectMeshArea": temp.Add(patchLandCac[j].CaculateLandIndex(featureCursor, baseData) / zoneAreaTrue * 0.000001); break; case "TotalEdge": temp.Add((patchLandCac[j].CaculateLandIndex(featureCursor, baseData) - zoneLength) * 0.5 + zoneLength); break; case "TotalArea": temp.Add(zoneArea); break; case "EdgeDensity": temp.Add(((patchLandCac[j].CaculateLandIndex(featureCursor, baseData) - zoneLength) * 0.5 + zoneLength) / zoneArea); break; default: temp.Add(patchLandCac[j].CaculateLandIndex(featureCursor, baseData)); break; } progress.Value++; } } result_list.Add(temp); } } catch (System.Exception ex) { return(false); } return(true); }
private List <List <double> > GetData(List <string> query) { string strA = "Area"; string strP = "Perimeter"; List <List <double> > data = null; #region 查询每个分区的所需数据 for (int i = 0; i < baseData.zoneValue.Count; i++) { int[] oidlist = baseData.patchIDArray[i]; List <double> eachArea = null; using (ComReleaser comReleaser = new ComReleaser()) { IGeoDatabaseBridge geodatabaseBridge = new GeoDatabaseHelperClass(); //每个分区的要素集; IFeatureCursor featureCursor = geodatabaseBridge.GetFeatures(baseData.zoneLCA_FC, ref oidlist, true); IFeature pFeature = null; #region 根据计算公式中的查询条件获取当前分区的数据 for (int j = 0; j < query.Count; j++) { double zoneData = 0; double tempData = 0; string str = query[j].Substring(query[j].IndexOf("'") + 1, query[j].LastIndexOf("'") - query[j].IndexOf("'") - 1); if (str == "0000") { //确认查询的是面积; if (query[j].IndexOf(strA) > -1) { tempData = baseData.areaIndex; } //确认查询的是周长; else if (query[j].IndexOf(strP) > -1) { tempData = baseData.perimeterIndex; } eachArea.Add(tempData); } else { while ((pFeature = featureCursor.NextFeature()) != null) { //确认查询的是面积; if (query[j].IndexOf(strA) > -1) { tempData = (double)pFeature.get_Value(baseData.areaIndex); } //确认查询的是周长; else if (query[j].IndexOf(strP) > -1) { tempData = (double)pFeature.get_Value(baseData.perimeterIndex); } string code = pFeature.get_Value(baseData.codeIndex).ToString(); if (code == str) { zoneData += tempData; } } eachArea.Add(zoneData); } } #endregion } data.Add(eachArea); } #endregion return(data); }