AE开发实现Spatial Join Analysis
public void SpatialJoin() { // Spatial join 功能 Geoprocessor gp = new Geoprocessor(); gp.OverwriteOutput = true; SpatialJoin pSpatialJoin = new SpatialJoin(); pSpatialJoin.target_features = @"E:\b.shp";//目标图层,可以是shp等文件路径或者featureclass之类的 pSpatialJoin.join_features = @"E:\a.shp"; //join的图层 pSpatialJoin.out_feature_class = @"E:\a_SpatialJoin.shp"; //输出图层文件,存在不存在无所谓 pSpatialJoin.join_operation = "JOIN_ONE_TO_ONE"; //JOIN_ONE_TO_ONE或者JOIN_ONE_TO_ONE pSpatialJoin.match_option = "within"; //CONTAINS、within等空间关系 pSpatialJoin.join_type = "KEEP_ALL";//KEEP_ALL或者KEEP_COMMON gp.Execute(pSpatialJoin, null); }
语法
SpatialJoin_analysis (target_features, join_features, out_feature_class, {join_operation}, {join_type}, {field_mapping}, {match_option}, {search_radius}, {distance_field_name})
参数 |
说明 |
数据类型 |
target_features |
只要找到指定的空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”。“目标要素”可以是ArcGIS 支持的任意空间数据源。 |
Feature Layer |
join_features |
只要找到指定的空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”。“连接要素”可以是ArcGIS 支持的任意空间数据源。 |
Feature Layer |
out_feature_class |
该新要素类包含连接到“目标要素”的“连接要素”的属性。 |
Feature Class |
join_operation (可选) |
用于在找到多个与同一“目标要素”存在相同空间关系的“连接要素”时确定输出要素类中“目标要素”和“连接要素”的连接方式。例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,则可以选择使用“字段映射”合并规则 (JOIN_ONE_TO_ONE) 对两个面的属性进行聚合,也可以选择在输出中存在两个“目标要素”实例,分别包含两个面的属性 (JOIN_ONE_TO_MANY)。
|
String |
join_type (可选) |
确定是在输出要素类中保留所有“目标要素”(外部连接),还是仅保留那些与“连接要素”有指定空间关系的“目标要素”(内部连接)。
|
Boolean |
field_mapping (可选) |
控制输出要素类中要包含的属性字段。可以添加、删除、重命名字段或更改字段的属性。初始列表既包含“目标要素”中的字段,也包含“连接要素”中的字段。 |
Field Mappings |
match_option (可选) |
定义用于匹配行的条件。只要找到该空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”。匹配选项包括:
|
String |
search_radius (可选) |
如果“连接要素”与“目标要素”的距离在此范围内,则将进行空间连接。仅当将空间关系(或匹配选项)指定为INTERSECT 或 CLOSEST 时,搜索半径才有效。空间关系为 INTERSECT 时使用 100 米作为搜索半径表示:如果“连接要素”位于“目标要素”周围的 100 米范围内,则将“连接要素”的属性传递到“目标要素”。空间关系为CLOSEST 时使用 100 米作为搜索半径表示:如果“连接要素”位于“目标要素”周围的 100 米范围内,并且是距该“目标要素”最近的“连接要素”,则将“连接要素”的属性传递到“目标要素”。 |
Linear unit |
distance_field_name (可选) |
向输出要素类中添加的字段的名称,用于包含“目标要素”和最近“连接要素”之间的距离。仅当将空间关系(或匹配选项)指定为 CLOSEST 时,此选项才有效。如果未指定字段名称,将不会向输出要素类中添加该字段。 |
String |
public void GP_SpatilaJoin_Intersect_OneToMany_KeepALL(IFeatureClass pFClassReachPoints, IFeatureClass pFClassCoverage) { //Define Geoprocessing variables and environment IGeoProcessor pGp = null; IVariantArray pToolParams = null; IDataElement pDataElement = null; IDETable pDETableA = null; IGPUtilities pGPU = null; IArray pArray = null; IGPFieldMapping pFieldMapping = null; IField pTextField = null; IGPFieldMap pTxtFieldMap = null; string targetFeatures = @"D:\ESRI\ETISALAT\ReachPointsApplication\Shapefiles\ReachPointsTemp1.shp"; string joinFeatures = @"Database Connections\EMEGS.sde\EMEGS.EG_ENGINEERING_DS\EMEGS.EG_COVERAGE_LIVE_PG"; //Output will be the target features, states, with a mean city population field (mcp) string outfc = @"D:\ESRI\ETISALAT\ReachPointsApplication\Shapefiles\ReachPointsTemp5.shp"; pGp = new GeoProcessor(); pGp.AddToolbox(@"C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Spatial Analyst Tools.tbx"); // Create a new fieldmappings and add the two input feature classes. IGpFieldMappingsObject fieldmappings = new GpFieldMappingsObject() ; // fieldmappings = gp.CreateObject("FieldMappings") fieldmappings.AddTable(targetFeatures); fieldmappings.AddTable(joinFeatures); // First get the TECHNOLOGY_TYPE fieldmap in Coverage PG feature class. IGpFieldMapObject fieldmap = fieldmappings.GetFieldMap(fieldmappings.FindFieldMapIndex("TECHNOLOGY_TYPE")) as IGpFieldMapObject; //Set the merge rule to mean and then replace the old fieldmap in the mappings object with the updated one fieldmap.MergeRule = "join";// esriGPFieldMapMergeRule.esriGPFieldMapMergeRuleJoin; // // fieldmap.JoinDelimiter = "_"; fieldmappings.ReplaceFieldMap(fieldmappings.FindFieldMapIndex("TECHNOLOGY_TYPE"), fieldmap); // fieldmap.FieldMap.GetField().Name pToolParams = new VarArray(); pToolParams.Add(targetFeatures); pToolParams.Add(joinFeatures); pToolParams.Add(outfc); pToolParams.Add("JOIN_ONE_TO_ONE"); pToolParams.Add("KEEP_ALL"); pToolParams.Add(fieldmappings); pToolParams.Add("INTERSECTS"); pGp.Execute("SpatialJoin_analysis", pToolParams, null); }
esri官网的帮助: