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.
251 lines
11 KiB
251 lines
11 KiB
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<IField, string> itemInfo = null; |
|
IList<ItemInfo<IField, string>> list = new List<ItemInfo<IField, string>>(); |
|
if (haveNone) |
|
{ |
|
itemInfo = new ItemInfo<IField, string>(null, "<none>"); |
|
list.Add(itemInfo); |
|
} |
|
int i = 0; |
|
while (i < fields.FieldCount) |
|
{ |
|
IField field = fields.get_Field(i); |
|
ItemInfo<IField, string> 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<IField, string>(field, (field.AliasName == "") ? field.Name : field.AliasName); |
|
} |
|
else |
|
{ |
|
itemInfo2 = new ItemInfo<IField, string>(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<IField, string>.InitComboBoxEdit(ref cmb, list, itemInfo); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
public static List<string> GetUniqueValuesManyFields(List<IField> fieldNames, ICursor cursor) |
|
{ |
|
List<string> list = new List<string>(); |
|
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 = "<null>"; |
|
} |
|
else |
|
{ |
|
text += ", <null>"; |
|
} |
|
} |
|
else |
|
{ |
|
if (obj.ToString() == "") |
|
{ |
|
obj = "<null>"; |
|
} |
|
if (text == "") |
|
{ |
|
text = obj.ToString(); |
|
} |
|
else |
|
{ |
|
text = text + ", " + obj.ToString(); |
|
} |
|
} |
|
} |
|
if (!list.Contains(text)) |
|
{ |
|
list.Add(text); |
|
} |
|
} |
|
return list; |
|
} |
|
} |
|
}
|
|
|