总体网上资料不多,包括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官网的帮助:

AE开发实现Spatial Join Analysis的更多相关文章

  1. AE开发概念辨析

    樱木 原文 AE开发之概念辨析2,AE开发涉及相关概念,AE开发相关概念 1 AE中的类库 AE总共包括了21个子库,分别是SYSTEM,SYSTEMUI,GEOMETRY,DISPLAY,SERVE ...

  2. AE开发使用内存图层

    AE开发中,有时需要从磁盘中读取一些文件信息如坐标点转为图层并进行分析,此过程并不需要坐标点入库之类的操作,就可以创建一个内存图层解决问题.创建内存图层需要用到InMemoryWorkspaceFac ...

  3. AE开发能否实现TOC Control里添加多个Data Frame

    问题: 在ArcMap中,菜单Insert下Data Frame,可以在TOC中增加Data Frame,在MapControl或者PageLayoutControl下都可以正常显示多个Data Fr ...

  4. 将AE开发的专题图制作功能发布为WPS

    AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法 ...

  5. 【转】.NET+AE开发中常见几种非托管对象的释放

    尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...

  6. AE开发技术文档--8种数据访问方法

    转自原文 AE开发技术文档--8种数据访问方法 1.shapefile IWorkspaceFactory pWorkspaceFactory; pWorkspaceFactory = new Sha ...

  7. c# 进行AE开发时,如何在地图上定位出一个点

    一.文本形式的气泡提示框 由于本人是初学,所以具体的含义尚未弄清楚,直接给出代码吧!

  8. AE开发实现GP工具IDW

    IDW——空间插值 IDW(Inverse Distance Weighted)是一种常用而简便的空间插值方法,它以插值点与样本点间的距离为权重进行加权平均,离插值点越近的样本点赋予的权重越大. 设平 ...

  9. AE开发示例之RunGPAsync

    using System; using System.Collections.Generic;using System.ComponentModel;using System.Data;using S ...

随机推荐

  1. 【转】jquery 中scrollTop在Firefox下不起作用

    原文链接:http://stackoverflow.com/questions/8149155/animate-scrolltop-not-working-in-firefox Animate scr ...

  2. 7 COMPELLING REASONS YOU NEED TO START THE BUSINESS YOU’VE ALWAYS WANTED

    原文链接:http://lesseesadvocate.com/7-compelling-reasons-need-start-business-youve-always-wanted/ Don’t ...

  3. Eclipse debug断点调试代码时出现source not found问题

    偶尔调试代码的时候会出现这种事情,之前并没有特别注意,今天稍微搜集一下相关资料: 1.跳转到的代码的确没有源码,下载源码后选择源码位置后便会正常显示源码. 2.源码和class文件不一致.即便勾选了a ...

  4. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  5. 【2016-11-6】【坚持学习】【Day21】【主窗口关闭时,同步关闭它的子窗口】

    本来想用委托实现的.但是又觉得没有必要. 方法如下: public MainWindow() { InitializeComponent(); this.Closing += MainWindow_C ...

  6. 【2016-10-17】【坚持学习】【Day8】【工厂方法模式】

    工厂方法模式又叫工厂模式,虚拟构造器模式 定义: 工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该 ...

  7. Hibernate 错题分析

  8. 解决 uuid.h找不到的问题

    http://blog.csdn.net/commshare/article/details/40835407

  9.  非法字符 原因 以及解决办法

    模板文件生成html文件之后会在body开头处加入一个可见的控制符 // 如果是Windows系统,修改为:$WIN = 1; $WIN = 0; ?> <!DOCTYPE html P ...

  10. BZOJ 4548 小奇的糖果

    Description 有 \(N\) 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色. Input 包含 ...