您的位置:首页 > 汽车 > 时评 > ArcGIS Pro SDK (八)地理数据库 7 DDL

ArcGIS Pro SDK (八)地理数据库 7 DDL

2024/9/8 8:59:27 来源:https://blog.csdn.net/szy13323042191/article/details/140348271  浏览:    关键词:ArcGIS Pro SDK (八)地理数据库 7 DDL

ArcGIS Pro SDK (八)地理数据库 7 DDL

文章目录

  • ArcGIS Pro SDK (八)地理数据库 7 DDL
    • 1 创建表
    • 2 创建要素类
    • 3 删除表
    • 4 删除要素类
    • 5 打开内存地理数据库
    • 6 创建内存地理数据库
    • 7 删除内存地理数据库
    • 8 创建文件地理数据库
    • 9 删除文件地理数据库
    • 10 创建移动地理数据库
    • 11 删除移动地理数据库
    • 12 创建范围域
    • 13 创建编码值域
    • 14 创建要素数据集
    • 15 删除要素数据集
    • 16 重命名要素数据集
    • 17 在一次操作中创建具有要素类的要素数据集
    • 18 在现有要素数据集中创建要素类
    • 19 将要素类添加到要素数据集
    • 20 重命名表
    • 21 向要素类添加字段
    • 22 添加使用域的字段
    • 23 从表中删除字段
    • 24 创建注记要素类
    • 25 创建关联要素的注记要素类
    • 26 在要素数据集内创建注记要素类

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 创建表

// 创建一个PoleInspection表,包含以下字段
//  GlobalID
//  ObjectID
//  InspectionDate(日期)
//  InspectionResults(预定义的InspectionResults编码值域)
//  InspectionNotes(字符串)// 这个静态辅助方法创建一个带有默认值的GlobalID字段的FieldDescription
FieldDescription globalIDFieldDescription = FieldDescription.CreateGlobalIDField();// 这个静态辅助方法创建一个带有默认值的ObjectID字段的FieldDescription
FieldDescription objectIDFieldDescription = FieldDescription.CreateObjectIDField();// 为InspectionDate字段创建一个FieldDescription
FieldDescription inspectionDateFieldDescription = new FieldDescription("InspectionDate", FieldType.Date)
{AliasName = "Inspection Date"
};// 这个静态辅助方法为域字段创建一个FieldDescription(来自预定义的域)
FieldDescription inspectionResultsFieldDescription = FieldDescription.CreateDomainField("InspectionResults", new CodedValueDomainDescription(inspectionResultsDomain));
inspectionResultsFieldDescription.AliasName = "Inspection Results";// 这个静态辅助方法为字符串字段创建一个FieldDescription
FieldDescription inspectionNotesFieldDescription = FieldDescription.CreateStringField("InspectionNotes", 512);
inspectionNotesFieldDescription.AliasName = "Inspection Notes";// 汇总所有字段描述的列表
List<FieldDescription> fieldDescriptions = new List<FieldDescription>()
{ globalIDFieldDescription, objectIDFieldDescription, inspectionDateFieldDescription, inspectionResultsFieldDescription, inspectionNotesFieldDescription };// 创建一个描述要创建表的TableDescription对象
TableDescription tableDescription = new TableDescription("PoleInspection", fieldDescriptions);// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将PoleInspection表的创建添加到我们的DDL任务列表中
schemaBuilder.Create(tableDescription);// 执行DDL
bool success = schemaBuilder.Build();// 检查错误信息
if (!success)
{IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;//等等
}

2 创建要素类

