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.
284 lines
11 KiB
284 lines
11 KiB
using DevExpress.XtraEditors; |
|
using ESRI.ArcGIS.Carto; |
|
using ESRI.ArcGIS.DataSourcesRaster; |
|
using ESRI.ArcGIS.Geodatabase; |
|
using ESRI.ArcGIS.Geometry; |
|
using KGIS.Framework.OpenData.Filter; |
|
using KGIS.Framework.OpenData.InterFace; |
|
using KGIS.Framework.Utils.Helper; |
|
using KGIS.Plugin.LayerProperty.Interface; |
|
using KGIS.Plugin.LayerProperty.Model; |
|
using System; |
|
using System.Text; |
|
|
|
namespace KGIS.Plugin.LayerProperty.View.UC_Controls |
|
{ |
|
public partial class UCDataSourceProperty : XtraUserControl, IUCPropertyPageEx, IPropertyPage |
|
{ |
|
private ILayer m_Layer; |
|
private string SRName; |
|
private int SRType; |
|
private ISpatialReference m_SpatialReference; |
|
private IRasterProperty m_RasterProperty; |
|
private IRasterDataset m_RasterDataset; |
|
private IFeatureClass SelectFC; |
|
private IRasterDataset selectRasterDs; |
|
private bool isDirty; |
|
public IUCPropertyPageEx ucFieldsPropertyPage; |
|
public UCDataSourceProperty() |
|
{ |
|
InitializeComponent(); |
|
} |
|
|
|
public int Priority { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } |
|
public string Title { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } |
|
public bool IsPageDirty |
|
{ |
|
get |
|
{ |
|
return this.isDirty; |
|
} |
|
set |
|
{ |
|
this.isDirty = value; |
|
} |
|
} |
|
|
|
public event System.EventHandler EditorChanged; |
|
|
|
public int Activate() |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
|
|
public void Cancel() |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
|
|
public bool CanWrite2Prop() |
|
{ |
|
return true; |
|
} |
|
|
|
public void Deactivate() |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
|
|
public void SetDefaultValue(object value) |
|
{ |
|
} |
|
public void InitUC(object layerProperty) |
|
{ |
|
try |
|
{ |
|
if (layerProperty is ILayer) |
|
{ |
|
this.m_Layer = (layerProperty as ILayer); |
|
} |
|
IGeoDataset geoDataset = this.m_Layer as IGeoDataset; |
|
if (geoDataset is IFeatureLayer) |
|
{ |
|
this.groupControl1.Visible = false; |
|
SetMemCoordinateSysText((this.m_Layer as IFeatureLayer).FeatureClass); |
|
//this.GetGeoDatasetInfo(this.m_Layer as IGeoDataset); |
|
} |
|
else |
|
{ |
|
if (this.m_Layer is IRasterLayer) |
|
{ |
|
this.groupControl1.Visible = true; |
|
this.InitForm(((this.m_Layer as IRasterLayer).Raster as IRaster2).RasterDataset); |
|
} |
|
else |
|
{ |
|
this.groupControl1.Visible = false; |
|
//this.GetGeoDatasetInfo(geoDataset); |
|
} |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
public void Write2Prop() |
|
{ |
|
if (SelectFC != null) |
|
{ |
|
(this.m_Layer as IFeatureLayer).FeatureClass = SelectFC; |
|
} |
|
if (selectRasterDs != null && this.m_Layer is IRasterLayer) |
|
{ |
|
(m_Layer as IRasterLayer).CreateFromDataset(selectRasterDs); |
|
} |
|
} |
|
|
|
|
|
private StringBuilder GetDataSourceInfoByFC(IFeatureClass featureClass) |
|
{ |
|
StringBuilder stringBuilder = new StringBuilder(); |
|
|
|
stringBuilder.AppendLine("数据类型:".PadRight(15) + (featureClass as FeatureClass).Category); |
|
if ((featureClass as FeatureClass).Workspace != null) |
|
{ |
|
if ((featureClass as FeatureClass).Workspace.WorkspaceFactory.WorkspaceType == esriWorkspaceType.esriRemoteDatabaseWorkspace) |
|
{ |
|
stringBuilder.AppendLine("服务器:".PadRight(16) + (featureClass as FeatureClass).Workspace.ConnectionProperties.GetProperty("Server".ToString())); |
|
stringBuilder.AppendLine("用户名:".PadRight(16) + (featureClass as FeatureClass).Workspace.ConnectionProperties.GetProperty("User".ToString())); |
|
stringBuilder.AppendLine("实例名:".PadRight(16) + (featureClass as FeatureClass).Workspace.ConnectionProperties.GetProperty("Instance".ToString())); |
|
stringBuilder.AppendLine("版本:".PadRight(17) + (featureClass as FeatureClass).Workspace.ConnectionProperties.GetProperty("Version".ToString())); |
|
} |
|
else |
|
{ |
|
stringBuilder.AppendLine("数据位置:".PadRight(15) + (featureClass as FeatureClass).Workspace.PathName); |
|
} |
|
} |
|
if (featureClass.FeatureDataset != null) |
|
{ |
|
stringBuilder.AppendLine("要素集:".PadRight(16) + featureClass.FeatureDataset.Name); |
|
} |
|
stringBuilder.AppendLine("数据要素类:".PadRight(14) + (featureClass as FeatureClass).Name); |
|
stringBuilder.AppendLine("要素类型:".PadRight(15) + featureClass.FeatureType.ToString().Substring(6)); |
|
stringBuilder.AppendLine("几何类型:".PadRight(15) + featureClass.ShapeType.ToString().Substring(12)); |
|
stringBuilder.AppendLine(""); |
|
return stringBuilder; |
|
|
|
} |
|
private void SetMemCoordinateSysText(IFeatureClass featureClass) |
|
{ |
|
try |
|
{ |
|
m_SpatialReference = (featureClass as IGeoDataset).SpatialReference; |
|
IEnvelope extent = (featureClass as IGeoDataset).Extent; |
|
//double xmin = 0; |
|
//double xmax = 0; |
|
//double ymin = 0; |
|
//double ymax = 0; |
|
//m_SpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax); |
|
//extent.XMin = xmin; |
|
//extent.XMax = xmax; |
|
//extent.YMin = ymin; |
|
//extent.YMax = ymax; |
|
this.ucExtentSet1.SetEnvelope(extent, true); |
|
} |
|
catch |
|
{ |
|
} |
|
StringBuilder dataSourceInfo = GetDataSourceInfoByFC(featureClass); |
|
StringBuilder coordinateSystemInfo = Utils.Util.GetCoordinateSystemInfo(m_SpatialReference); |
|
dataSourceInfo.Append(coordinateSystemInfo); |
|
this.memCoordinateSys.Text = dataSourceInfo.ToString(); |
|
} |
|
private void InvokeEditValueChanged(object sender, System.EventArgs e) |
|
{ |
|
if (this.EditorChanged != null) |
|
{ |
|
this.EditorChanged(sender, e); |
|
} |
|
this.isDirty = true; |
|
} |
|
/// <summary> |
|
/// 设置数据源 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
private void BtnSetDataSource_Click(object sender, System.EventArgs e) |
|
{ |
|
try |
|
{ |
|
object obj = GetGisFileSource(); |
|
if (obj == null) |
|
return; |
|
if (obj is IFeatureClass) |
|
{ |
|
SelectFC = obj as IFeatureClass; |
|
if (SelectFC != null && (SelectFC as IGeoDataset) != null) |
|
{ |
|
if (!KGIS.Framework.AE.GeoDBAPI.SpatialReferenceCompare2((SelectFC as IGeoDataset).SpatialReference, null)) |
|
{ |
|
MessageHelper.ShowTips("选择要素类与当前工程坐标参考不一致!"); |
|
return; |
|
} |
|
SetMemCoordinateSysText(SelectFC); |
|
InvokeEditValueChanged(sender, e); |
|
|
|
if (ucFieldsPropertyPage != null && ucFieldsPropertyPage is UCFieldsPropertyPage) |
|
{ |
|
(ucFieldsPropertyPage as UCFieldsPropertyPage).InitFields(SelectFC.Fields); |
|
} |
|
} |
|
} |
|
else if (obj is IRasterDataset) |
|
{ |
|
//修改人:李进营 修改时间:2018-09-19 增加栅格图层设置数据源无效问题 |
|
selectRasterDs = (obj as IRasterDataset); |
|
this.InitForm(selectRasterDs); |
|
InvokeEditValueChanged(sender, e); |
|
} |
|
} |
|
catch (Exception ex) |
|
{ |
|
//RdbUtil.AddException(ex); |
|
} |
|
} |
|
|
|
private object GetGisFileSource() |
|
{ |
|
try |
|
{ |
|
KGIS.Framework.OpenData.Control.OpenDataDialog pDialog = new KGIS.Framework.OpenData.Control.OpenDataDialog(); |
|
ISpatialDataObjectFilter pOFilter; |
|
pOFilter = new FilterDatasetsAndLayers(); |
|
pDialog.AddFilter(pOFilter, true); |
|
pDialog.Title = "选择矢量图层数据"; |
|
pDialog.AllowMultiSelect = false; |
|
pDialog.RestoreLocation = true; |
|
pDialog.StartLocation = pDialog.FinalLocation; |
|
if (pDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && pDialog.Selection.Count != 0) |
|
{ |
|
foreach (ISpatialDataObject distObj in pDialog.Selection) |
|
{ |
|
//修改人:李进营 修改时间:2018-09-19 修复栅格数据选区无效问题 |
|
if (distObj.DatasetType == esriDatasetType.esriDTFeatureClass || distObj.DatasetType == esriDatasetType.esriDTRasterDataset) |
|
{ |
|
return (distObj.DatasetName as ESRI.ArcGIS.esriSystem.IName).Open(); |
|
} |
|
} |
|
} |
|
return null; |
|
} |
|
catch (Exception) |
|
{ |
|
return null; |
|
} |
|
} |
|
private void InitForm(IRasterDataset pRasterDataset) |
|
{ |
|
try |
|
{ |
|
if (pRasterDataset != null) |
|
{ |
|
this.m_RasterDataset = pRasterDataset; |
|
IDataset dataset = (IDataset)this.m_RasterDataset; |
|
ESRI.ArcGIS.Geodatabase.IWorkspace workspace = dataset.Workspace; |
|
if (workspace.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) |
|
{ |
|
this.m_RasterProperty = new RemoteRasterPropetry(this.m_RasterDataset); |
|
} |
|
else |
|
{ |
|
this.m_RasterProperty = new LocalRasterPropetry(this.m_RasterDataset); |
|
} |
|
this.propertyRaster.SelectedObject = this.m_RasterProperty; |
|
this.propertyRaster.RetrieveFields(); |
|
} |
|
} |
|
catch (Exception) |
|
{ |
|
} |
|
} |
|
} |
|
}
|
|
|