using DevExpress.XtraEditors; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geometry; using KGIS.Plugin.LayerProperty.View.UC_Controls; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KGIS.Plugin.LayerProperty.Utils { public class Util { public static StringBuilder GetCoordinateSystemInfo(ISpatialReference spatialReference) { StringBuilder stringBuilder = new StringBuilder(); if (spatialReference is IGeographicCoordinateSystem) { StringBuilder geographicCoordinateSystemInfo = Util.GetGeographicCoordinateSystemInfo(spatialReference); stringBuilder.Append(geographicCoordinateSystemInfo); } else { if (spatialReference is IProjectedCoordinateSystem) { StringBuilder projectedCoordinateSystemInfo = Util.GetProjectedCoordinateSystemInfo(spatialReference); stringBuilder.Append(projectedCoordinateSystemInfo); } else { if (spatialReference is IUnknownCoordinateSystem) { stringBuilder.AppendLine("未知坐标系统"); } else { if (spatialReference == null) { stringBuilder.AppendLine("无投影"); } } } } return stringBuilder; } private static StringBuilder GetProjectedCoordinateSystemInfo(ISpatialReference spatialReference) { StringBuilder stringBuilder = new StringBuilder(); try { if (spatialReference is IProjectedCoordinateSystem) { IProjectedCoordinateSystem projectedCoordinateSystem = spatialReference as IProjectedCoordinateSystem; ILinearUnit coordinateUnit = projectedCoordinateSystem.CoordinateUnit; string text = (coordinateUnit != null) ? coordinateUnit.Name : "未知"; stringBuilder.AppendLine("投影坐标系统名称:".PadRight(11) + projectedCoordinateSystem.Name); stringBuilder.AppendLine("投影:".PadRight(17) + projectedCoordinateSystem.Projection.Name); stringBuilder.AppendLine("东偏:".PadRight(17) + projectedCoordinateSystem.FalseEasting.ToString()); stringBuilder.AppendLine("北偏:".PadRight(17) + projectedCoordinateSystem.FalseNorthing.ToString()); stringBuilder.AppendLine("缩放因子:".PadRight(15) + projectedCoordinateSystem.ScaleFactor.ToString()); try { stringBuilder.AppendLine("原点纬度:".PadRight(15) + projectedCoordinateSystem.LongitudeOfOrigin.ToString()); } catch { } stringBuilder.AppendLine(string.Concat(new object[] { "直线单位:".PadRight(15), text, "(", projectedCoordinateSystem.CoordinateUnit.MetersPerUnit, ")" })); stringBuilder.AppendLine(""); stringBuilder.AppendLine(Util.GetGeographicCoordinateSystemInfo(projectedCoordinateSystem.GeographicCoordinateSystem).ToString()); } } catch { } return stringBuilder; } private static StringBuilder GetGeographicCoordinateSystemInfo(ISpatialReference spatialReference) { StringBuilder stringBuilder = new StringBuilder(); try { if (spatialReference is IGeographicCoordinateSystem) { IGeographicCoordinateSystem geographicCoordinateSystem = spatialReference as IGeographicCoordinateSystem; IAngularUnit coordinateUnit = geographicCoordinateSystem.CoordinateUnit; string text = (coordinateUnit != null) ? coordinateUnit.Name : "未知"; stringBuilder.AppendLine("地理坐标系统名称:".PadRight(11) + geographicCoordinateSystem.Name); stringBuilder.AppendLine(string.Concat(new object[] { "弧度单位:".PadRight(15), text, "(", geographicCoordinateSystem.CoordinateUnit.RadiansPerUnit, ")" })); stringBuilder.AppendLine(string.Concat(new object[] { "本初子午线:".PadRight(14), geographicCoordinateSystem.PrimeMeridian.Name, "(", geographicCoordinateSystem.PrimeMeridian.Longitude, ")" })); stringBuilder.AppendLine("水准面:".PadRight(16) + geographicCoordinateSystem.Datum.Name); stringBuilder.AppendLine("椭球体:".PadRight(16) + geographicCoordinateSystem.Datum.Spheroid.Name); stringBuilder.AppendLine("长半轴:".PadRight(16) + geographicCoordinateSystem.Datum.Spheroid.SemiMajorAxis.ToString()); stringBuilder.AppendLine("短半轴:".PadRight(16) + geographicCoordinateSystem.Datum.Spheroid.SemiMinorAxis.ToString()); stringBuilder.AppendLine("扁率倒数:".PadRight(15) + geographicCoordinateSystem.Datum.Spheroid.Flattening.ToString()); } } catch { } return stringBuilder; } public static void InitFieldList(ref ComboBoxEdit cmb, IFields fields, string selected) { Util.InitFieldList(ref cmb, fields, selected, false, false, false, false); } public static void InitFieldList(ref ComboBoxEdit cmb, IFields fields, string selected, bool haveNone) { Util.InitFieldList(ref cmb, fields, selected, haveNone, false, false, false); } public static void InitFieldList(ref ComboBoxEdit cmb, IFields fields, string selected, bool haveNone, bool isNumberOnly) { Util.InitFieldList(ref cmb, fields, selected, haveNone, isNumberOnly, false, false); } public static void InitFieldList(ref ComboBoxEdit cmb, IFields fields, string selected, bool haveNone, bool isNumberOnly, bool useAlias) { Util.InitFieldList(ref cmb, fields, selected, haveNone, isNumberOnly, useAlias, true); } public static void InitFieldList(ref ComboBoxEdit cmb, IFields fields, string selected, bool haveNone, bool isNumberOnly, bool useAlias, bool hasObjID) { try { cmb.Properties.Items.Clear(); if (fields != null) { ItemInfo itemInfo = null; IList> list = new List>(); if (haveNone) { itemInfo = new ItemInfo(null, ""); list.Add(itemInfo); } int i = 0; while (i < fields.FieldCount) { IField field = fields.get_Field(i); ItemInfo itemInfo2 = null; if (field.Type == esriFieldType.esriFieldTypeBlob || field.Type == esriFieldType.esriFieldTypeGeometry || field.Type == esriFieldType.esriFieldTypeRaster || field.Type == esriFieldType.esriFieldTypeXML) { goto IL_103; } if ((!isNumberOnly || field.Type == esriFieldType.esriFieldTypeDouble || field.Type == esriFieldType.esriFieldTypeInteger || field.Type == esriFieldType.esriFieldTypeSingle || field.Type == esriFieldType.esriFieldTypeSmallInteger) && (hasObjID || field.Type != esriFieldType.esriFieldTypeOID)) { if (useAlias) { itemInfo2 = new ItemInfo(field, (field.AliasName == "") ? field.Name : field.AliasName); } else { itemInfo2 = new ItemInfo(field, field.Name); } if (itemInfo2 != null) { list.Add(itemInfo2); goto IL_103; } goto IL_103; } IL_136: i++; continue; IL_103: if (field.Name.ToUpper() == selected.ToUpper() || field.AliasName.ToUpper() == selected.ToUpper()) { itemInfo = itemInfo2; goto IL_136; } goto IL_136; } DevExpressControlInitList.InitComboBoxEdit(ref cmb, list, itemInfo); } } catch (Exception ex) { //RdbUtil.AddException(ex); } } public static List GetUniqueValuesManyFields(List fieldNames, ICursor cursor) { List list = new List(); if (cursor == null) { return list; } string text = ""; for (IRow row = cursor.NextRow(); row != null; row = cursor.NextRow()) { text = ""; foreach (IField current in fieldNames) { object obj = row.get_Value(row.Fields.FindField(current.Name)); if (obj == null) { if (text == "") { text = ""; } else { text += ", "; } } else { if (obj.ToString() == "") { obj = ""; } if (text == "") { text = obj.ToString(); } else { text = text + ", " + obj.ToString(); } } } if (!list.Contains(text)) { list.Add(text); } } return list; } } }