博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AE开发实现Spatial Join Analysis
阅读量:5044 次
发布时间:2019-06-12

本文共 5702 字,大约阅读时间需要 19 分钟。

总体网上资料不多,包括esri帮助文档都写的很简单,没有各个string参数如match_option之类的可以输入的string限制,导致在摸索中gp.Execute时报错n回。
结合网上搜集资料及个人试验,总结下各个参数的用法。
 
代码在vs2010+AO10.1下测试通过。
简单代码示例:
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)。

  • JOIN_ONE_TO_ONE —如果找到多个与同一“目标要素”存在相同空间关系的“连接要素”,将使用“字段映射”合并规则对多个“连接要素”中的属性进行聚合。例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,将对这两个面的属性进行聚合,然后将其传递到输出要素类。如果一个面的属性值为 3,另一个面的属性值为 7,且指定了“总和”合并规则,则输出要素类中的聚合值将为10。JOIN_ONE_TO_ONE 为默认选项。
  • JOIN_ONE_TO_MANY —如果找到多个与同一“目标要素”存在相同空间关系的“连接要素”,输出要素类将包含多个“目标要素”实例。例如,如果在两个独立的面“连接要素”中找到了同一个点“目标要素”,则输出要素类将存在两个“目标要素”实例,分别包含两个面的属性。

String

join_type

(可选)

确定是在输出要素类中保留所有“目标要素”(外部连接),还是仅保留那些与“连接要素”有指定空间关系的“目标要素”(内部连接)。

  • KEEP_ALL —将在输出中保留所有“目标要素”(外部连接)。这是默认设置。
  • KEEP_COMMON — 仅在输出要素类中保留那些与“连接要素”有指定空间关系的“目标要素”(内部连接)。例如,如果将某个点要素类指定为“目标要素”,将某个面要素类指定为“连接要素”,并选择“WITHIN”作为匹配选项,则输出要素类将仅包含那些位于面“连接要素”中的“目标要素”,非“连接要素”内部的“目标要素”将被排除。

Boolean

field_mapping

(可选)

控制输出要素类中要包含的属性字段。可以添加、删除、重命名字段或更改字段的属性。初始列表既包含“目标要素”中的字段,也包含“连接要素”中的字段。

Field Mappings

match_option

(可选)

定义用于匹配行的条件。只要找到该空间关系(或匹配选项),就会将“连接要素”的属性传递到“目标要素”。匹配选项包括:

  • INTERSECT:如果“目标要素”与“连接要素”相交,则将“连接要素”的属性传递到“目标要素”。
  • CONTAINS:如果“目标要素”包含“连接要素”,则将“连接要素”的属性传递到“目标要素”。对于此选项,“目标要素”不能为点,且仅当“目标要素”为面时“连接要素”才能为面。
  • WITHIN:如果“目标要素”位于“连接要素”内部,则将“连接要素”的属性传递到“目标要素”。对于此选项,“连接要素”不能为点,且仅当“连接要素”为面时“目标要素”才能能为面。
  • CLOSEST:将最近“连接要素”的属性传递到“目标要素”。

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官网的帮助:

转载于:https://www.cnblogs.com/jhlong/p/5394517.html

你可能感兴趣的文章
Ruby入门——哈希表
查看>>
noip2016 天天爱跑步
查看>>
[NOI2012]随机数生成器
查看>>
Ubuntu Linux IP configuration
查看>>
Java 变参函数的实现
查看>>
day12_框架一tools.py代码
查看>>
死磕 java同步系列之Semaphore源码解析
查看>>
好代码是什么样的?
查看>>
网页登入验证码的实现(java&html)
查看>>
sed -i 命令替换字符串时,软链接被破坏
查看>>
Python奇技
查看>>
算法-求两个有序数组两两相加的值最小的K个数
查看>>
net.sf.json 迄今 时刻 格式 办法
查看>>
奇怪++操作
查看>>
Oracle建立表空间和用户
查看>>
开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
查看>>
逃生_拓扑排序
查看>>
Java 中带参带返回值方法的使用
查看>>
JSON.Net 的使用
查看>>
wxWidgets 安装方法(Windows 8.1 + Visual Studio 2013)
查看>>