using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ESRI.ArcGIS.Geodatabase;
namespace Kingo.RuleCheck.XJRuleCheck
{
///
/// 数学基础规范性检查
///
public class SJJCCheck_DTB : RuleCheckBase_DTB
{
public SJJCCheck_DTB()
{
var list = GetConfigList("SJJCCheck_DTB");
if (list.Count > 0)
ruleMethodNames = list;
}
private List ruleMethodNames = new List()
{
"JC001"
//, "JC002", "JC003"
};
public override List ExcuteCheck(string sourePath, IWorkspace workspace)
{
return this.StartCheck(sourePath, workspace, ruleMethodNames);
}
public override List ExcuteCheck(IWorkspace workspace, List layerNames, List dataSetNames)
{
return this.StartCheck(workspace, ruleMethodNames, layerNames, dataSetNames);
}
public override List ExcuteCheck(string sourePath, Dictionary workspace)
{
return this.StartCheck(sourePath, workspace, ruleMethodNames);
}
public override List ExcuteCheck(string tbbsm, string sourePath, Dictionary workspace)
{
return this.StartCheck(tbbsm, sourePath, workspace, ruleMethodNames);
}
///
/// 矢量图形平面坐标系检查
///
///
public List JC001()
{
List result = new List();
try
{
if (DicFeatureClass == null || !DicFeatureClass.ContainsKey("JC_DLTB") || DicFeatureClass["JC_DLTB"] == null)
{
throw new Exception("未找到“基础_地类图斑”层!");
//return result;
}
IFeatureClass featureClass = DicFeatureClass["JC_DLTB"];
string name = (featureClass as IGeoDataset).SpatialReference.Name.ToUpper();
if (!name.StartsWith("CGCS2000"))
{
result.Add(new RuleEntity()
{
ErrorId = "-1",
CheckObject = "内业预处理、单图斑建库所有矢量图层",
ErrorTip = $"【基础_地类图斑】坐标系错误,未采用2000国家大地坐标系",
ErrorType = "一类错误",
RuleCode = "JC001",
RuleContent = "检查矢量数据是否采用2000 国家大地坐标系,若不是,认定为错误图斑。",
RuleName = "矢量图形平面坐标系检查"
});
}
if (!name.Contains("GK") || !name.Contains("CGCS2000_3"))
{
result.Add(new RuleEntity()
{
ErrorId = "-1",
CheckObject = "内业预处理、单图斑建库所有矢量图层",
ErrorTip = $"【基础_地类图斑】投影方式错误,未采用高斯-克吕格投影,或按 3°分带",
ErrorType = "一类错误",
RuleCode = "JC003",
RuleContent = "检查矢量数据是否采用高斯-克吕格投影,并按 3°分带,若不是,认定为错误图斑。",
RuleName = "矢量图形投影方式检查"
});
}
//IWorkspace workspace = this.DicFeatureClass.FirstOrDefault(x => x.Key.Equals("DTBWorkspace")).Value as IWorkspace;
//IEnumDataset enumDataset = workspace.Datasets[esriDatasetType.esriDTAny];
//if (enumDataset != null)
//{
// IDataset dataset = null;
// while ((dataset = enumDataset.Next()) != null)
// {
// IGeoDataset geoDataset = dataset as IGeoDataset;
// if (geoDataset == null)
// continue;
// string name = geoDataset.SpatialReference.Name.ToUpper();
// if ((LayerNames != null && !LayerNames.Contains(dataset.Name)) || (DataSetNames != null && !DataSetNames.Contains(dataset.Name)))
// {
// break;
// }
// if (!name.StartsWith("CGCS2000"))
// {
// result.Add(new RuleEntity()
// {
// ErrorId = dataset.Name,
// CheckObject = "内业预处理、单图斑建库所有矢量图层",
// ErrorTip = $"【{dataset.Name}】坐标系错误,未采用2000国家大地坐标系",
// ErrorType = "一类错误",
// RuleCode = "JC001",
// RuleContent = "检查矢量数据是否采用2000 国家大地坐标系,若不是,认定为错误图斑。",
// RuleName = "矢量图形平面坐标系检查"
// });
// }
// //else if (!name.Contains("GK") || !name.Contains("CGCS2000_3"))
// //{
// // result.Add(new RuleEntity()
// // {
// // ErrorId = dataset.Name,
// // CheckObject = "内业预处理、单图斑建库所有矢量图层",
// // ErrorTip = $"【{dataset.Name}】投影方式错误,未采用高斯-克吕格投影,或按 3°分带",
// // ErrorType = "一类错误",
// // RuleCode = "JC003",
// // RuleContent = "检查矢量数据是否采用高斯-克吕格投影,并按 3°分带,若不是,认定为错误图斑。",
// // RuleName = "矢量图形投影方式检查"
// // });
// //}
// }
//}
}
catch (Exception ex)
{
RuleEntity ruleEntity = new RuleEntity()
{
ErrorId = this.TBBSM,
CheckObject = "内业预处理、单图斑建库所有矢量图层",
ErrorTip = $"【图层名称】坐标系错误,未采用2000国家大地坐标系规则检查失败:" + ex.Message,
ErrorType = "一类错误",
RuleCode = "JC001",
RuleContent = "检查矢量数据是否采用2000 国家大地坐标系,若不是,认定为错误图斑。",
RuleName = "矢量图形平面坐标系检查"
};
result.Add(ruleEntity);
}
return result;
}
///
/// 矢量图形高程系统检查
///
///
public List JC002()
{
return null;
}
///
/// 矢量图形投影方式检查
///
///
//public List JC003()
//{
// List result = new List();
// try
// {
// if (this.DicFeatureClass == null || !this.DicFeatureClass.ContainsKey("DTBWorkspace"))
// {
// return result;
// }
// IWorkspace workspace = this.DicFeatureClass.FirstOrDefault(x => x.Key.Equals("DTBWorkspace")).Value as IWorkspace;
// IEnumDataset enumDataset = workspace.Datasets[esriDatasetType.esriDTAny];
// if (enumDataset != null)
// {
// IDataset dataset = null;
// while ((dataset = enumDataset.Next()) != null)
// {
// IGeoDataset geoDataset = dataset as IGeoDataset;
// if (geoDataset == null)
// continue;
// string name = geoDataset.SpatialReference.Name.ToUpper();
// if ((LayerNames != null && !LayerNames.Contains(dataset.Name)) || (DataSetNames != null && !DataSetNames.Contains(dataset.Name)))
// {
// break;
// }
// if (!name.Contains("GK") || !name.Contains("CGCS2000_3"))
// {
// result.Add(new RuleEntity()
// {
// ErrorId = dataset.Name,
// CheckObject = "内业预处理、单图斑建库所有矢量图层",
// ErrorTip = $"【{dataset.Name}】投影方式错误,未采用高斯-克吕格投影,或按 3°分带",
// ErrorType = "一类错误",
// RuleCode = "JC003",
// RuleContent = "检查矢量数据是否采用高斯-克吕格投影,并按 3°分带,若不是,认定为错误图斑。",
// RuleName = "矢量图形投影方式检查"
// });
// }
// }
// }
// }
// catch (Exception ex)
// {
// RuleEntity ruleEntity = new RuleEntity()
// {
// ErrorId = this.TBBSM,
// CheckObject = "内业预处理、单图斑建库所有矢量图层",
// ErrorTip = $"【图层名称】坐标系错误,未采用2000国家大地坐标系规则检查失败:" + ex.Message,
// ErrorType = "一类错误",
// RuleCode = "JC003",
// RuleContent = "检查矢量数据是否采用高斯-克吕格投影,并按 3°分带,若不是,认定为错误图斑。",
// RuleName = "矢量图形投影方式检查"
// };
// result.Add(ruleEntity);
// }
// return result;
//}
}
}