|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|