// 创建一个Cities要素类,包含以下字段
//  GlobalID
//  ObjectID
//  Name(字符串)
//  Population(整数)// 这个静态辅助方法创建一个带有默认值的GlobalID字段的FieldDescription
FieldDescription globalIDFieldDescription = FieldDescription.CreateGlobalIDField();// 这个静态辅助方法创建一个带有默认值的ObjectID字段的FieldDescription
FieldDescription objectIDFieldDescription = FieldDescription.CreateObjectIDField();// 这个静态辅助方法为字符串字段创建一个FieldDescription
FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 255);// 这个静态辅助方法为整数字段创建一个FieldDescription
FieldDescription populationFieldDescription = FieldDescription.CreateIntegerField("Population");// 汇总所有字段描述的列表
List<FieldDescription> fieldDescriptions = new List<FieldDescription>()
{ globalIDFieldDescription, objectIDFieldDescription, nameFieldDescription, populationFieldDescription };// 创建一个ShapeDescription对象
ShapeDescription shapeDescription = new ShapeDescription(GeometryType.Point, spatialReference);// 或者,ShapeDescription可以从另一个要素类创建。在这种情况下,新的要素类将继承现有类的形状属性
ShapeDescription alternativeShapeDescription = new ShapeDescription(existingFeatureClass.GetDefinition());// 创建一个描述要创建要素类的FeatureClassDescription对象
FeatureClassDescription featureClassDescription = new FeatureClassDescription("Cities", fieldDescriptions, shapeDescription);// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将Cities要素类的创建添加到我们的DDL任务列表中
schemaBuilder.Create(featureClassDescription);// 执行DDL
bool success = schemaBuilder.Build();// 检查错误信息
if (!success)
{IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;//等等
}

3 删除表

// 创建一个TableDescription对象
TableDescription tableDescription = new TableDescription(table.GetDefinition());// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将表的删除添加到我们的DDL任务列表中
schemaBuilder.Delete(tableDescription);// 执行DDL
bool success = schemaBuilder.Build();

4 删除要素类

// 创建一个FeatureClassDescription对象
FeatureClassDescription featureClassDescription = new FeatureClassDescription(featureClass.GetDefinition());// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将要素类的删除添加到我们的DDL任务列表中
schemaBuilder.Delete(featureClassDescription);// 执行DDL
bool success = schemaBuilder.Build();

5 打开内存地理数据库

// 连接到默认的内存地理数据库(如果存在),否则抛出异常
MemoryConnectionProperties memoryConnectionProperties = new MemoryConnectionProperties();// 或者,连接到名为'InterimMemoryGeodatabase'的内存地理数据库
// MemoryConnectionProperties memoryConnectionProperties = new MemoryConnectionProperties("InterimMemoryGeodatabase");// 打开内存地理数据库
using (Geodatabase geodatabase = new Geodatabase(memoryConnectionProperties))
{// 使用内存地理数据库
}

6 创建内存地理数据库

// 创建连接默认内存地理数据库的内存连接属性
MemoryConnectionProperties memoryConnectionProperties = new MemoryConnectionProperties();// 或者创建连接名为'InterimMemoryGeodatabase'的内存地理数据库的内存连接属性
// MemoryConnectionProperties memoryConnectionProperties = new MemoryConnectionProperties("InterimMemoryGeodatabase");// 创建并使用内存地理数据库
using (Geodatabase geodatabase = SchemaBuilder.CreateGeodatabase(memoryConnectionProperties))
{// 在这里创建额外的模式
}

7 删除内存地理数据库

// 创建连接默认内存地理数据库的内存连接属性
MemoryConnectionProperties memoryConnectionProperties = new MemoryConnectionProperties();// 删除内存地理数据库
SchemaBuilder.DeleteGeodatabase(memoryConnectionProperties);

8 创建文件地理数据库

// 创建FileGeodatabaseConnectionPath,指定要创建的文件地理数据库名称
FileGeodatabaseConnectionPath fileGeodatabaseConnectionPath = new FileGeodatabaseConnectionPath(new Uri(@"C:\Path-To-File-Geodatabase\YourName.gdb"));// 创建并使用文件地理数据库
using (Geodatabase geodatabase = SchemaBuilder.CreateGeodatabase(fileGeodatabaseConnectionPath))
{// 在这里创建额外的模式
}

