using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geodatabase; using KGIS.Framework.AE.ExtensionMethod; using KGIS.Framework.Platform.Helper; using KGIS.Framework.Utils; using KGIS.Framework.Utils.ExtensionMethod; using KGIS.Framework.Utils.Helper; using System; using System.Runtime.InteropServices; using System.Windows; using KUI.Windows; namespace Kingo.Plugin.MapView.Views { /// /// UcClaculationMJView.xaml 的交互逻辑 /// public partial class UcClaculationMJView : BaseWindow { IFeatureLayer _TarLayer = null; public UcClaculationMJView(object pLayer) { InitializeComponent(); if (pLayer is IFeatureLayer) { _TarLayer = pLayer as IFeatureLayer; IFields fields = _TarLayer.FeatureClass.Fields; for (int i = 0; i < fields.FieldCount; i++) { IField field = fields.Field[i]; if (!field.Name.EndsWith("MJ")) continue; if (field.Type != esriFieldType.esriFieldTypeDouble) continue; combField.Items.Add(string.Format("{0}({1})", field.AliasName, field.Name)); } } } private void BtnOK_Click(object sender, RoutedEventArgs e) { IFeatureCursor cursor = null; IFeature f = null; try { if (combField.SelectedItem == null) return; this.ShowLoading("正在进行椭球面积计算......", 0, 0); string FieldInfo = combField.SelectedItem.ToTrim(); FieldInfo = FieldInfo.Substring(FieldInfo.IndexOf("(") + 1, FieldInfo.IndexOf(")") - FieldInfo.IndexOf("(") - 1); cursor = _TarLayer.FeatureClass.Update(null, false); int count = _TarLayer.FeatureClass.FeatureCount(null); ProgressHelper.CountProgress = count; int num = 0; int idx = _TarLayer.FeatureClass.FindField(FieldInfo); while ((f = cursor.NextFeature()) != null) { if (num % 100 == 0 || num == count) { ProgressHelper.CurrentProgress = num; } if (idx == -1) continue; double mj = f.ShapeCopy.GetEllipseArea(); f.Value[idx] = mj.ToDouble(2); cursor.UpdateFeature(f); Marshal.ReleaseComObject(f); } this.CloseLoading(); MessageHelper.ShowTips("椭球面积计算成功!"); this.Close(); } catch (Exception ex) { this.CloseLoading(); MessageHelper.Show("椭球面积计算失败!"); LogAPI.Debug("椭球面积计算时发生异常:"); LogAPI.Debug(ex); } finally { if (cursor != null) Marshal.ReleaseComObject(cursor); } } private void BtnCancel_Click(object sender, RoutedEventArgs e) { this.Close(); } } }