
基本步骤 无论使用哪种方式,拓扑检查都离不开以下的步骤: 创建拓扑 :在数据集上新建一个用于拓扑的容器; 添加要素类 :必须将需要参与拓扑检查的要素类添加到同一数据集的拓扑容器中; 设置容差 :一般可以不设置,默认地理坐标是0000000008983153度,投影坐标是00002米; 添加规则 :根据检查要素添加点、线、面的拓扑规则; 验证拓扑 :如果前面步骤没有报错,表示创建拓扑完成,可以开始验证了; 查看结果 :可能通过拓扑工具条查看拓扑结果,也可以导出为错误要素记录; 修改错误 :拓扑检查的目的是修改拓扑错误,不同的错误有相应的修改方式。
如果只单纯的查找是否存在多部分要素的话,用MutilpartsToSingleparts工具打散图形,看输出的新图层的要素个数是否跟原图层的要素个数一致。如果多了,那就是有了。
还有一个方法是ArcGIS 10版本下,图层新加字段Mutilparts(string,6),然后使用Field Calculate工具。选择语言Python,在赋值部分输入(!shapeismultipart!),括号内内容。这样可以得到哪一个是多部分要素。
可以用arcpy模块中的SearchCursor读取shp的属性表。
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议。
ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的非拓扑实体矢量数据结构的一种格式。
一个Shapefile文件最少包括三个文件:
主文件(shp)、--存储地理要素的几何图形的文件。
索引文件(shx)、--存储图形要素与属性信息索引的文件。
dBASE表文件(dbf),--存储要素信息属性的dBase表文件。
是的,先得到IFeatureLayer
IFeatureLayer featureLayer = m_mapControlget_Layer(0) as IFeatureLayer;
IFeatureClass featureClass = featureLayerFeatureClass;
int num = featureClassFieldsFieldCount;
List<string> lstName = new List<string>();
for (int i = 0; i < num; i++) {
string name = featureClassFieldsget_Field(i)Name;
lstNameAdd(name);
}
自带此功能,python脚本也可以实现。
先说自带功能:File-->Add Data-->Add XY Data 然后根据界面要求选xy字段什么的,这个方法的好处是简单,但是问题是导进来的点坐标生成点,没有多边形或者线要素。
python脚本的好处是,你可以根据坐标的具体情况生成你要的要素类型,比如说,往往一系列的坐标串生成的一个多边形要素,大致的方法是,循环读取xy值,放到point中,再把这些point放入定义的array中,接下来看你的需要,你可以用cursor *** 作,也可以使用arcpycopyfeatures_management,具体代码网上可以查到,或者看arcmap的帮助,搜索polygon,后面会有python的脚本代码
//提取面节点坐标函数,返回一个坐标字符串
private string getShpXY(IPolygon polygon)
{
IPointCollection pc = polygon as IPointCollection;
string strXY="";
string x;
string y;
int sum = 0;
for(int i=0;i<pcPointCount;i++)
{
if (sum == 0)
{
sum = pcPointCount;
strXY = sumToString();
}
x = pcget_Point(i)XToString();
y = pcget_Point(i)YToString();
strXY = strXY + "\r\n" + x + "∴" + y + "∴0000000";
}
return strXY;
}
1自定义工具箱是什么
就像名字一样,自定义工具箱是由个人创建的工具箱,就像下面这样,可以理解成一个 tbx 后缀的压缩包,每一个工具箱中都可以添加多个工具集、脚本工具甚至模型构建器工具。
一大堆工具箱
11如何添加自定义工具箱(熟悉可跳过)
第一步:右键点击 ArcToolbox -> 添加工具箱
第二步:在打开的添加工具箱窗口中选中需要添加的工具,然后点击右下角的打开即可。
添加工具箱到 Arcmap
12如何创建自定义工具箱
点击右上角的红色工具箱符号,可以新建并重命名一个工具箱。
我们这里新创建了一个海怪工具箱,用于之后的教程演示。
新建工具箱
13添加一个脚本工具
新创建的工具箱就像一个大箱子,箱子呢是用来装工具的,你可以直接在工具箱中右键,然后点击添加,再点击脚本,进而创建一个脚本工具;
亦或是右键,点击新建,再点击工具集,创建一个可以自定义名称的工具集,然后在工具集里新建一个脚本工具。
这里添加的脚本工具只是一个空壳,我们后面会继续完善。
新建的工具箱位于 /Chapter7/海怪工具箱tbx。
2工具箱的封装
工具箱由三部分组成,其中有两部分需要我们来控制:
一是输入界面:确定工具箱输入界面的参数定义和设置;
二是 Python 源代码:功能的实现,为 py 后缀的脚本文件;
三是对参数行为提供额外控制的可选验证代码,其位于工具箱中(这部分自带,基本上不用修改)。
所以下面的重点就是输入界面和 Python 源代码。
21工具箱输入界面
工具箱输入界面,或者说图形交互界面(GUI),就像下面的几张图一样,从该界面我们可以控制工具的行为,自定义输入界面然后配合 Python 脚本,可以实现多种客制化的功能。
简单来说,你可以认为输入界面是依托于 Arcmap 的“前端”,脚本代码就是负责运行的“后端”。
导入导出工具:
为方便演示,制作一个非常简单的工具箱,它的功能呢就是把输入的要素类(数据库或者 shp )再导出来而已,是完全没有用的导入导出功能啦,不过作为演示还是非常不错的。
制作完成后的导入导出工具的界面
第一步:
在工具箱中,右键点击添加,再点击脚本,然后修改名称,修改成你想要的名字,勾选存储相对路径名,然后点击下一页。
修改名称
第二步:
然后添加脚本文件,添加该脚本文件 /Chapter7/toolscript/input_and_outputpy,读者可以在最后的下载包中找到该文件。
然后点击下一页。
链接python脚本
第三步:
控制用户交互界面。ArcGIS 在这里内置了一整套简单但是实用的图形控件,比如输入菜单、下拉框、多选框、单选等,借由这些图形控件我们可以控制脚本工具的图形交互界面。
我们这里使用的脚本功能非常简单,上面也有说到:输入一个矢量要素类,不做任何处理,然后输出一个矢量要素类。
为了匹配这个脚本,我们需要设置一个输入图层的控件,同时为了能顺利的输出,也需要一个输出图层的控件,注意一个是输入一个是输出。
从下图可以看到,左边(左边的橙色框)是显示名称,其中输入输出控件的名称以及输入控件的名称,这里命名为输入要素和输出要素;然后在右边(右边的橙色框)的数据类型下拉框中,我们选择要素图层,这里只能做选择,不能任意输入。
设置名称和数据类型
那么输入输出是如何区分的呢?
选中输入要素(变成蓝色),然后可以看到下方(下方橙色框)的参数属性设置选项卡,这里可以对参数进行调整。
参数选项
① 类型:有三种,一般只会用到 Required 和 Optional,表示必须和可选,用于控制参数是否可以忽略不填;
② 方向: 两种,Input 和 Output,表示输入和输出,大部分情况都是使用 Input 来获得参数,Output 用于获得最后的成果数据,像是矢量、栅格或者图表;
③ 多值:Yes 或者 No,用于输入多个相同类型的数据,工具打开后就是下面这样,在输入要素中可输入多个要素类;
④ 默认:设置一个控件的默认值,直接输入即可。可配合多值一同使用,使用 ; (英文的分号)分开,
结果如下,可以看到一打开该工具就已经填充上了预设的多个默认值(报错是因为数据类型不是要素图层);
⑤ 环境:工具箱的环境设置,比如掩膜、容差范围、默认数据库位置等,一般不预先设置;
⑥ 过滤器:选择文件类型可以在选择文件时只显示特定格式的文件;
⑦ 获取自:指定数据的获取源。这是个什么意思呢?比如我们想要获取图层A的某个字段,获取源就是图层A。
以下面这种图作为例子,新增名为字段的控件(上方的橙色框),数据类型也是字段,然后参数属性中获取自选择输入要素(下方橙色框)。
设置字段控件
点击完成后,打开脚本工具。在输入要素框中选择一个图层,然后再点击获取字段,如下就可以选择图层中的字段了。
获取图层的字段
⑧ 符号系统:在最下面还有一个符号系统,通常只能作用于输出的矢量图层(方向:Output),可为输出图层指定设置好的 lyr 文件样式。
设置符号系统
第四步:
点击右下方的完成,那么脚本工具的输入界面就完成了。
22 Python 脚本
工具箱输入界面和 Python 代码要相互配合才行,工具箱界面中的输入、输出以及各种各样的参数,在 Python 脚本文件中都得一一对应上,将输入界面中的各个参数传给 Python 脚本,这样才能让 Python 脚本按照预期的效果正常运行。
看上去有点麻烦,但实际上 arcpy 中提供了现成的函数就可以直接获得参数。
①参数对接(获取)
至于如何对接参数,我们使用刚刚的那个脚本文件举例:
/Chapter7/toolscript/input_and_outputpy
# -- coding:utf-8 --
import arcpy
#▶1◀
input_lyr = arcpyGetParameterAsText(0)
output = arcpyGetParameterAsText(1)
if __name__ == '__main__':
lyr = arcpymappingLayer(input_lyr)
arcpyCopyFeatures_management(lyr, output)
▶1◀:arcpy 提供了 GetParameterAsText(index) 函数,该函数根据输入界面的排序号码获得指定的参数。比如 GetParameterAsText(0) 获得的就是输入图层参数, GetParameterAsText(1) 获得的就是第二个参数,也就是输出图层参数。
如果有更多参数,以此类推。
②参数对接中应该注意的情况
GetParameterAsText(index) 从输入界面获得的参数都会转变成字符串,没错都是字符串。
如果你只是输入输出地址这种,那么没有问题,因为地址本来就是字符串,但是如果你设置了一个选择长度范围的长整型的控件、亦或是某种布尔值选择,最后输入到 python 脚本这里都会变成字符串。
整数变成字符串,使用 int(str) 规避;
布尔型变成字符串,True 变成了 "True",False 变成了 "False",这样就不能判断真假了,需要写一个判断语句或者随便你,方法很多;
还有就是一个输入控件多值的情况,所有值根据先后连接成一个字符串,中间由 、(英文分号)间隔,可以使用 split 函数分开;
以上就是关于拓扑检查的步骤全部的内容,包括:拓扑检查的步骤、请问:如何在Arcgis的要素集中查找是否存在多部分要素、如何用python读取arcgis中shapefile文件的属性表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)