ArcgisEngine中将shape中的要素复制到指定的SDE空间数据集里-报错
//将shape里的要素导入到SDE空间数据集里
public void ConvertShapefileToFeatureClass(IServerContext serverContext,string str_shapepath, IWorkspace targetWorkspace, string str_sourceDatasetName, string str_targetDatasetName)
{
// Create a name object for the source (shapefile) workspace and open it.
IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass
{
WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory",
PathName = str_shapepath
};
IName sourceWorkspaceIName = (IName)sourceWorkspaceName;
IWorkspace sourceWorkspace = (IWorkspace)sourceWorkspaceIName.Open();
// Create a name object for the target (SDE) workspace and open it.
IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
IName targetWorkspaceIName = (IName)targetWorkspaceName;
// Create a name object for the source dataset.
IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
sourceDatasetName.Name = str_sourceDatasetName;
sourceDatasetName.WorkspaceName = sourceWorkspaceName;
// Create a name object for the target dataset.
IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
targetDatasetName.Name = str_targetDatasetName;
targetDatasetName.WorkspaceName = targetWorkspaceName;
// Open source feature class to get field definitions.
IName sourceName = (IName)sourceFeatureClassName;
IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();
// Create the objects and references necessary for field validation.
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields sourceFields = sourceFeatureClass.Fields;
IFields targetFields;
IEnumFieldError enumFieldError;
// Set the required properties for the IFieldChecker interface.
fieldChecker.InputWorkspace = sourceWorkspace;
fieldChecker.ValidateWorkspace = targetWorkspace;
// Validate the fields and check for errors.
fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields);
if (enumFieldError != null)
{
// Handle the errors in a way appropriate to your application.
Console.WriteLine("Errors were encountered during field validation.");
}
IField geometryField;
for (int i = 0; i < targetFields.FieldCount; i++)
{
if (targetFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
geometryField = targetFields.get_Field(i);
//得到几何字段的几何定义
IGeometryDef geometryDef = geometryField.GeometryDef;
//赋予几何定义一个空间索引格网数目和格网大小值
IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
targetFCGeoDefEdit.GridCount_2 = 1;
targetFCGeoDefEdit.set_GridSize(0, 0);
//允许ArcGIS为数据加载确定一个有效的格网大小
targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
//转换要素类中所有的要素
IQueryFilter queryFilter = serverContext.CreateObject("esriGeoDatabase.QueryFilter") as IQueryFilter;
queryFilter.WhereClause = "";
//加载要素类
IFeatureDataConverter fctofc = serverContext.CreateObject("esriGeoDatabase.FeatureDataConverter") as IFeatureDataConverter;
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFields, "", 1000, 0);
break;
}
}
}
注:这个方法中的IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFields, "", 1000, 0);这句报“值不在预期范围内”的错误,图件附件
//创建服务器上下文
public IServerContext GetServerContext()
{
#region 通过IGISServerConnection来创建服务器上下文
IGISServerConnection gisServerConnection = new GISServerConnection();
gisServerConnection.Connect("zhaofei-PC");
IServerObjectManager4 serverObjectManager = (IServerObjectManager4)gisServerConnection.ServerObjectManager;
IServerContext serverContext = serverObjectManager.CreateServerContext("", "");
#endregion
return serverContext;
}
//获取sde空间
public IWorkspace FindWsByDefault()
{
IPropertySet propSet = new PropertySetClass();
BusinessBase bb = new BusinessBase();
propSet.SetProperty("Server", System.Net.Dns.GetHostName());
propSet.SetProperty("Instance", "esri_sde");
propSet.SetProperty("Database", "sde");
propSet.SetProperty("User","wnwuser");
propSet.SetProperty("Password", "wnwuser123456");
propSet.SetProperty("Version","sde.DEFAULT");
IWorkspaceFactory factory = new SdeWorkspaceFactoryClass();
IWorkspace workspace = factory.Open(propSet, 0);
return workspace;
}
//主方法
public static void showGishInMap(string shp_path,string layer_name)
{
ExportShapeFile importshape = new ExportShapeFile();
string pFolder = esf.getNames(shp_path)[0].ToString();
string pFileName = esf.getNames(shp_path)[1].ToString();
IWorkspace pworkspace = FindWsByDefault();
IServerContext serverContext = GetServerContext();
ConvertShapefileToFeatureClass(serverContext,pFolder, pworkspace, "压力", "sde.DBO.esj_Junction");
ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);//局部刷新
}
public void ConvertShapefileToFeatureClass(IServerContext serverContext,string str_shapepath, IWorkspace targetWorkspace, string str_sourceDatasetName, string str_targetDatasetName)
{
// Create a name object for the source (shapefile) workspace and open it.
IWorkspaceName sourceWorkspaceName = new WorkspaceNameClass
{
WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory",
PathName = str_shapepath
};
IName sourceWorkspaceIName = (IName)sourceWorkspaceName;
IWorkspace sourceWorkspace = (IWorkspace)sourceWorkspaceIName.Open();
// Create a name object for the target (SDE) workspace and open it.
IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;
IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;
IName targetWorkspaceIName = (IName)targetWorkspaceName;
// Create a name object for the source dataset.
IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;
sourceDatasetName.Name = str_sourceDatasetName;
sourceDatasetName.WorkspaceName = sourceWorkspaceName;
// Create a name object for the target dataset.
IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;
targetDatasetName.Name = str_targetDatasetName;
targetDatasetName.WorkspaceName = targetWorkspaceName;
// Open source feature class to get field definitions.
IName sourceName = (IName)sourceFeatureClassName;
IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();
// Create the objects and references necessary for field validation.
IFieldChecker fieldChecker = new FieldCheckerClass();
IFields sourceFields = sourceFeatureClass.Fields;
IFields targetFields;
IEnumFieldError enumFieldError;
// Set the required properties for the IFieldChecker interface.
fieldChecker.InputWorkspace = sourceWorkspace;
fieldChecker.ValidateWorkspace = targetWorkspace;
// Validate the fields and check for errors.
fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields);
if (enumFieldError != null)
{
// Handle the errors in a way appropriate to your application.
Console.WriteLine("Errors were encountered during field validation.");
}
IField geometryField;
for (int i = 0; i < targetFields.FieldCount; i++)
{
if (targetFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
{
geometryField = targetFields.get_Field(i);
//得到几何字段的几何定义
IGeometryDef geometryDef = geometryField.GeometryDef;
//赋予几何定义一个空间索引格网数目和格网大小值
IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
targetFCGeoDefEdit.GridCount_2 = 1;
targetFCGeoDefEdit.set_GridSize(0, 0);
//允许ArcGIS为数据加载确定一个有效的格网大小
targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
//转换要素类中所有的要素
IQueryFilter queryFilter = serverContext.CreateObject("esriGeoDatabase.QueryFilter") as IQueryFilter;
queryFilter.WhereClause = "";
//加载要素类
IFeatureDataConverter fctofc = serverContext.CreateObject("esriGeoDatabase.FeatureDataConverter") as IFeatureDataConverter;
IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFields, "", 1000, 0);
break;
}
}
}
注:这个方法中的IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, null, targetFeatureClassName, geometryDef, targetFields, "", 1000, 0);这句报“值不在预期范围内”的错误,图件附件
//创建服务器上下文
public IServerContext GetServerContext()
{
#region 通过IGISServerConnection来创建服务器上下文
IGISServerConnection gisServerConnection = new GISServerConnection();
gisServerConnection.Connect("zhaofei-PC");
IServerObjectManager4 serverObjectManager = (IServerObjectManager4)gisServerConnection.ServerObjectManager;
IServerContext serverContext = serverObjectManager.CreateServerContext("", "");
#endregion
return serverContext;
}
//获取sde空间
public IWorkspace FindWsByDefault()
{
IPropertySet propSet = new PropertySetClass();
BusinessBase bb = new BusinessBase();
propSet.SetProperty("Server", System.Net.Dns.GetHostName());
propSet.SetProperty("Instance", "esri_sde");
propSet.SetProperty("Database", "sde");
propSet.SetProperty("User","wnwuser");
propSet.SetProperty("Password", "wnwuser123456");
propSet.SetProperty("Version","sde.DEFAULT");
IWorkspaceFactory factory = new SdeWorkspaceFactoryClass();
IWorkspace workspace = factory.Open(propSet, 0);
return workspace;
}
//主方法
public static void showGishInMap(string shp_path,string layer_name)
{
ExportShapeFile importshape = new ExportShapeFile();
string pFolder = esf.getNames(shp_path)[0].ToString();
string pFileName = esf.getNames(shp_path)[1].ToString();
IWorkspace pworkspace = FindWsByDefault();
IServerContext serverContext = GetServerContext();
ConvertShapefileToFeatureClass(serverContext,pFolder, pworkspace, "压力", "sde.DBO.esj_Junction");
ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);//局部刷新
}
2 个回复
gisweis - GIS应用开发
赞同来自: why小飞
这是我测试通过的代码:arcgis 10.0 sde oracle 10g
朱新颖
赞同来自:
要回复问题请先登录或注册
发起人
相关问题
问题状态
—— 扫技术支持中心微信服务号!
—— 让GIS知乎问答随时随地!