9 删除文件地理数据库

// 创建FileGeodatabaseConnectionPath,指定要删除的文件地理数据库名称
FileGeodatabaseConnectionPath fileGeodatabaseConnectionPath = new FileGeodatabaseConnectionPath(new Uri(@"C:\Path-To-File-Geodatabase\YourName.gdb"));// 删除文件地理数据库
SchemaBuilder.DeleteGeodatabase(fileGeodatabaseConnectionPath);

10 创建移动地理数据库

// 创建MobileGeodatabaseConnectionPath,指定要创建的移动地理数据库名称
MobileGeodatabaseConnectionPath mobileGeodatabaseConnectionPath = new MobileGeodatabaseConnectionPath(new Uri(@"C:\Path-To-Mobile-Geodatabase\YourName.geodatabase"));// 创建并使用移动地理数据库
using (Geodatabase geodatabase = SchemaBuilder.CreateGeodatabase(mobileGeodatabaseConnectionPath))
{// 在这里创建额外的模式
}

11 删除移动地理数据库

// 创建MobileGeodatabaseConnectionPath,指定要删除的移动地理数据库名称
MobileGeodatabaseConnectionPath mobileGeodatabaseConnectionPath = new MobileGeodatabaseConnectionPath(new Uri(@"C:\Path-To-Mobile-Geodatabase\YourName.geodatabase"));// 删除移动地理数据库
SchemaBuilder.DeleteGeodatabase(mobileGeodatabaseConnectionPath);

12 创建范围域

// 创建一个范围描述,最小值 = 0,最大值 = 1000
RangeDomainDescription rangeDomainDescriptionMinMax = new RangeDomainDescription("RangeDomain_0_1000",FieldType.Integer, 0, 1000)
{ Description = "Domain value ranges from 0 to 1000" };SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 创建范围域
schemaBuilder.Create(rangeDomainDescriptionMinMax);
schemaBuilder.Build();

13 创建编码值域

// 创建一个用于水管的编码值域描述
CodedValueDomainDescription codedValueDomainDescription = new CodedValueDomainDescription("WaterPipeTypes", FieldType.String,new SortedList<object, string> {{ "Copper", "C_1" },{ "Steel", "S_2" } })
{SplitPolicy = SplitPolicy.Duplicate,MergePolicy = MergePolicy.DefaultValue
};SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 创建编码值域
CodedValueDomainToken codedValueDomainToken = schemaBuilder.Create(codedValueDomainDescription);
schemaBuilder.Build();

14 创建要素数据集

