You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.2 KiB
91 lines
3.2 KiB
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 |
|
{ |
|
/// <summary> |
|
/// UcClaculationMJView.xaml 的交互逻辑 |
|
/// </summary> |
|
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(); |
|
} |
|
} |
|
}
|
|
|