// 创建名为'Parcel_Information'的要素数据集SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 创建名为'Parcel Information'的要素数据集
FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription("Parcel_Information", SpatialReferences.WGS84);
schemaBuilder.Create(featureDatasetDescription);// 构建状态
bool buildStatus = schemaBuilder.Build();// 构建错误
if (!buildStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

15 删除要素数据集

// 删除名为'Parcel_Information'的要素数据集FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>("Parcel_Information");
FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription(featureDatasetDefinition);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 删除名为'Parcel_Information'的现有要素数据集
schemaBuilder.Delete(featureDatasetDescription);
schemaBuilder.Build();

16 重命名要素数据集

// 将一个要素数据集从 'Parcel_Information' 重命名为 'Parcel_Information_With_Tax_Jurisdiction'string originalDatasetName = "Parcel_Information";
string datasetRenameAs = "Parcel_Information_With_Tax_Jurisdiction";FeatureDatasetDefinition originalDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>(originalDatasetName);
FeatureDatasetDescription originalFeatureDatasetDescription = new FeatureDatasetDescription(originalDatasetDefinition);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将现有的要素数据集 'Parcel_Information' 重命名为 'Parcel_Information_With_Tax_Jurisdiction'
schemaBuilder.Rename(originalFeatureDatasetDescription, datasetRenameAs);
schemaBuilder.Build();

17 在一次操作中创建具有要素类的要素数据集

// 在一次操作中创建一个名为 'Parcel_Information' 的要素数据集和一个名为 'Parcels' 的要素类string featureDatasetName = "Parcel_Information";
string featureClassName = "Parcels";SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 创建一个要素数据集令牌
FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription(featureDatasetName, SpatialReferences.WGS84);
FeatureDatasetToken featureDatasetToken = schemaBuilder.Create(featureDatasetDescription);// 创建一个要素类描述
FeatureClassDescription featureClassDescription = new FeatureClassDescription(featureClassName,new List<FieldDescription>(){new FieldDescription("Id", FieldType.Integer),new FieldDescription("Address", FieldType.String)},new ShapeDescription(GeometryType.Point, SpatialReferences.WGS84));// 在要素数据集中创建一个要素类
FeatureClassToken featureClassToken = schemaBuilder.Create(new FeatureDatasetDescription(featureDatasetToken), featureClassDescription);// 构建状态
bool buildStatus = schemaBuilder.Build();// 构建错误
if (!buildStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

18 在现有要素数据集中创建要素类

// 在现有名为 'Parcels_Information' 的要素数据集中创建一个名为 'Tax_Jurisdiction' 的要素类
string featureDatasetName = "Parcels_Information";
string featureClassName = "Tax_Jurisdiction";// 创建一个要素类描述
FeatureClassDescription featureClassDescription = new FeatureClassDescription(featureClassName,new List<FieldDescription>(){new FieldDescription("Tax_Id", FieldType.Integer),new FieldDescription("Address", FieldType.String)},new ShapeDescription(GeometryType.Point, SpatialReferences.WGS84));FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>(featureDatasetName);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 使用FeatureDatasetDefinition在FeatureDataset中创建一个FeatureClass
schemaBuilder.Create(new FeatureDatasetDescription(featureDatasetDefinition), featureClassDescription);// 构建状态
bool buildStatus = schemaBuilder.Build();// 构建错误
if (!buildStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

19 将要素类添加到要素数据集

// 将一个名为 'Tax_Jurisdiction' 的要素类添加到一个名为 'Parcels_Information' 的要素数据集中string featureDatasetName = "Parcels_Information";
string featureClassNameToAdd = "Tax_Jurisdiction";FeatureDatasetDefinition featureDatasetDefinition = geodatabase.GetDefinition<FeatureDatasetDefinition>(featureDatasetName);
FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription(featureDatasetDefinition);FeatureClassDefinition featureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>(featureClassNameToAdd);
FeatureClassDescription featureClassDescription = new FeatureClassDescription(featureClassDefinition);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将 'Tax_Jurisdiction' 要素类添加到 'Parcels_Information' 要素数据集中
schemaBuilder.AddFeatureClass(featureDatasetDescription, featureClassDescription);
bool addStatus = schemaBuilder.Build();if (!addStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

20 重命名表

// 将一个表从 'Original_Table' 重命名为 'Renamed_Table'string tableToBeRenamed = "Original_Table";
string tableRenameAs = "Renamed_Table";TableDefinition tableDefinition = geodatabase.GetDefinition<TableDefinition>(tableToBeRenamed);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 表重命名
schemaBuilder.Rename(new TableDescription(tableDefinition), tableRenameAs);
schemaBuilder.Build();

21 向要素类添加字段

// 向 'Parcels' 要素类添加以下字段
// 全局 ID
// Parcel_ID
// Tax_Code
// Parcel_Address// 要添加字段的要素类
string featureClassName = "Parcels";FeatureClassDefinition originalFeatureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>(featureClassName);
FeatureClassDescription originalFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDefinition);// 向 'Parcels' 要素类添加的四个新字段
FieldDescription globalIdField = FieldDescription.CreateGlobalIDField();
FieldDescription parcelIdDescription = new FieldDescription("Parcel_ID", FieldType.GUID);
FieldDescription taxCodeDescription = FieldDescription.CreateIntegerField("Tax_Code");
FieldDescription addressDescription = FieldDescription.CreateStringField("Parcel_Address", 150);List<FieldDescription> fieldsToAdd = new List<FieldDescription> 
{ globalIdField, parcelIdDescription,taxCodeDescription, addressDescription 
};// 将新字段添加到新的 FieldDescription 列表中
List<FieldDescription> modifiedFieldDescriptions = new List<FieldDescription>(originalFeatureClassDescription.FieldDescriptions);
modifiedFieldDescriptions.AddRange(fieldsToAdd);// 带有附加字段的新 FeatureClassDescription
FeatureClassDescription modifiedFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDescription.Name,modifiedFieldDescriptions, originalFeatureClassDescription.ShapeDescription);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 用新添加的字段更新 'Parcels' 要素类
schemaBuilder.Modify(modifiedFeatureClassDescription);
bool modifyStatus = schemaBuilder.Build();if (!modifyStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

22 添加使用域的字段

// 添加一个名为“PipeType”的字段,该字段使用编码值域到“Pipes”要素类// 要添加字段的要素类
string featureClassName = "Pipes";SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 创建一个水管的编码值域描述
CodedValueDomainDescription pipeDomainDescription = new CodedValueDomainDescription("WaterPipeTypes", FieldType.String,new SortedList<object, string> {{ "Copper", "C_1" },{ "Steel", "S_2" }})
{SplitPolicy = SplitPolicy.Duplicate,MergePolicy = MergePolicy.DefaultValue
};// 创建一个编码值域令牌
CodedValueDomainToken codedValueDomainToken = schemaBuilder.Create(pipeDomainDescription);// 从域令牌创建一个新的描述
CodedValueDomainDescription codedValueDomainDescription = new CodedValueDomainDescription(codedValueDomainToken);// 使用域描述创建一个名为“PipeType”的字段
FieldDescription domainFieldDescription = new FieldDescription("PipeType", FieldType.String)
{ DomainDescription = codedValueDomainDescription };//检索“Pipes”要素类的现有信息
FeatureClassDefinition originalFeatureClassDefinition = geodatabase.GetDefinition<FeatureClassDefinition>(featureClassName);
FeatureClassDescription originalFeatureClassDescription = new FeatureClassDescription(originalFeatureClassDefinition);// 将域字段添加到现有字段中
List<FieldDescription> modifiedFieldDescriptions = new List<FieldDescription>(originalFeatureClassDescription.FieldDescriptions) { domainFieldDescription };// 创建一个带有更新字段的“Pipes”要素类的新描述
FeatureClassDescription featureClassDescription = new FeatureClassDescription(originalFeatureClassDescription.Name, modifiedFieldDescriptions,originalFeatureClassDescription.ShapeDescription);// 使用域字段更新“Pipes”要素类
schemaBuilder.Modify(featureClassDescription);// 构建状态
bool buildStatus = schemaBuilder.Build();// 构建错误
if (!buildStatus)
{IReadOnlyList<string> errors = schemaBuilder.ErrorMessages;
}

23 从表中删除字段

// 从“Parcels”表中删除所有字段,保留以下字段
// Tax_Code
// Parcel_Address// 要删除字段的表
string tableName = "Parcels";TableDefinition tableDefinition = geodatabase.GetDefinition<TableDefinition>(tableName);
IReadOnlyList<Field> fields = tableDefinition.GetFields();// 从“Parcels”表中获取现有字段
Field taxCodeField = fields.First(f => f.Name.Equals("Tax_Code"));
Field parcelAddressField = fields.First(f => f.Name.Equals("Parcel_Address"));FieldDescription taxFieldDescription = new FieldDescription(taxCodeField);
FieldDescription parcelAddressFieldDescription = new FieldDescription(parcelAddressField);// 修改后的表中要保留的字段
List<FieldDescription> fieldsToBeRetained = new List<FieldDescription>()
{taxFieldDescription, parcelAddressFieldDescription
};// 包含“Tax_Code”和“Parcel_Address”字段的“Parcels”表的新描述
TableDescription modifiedTableDescription = new TableDescription(tableName, fieldsToBeRetained);SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 删除除“Tax_Code”和“Parcel_Address”字段外的所有字段
schemaBuilder.Modify(modifiedTableDescription);
schemaBuilder.Build();

24 创建注记要素类

// 创建一个名为“Cities”的注记要素类
// 包含以下用户定义字段
// Name 
// GlobalID// 注记要素类名称
string annotationFeatureClassName = "CitiesAnnotation";// 为注记要素类创建用户定义的属性字段 
FieldDescription globalIDFieldDescription = FieldDescription.CreateGlobalIDField();
FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 255);// 创建所有字段描述的列表
List<FieldDescription> fieldDescriptions = new List<FieldDescription> { globalIDFieldDescription, nameFieldDescription };// 创建一个ShapeDescription对象
ShapeDescription shapeDescription = new ShapeDescription(GeometryType.Polygon, spatialReference);// 为Maplex引擎创建常规放置属性
CIMMaplexGeneralPlacementProperties generalPlacementProperties =new CIMMaplexGeneralPlacementProperties
{AllowBorderOverlap = true,PlacementQuality = MaplexQualityType.High,DrawUnplacedLabels = true,InvertedLabelTolerance = 1.0,RotateLabelWithDisplay = true,UnplacedLabelColor = new CIMRGBColor{R = 0,G = 255,B = 0,Alpha = 0.5f // 绿色}
};// 为标准引擎创建常规放置属性//CIMStandardGeneralPlacementProperties generalPlacementProperties =
//  new CIMStandardGeneralPlacementProperties
//  {
//    DrawUnplacedLabels = true,
//    InvertedLabelTolerance = 3.0,
//    RotateLabelWithDisplay = true,
//    UnplacedLabelColor = new CIMRGBColor
//    {
//      R = 255, G = 0, B = 0, Alpha = 0.5f // 红色
//    } 
//   };// 创建注记标签类
// 绿色标签
CIMLabelClass greenLabelClass = new CIMLabelClass
{Name = "Green",ExpressionTitle = "Expression-Green",ExpressionEngine = LabelExpressionEngine.Arcade,Expression = "$feature.OBJECTID",ID = 1,Priority = 0,Visibility = true,TextSymbol = new CIMSymbolReference{Symbol = new CIMTextSymbol(){Angle = 45,FontType = FontType.Type1,FontFamilyName = "Tahoma",FontEffects = FontEffects.Normal,HaloSize = 2.0,Symbol = new CIMPolygonSymbol{SymbolLayers = new CIMSymbolLayer[]{new CIMSolidFill{Color = CIMColor.CreateRGBColor(0, 255, 0)}},UseRealWorldSymbolSizes = true}},MaxScale = 0,MinScale = 0,SymbolName = "TextSymbol-Green"},StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties{AllowOverlappingLabels = true,LineOffset = 1.0},MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties{AlignLabelToLineDirection = true,AvoidPolygonHoles = true}
};// 蓝色标签
CIMLabelClass blueLabelClass = new CIMLabelClass
{Name = "Blue",ExpressionTitle = "Expression-Blue",ExpressionEngine = LabelExpressionEngine.Arcade,Expression = "$feature.OBJECTID",ID = 2,Priority = 0,Visibility = true,TextSymbol = new CIMSymbolReference{Symbol = new CIMTextSymbol(){Angle = 45,FontType = FontType.Type1,FontFamilyName = "Consolas",FontEffects = FontEffects.Normal,HaloSize = 2.0,Symbol = new CIMPolygonSymbol{SymbolLayers = new CIMSymbolLayer[]{new CIMSolidFill{Color = CIMColor.CreateRGBColor(0, 0, 255)}},UseRealWorldSymbolSizes = true}},MaxScale = 0,MinScale = 0,SymbolName = "TextSymbol-Blue"},StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties{AllowOverlappingLabels = true,LineOffset = 1.0},MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties{AlignLabelToLineDirection = true,AvoidPolygonHoles = true}
};// 创建标签列表
List<CIMLabelClass> labelClasses = new List<CIMLabelClass> { greenLabelClass, blueLabelClass };// 创建注记要素类描述对象以描述要创建的要素类
AnnotationFeatureClassDescription annotationFeatureClassDescription =new AnnotationFeatureClassDescription(annotationFeatureClassName, fieldDescriptions, shapeDescription,generalPlacementProperties, labelClasses)
{IsAutoCreate = true,IsSymbolIDRequired = false,IsUpdatedOnShapeChange = true
};// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将创建Cities注记要素类的操作添加到DDL任务列表中
schemaBuilder.Create(annotationFeatureClassDescription);// 执行DDL
bool success = schemaBuilder.Build();// 检查错误消息
if (!success)
{IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;//等。
}

25 创建关联要素的注记要素类

// 在供水网络中创建水管和阀门之间的关联注记要素类
// 包含以下用户定义字段
// PipeName 
// GlobalID// 注记要素类名称
string annotationFeatureClassName = "WaterPipeAnnotation";// 为注记要素类创建用户定义的属性字段
FieldDescription pipeGlobalID = FieldDescription.CreateGlobalIDField();
FieldDescription nameFieldDescription = FieldDescription.CreateStringField("Name", 255);// 创建所有字段描述的列表
List<FieldDescription> fieldDescriptions = new List<FieldDescription> { pipeGlobalID, nameFieldDescription };// 创建一个ShapeDescription对象
ShapeDescription shapeDescription = new ShapeDescription(GeometryType.Polygon, spatialReference);// 为Maplex引擎创建常规放置属性
CIMMaplexGeneralPlacementProperties generalPlacementProperties = new CIMMaplexGeneralPlacementProperties
{AllowBorderOverlap = true,PlacementQuality = MaplexQualityType.High,DrawUnplacedLabels = true,InvertedLabelTolerance = 1.0,RotateLabelWithDisplay = true,UnplacedLabelColor = new CIMRGBColor{R = 255,G = 0,B = 0,Alpha = 0.5f}
};// 创建注记标签类
// 绿色标签
CIMLabelClass greenLabelClass = new CIMLabelClass
{Name = "Green",ExpressionTitle = "Expression-Green",ExpressionEngine = LabelExpressionEngine.Arcade,Expression = "$feature.OBJECTID",ID = 1,Priority = 0,Visibility = true,TextSymbol = new CIMSymbolReference{Symbol = new CIMTextSymbol(){Angle = 45,FontType = FontType.Type1,FontFamilyName = "Tahoma",FontEffects = FontEffects.Normal,HaloSize = 2.0,Symbol = new CIMPolygonSymbol{SymbolLayers = new CIMSymbolLayer[]{new CIMSolidFill{Color = CIMColor.CreateRGBColor(0, 255, 0)}},UseRealWorldSymbolSizes = true}},MaxScale = 0,MinScale = 0,SymbolName = "TextSymbol-Green"},StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties{AllowOverlappingLabels = true,LineOffset = 1.0},MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties{AlignLabelToLineDirection = true,AvoidPolygonHoles = true}
};// 蓝色标签
CIMLabelClass blueLabelClass = new CIMLabelClass
{Name = "Blue",ExpressionTitle = "Expression-Blue",ExpressionEngine = LabelExpressionEngine.Arcade,Expression = "$feature.OBJECTID",ID = 2,Priority = 0,Visibility = true,TextSymbol = new CIMSymbolReference{Symbol = new CIMTextSymbol(){Angle = 45,FontType = FontType.Type1,FontFamilyName = "Consolas",FontEffects = FontEffects.Normal,HaloSize = 2.0,Symbol = new CIMPolygonSymbol{SymbolLayers = new CIMSymbolLayer[]{new CIMSolidFill{Color = CIMColor.CreateRGBColor(0, 0, 255)}},UseRealWorldSymbolSizes = true}},MaxScale = 0,MinScale = 0,SymbolName = "TextSymbol-Blue"},StandardLabelPlacementProperties = new CIMStandardLabelPlacementProperties{AllowOverlappingLabels = true,LineOffset = 1.0},MaplexLabelPlacementProperties = new CIMMaplexLabelPlacementProperties{AlignLabelToLineDirection = true,AvoidPolygonHoles = true}
};// 创建标签列表
List<CIMLabelClass> labelClasses = new List<CIMLabelClass> { greenLabelClass, blueLabelClass };// 创建关联要素描述
// 关联要素类名称
string linkedFeatureClassName = "WaterPipe";// 为水管创建字段
FieldDescription waterPipeGlobalID = FieldDescription.CreateGlobalIDField();
FieldDescription pipeName = FieldDescription.CreateStringField("PipeName", 255);// 创建水管字段描述的列表
List<FieldDescription> pipeFieldDescriptions = new List<FieldDescription> { waterPipeGlobalID, pipeName };// 创建关联要素类描述
FeatureClassDescription linkedFeatureClassDescription = new FeatureClassDescription(linkedFeatureClassName, pipeFieldDescriptions,new ShapeDescription(GeometryType.Polyline, spatialReference));// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将创建关联要素类的操作添加到DDL任务列表中
FeatureClassToken linkedFeatureClassToken = schemaBuilder.Create(linkedFeatureClassDescription);// 创建一个注记要素类描述对象以描述要创建的要素类
AnnotationFeatureClassDescription annotationFeatureClassDescription =new AnnotationFeatureClassDescription(annotationFeatureClassName, fieldDescriptions, shapeDescription,generalPlacementProperties, labelClasses, new FeatureClassDescription(linkedFeatureClassToken))
{IsAutoCreate = true,IsSymbolIDRequired = false,IsUpdatedOnShapeChange = true
};// 将创建注记要素类的操作添加到DDL任务列表中
schemaBuilder.Create(annotationFeatureClassDescription);// 执行DDL
bool success = schemaBuilder.Build();// 检查错误消息
if (!success)
{IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;//等。
}

26 在要素数据集内创建注记要素类

// 在Places要素数据集中使用现有注记要素类创建Cities注记要素类// 要素数据集名称
string featureDatasetName = "Places";// 注记要素类名称
string annotationFeatureClassName = "CitiesAnnotation";// 创建一个SchemaBuilder对象
SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 打开现有的注记要素类
using (AnnotationFeatureClass existingAnnotationFeatureClass = geodatabase.OpenDataset<AnnotationFeatureClass>("ExistingAnnotationFeatureClass"))
{// 创建要素数据集描述FeatureDatasetDescription featureDatasetDescription = new FeatureDatasetDescription(featureDatasetName, existingAnnotationFeatureClass.GetDefinition().GetSpatialReference());// 将创建Places数据集的操作添加到DDL任务中FeatureDatasetToken featureDatasetToken = schemaBuilder.Create(featureDatasetDescription);// 使用现有注记要素类创建注记要素类描述AnnotationFeatureClassDescription annotationFeatureClassDescription = new AnnotationFeatureClassDescription(annotationFeatureClassName, existingAnnotationFeatureClass.GetDefinition()){IsAutoCreate = true,IsSymbolIDRequired = false,IsUpdatedOnShapeChange = true};// 将创建Cities注记要素类的操作添加到Places要素数据集中schemaBuilder.Create(new FeatureDatasetDescription(featureDatasetToken), annotationFeatureClassDescription);// 执行DDLbool success = schemaBuilder.Build();// 检查错误消息if (!success){IReadOnlyList<string> errorMessages = schemaBuilder.ErrorMessages;//等。}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com