目录
01 上午题
1.1 题目
1.2 数据
1.2.1 如何添加比赛数据?
1.2.2 比赛数据展示
1.3 思路
1.3.1 坐标系问题
1.4 实操
1.4.1 建立空间数据库和比赛数据导入
1.4.2 坐标系问题解决
1.4.3 要素的订正
1.4.4 数据入库和符号化管理;
1.4.5 其它;
最近打算做一期关于GIS技能大赛的博客,可能持续时间为两到三个月。
另外,考虑到是以比赛为目标,为防止操作出现意外或者中止以及熟悉比赛流程,ArcMap等软件均切换回英文界面,浏览可能不太方便。
另外,为了保证完整流程,当前所有操作,事无巨细,均加以展示,繁琐可直接跳过。
--2023年05月20日
我们先来看看题目要求:
题目:空间数据的采集、编辑、处理与建库
现有一幅标准比例尺的地形图扫描件及其需要采集的矢量数据图层(Shapefile文件格式,矢量图层中数据已采集),但矢量数据图层中存在以下不足,一是某些矢量图层遗漏了部分要素,二是部分矢量图层中要素的几何、属性及所处图层存在一些错误。请查找以上空间数据采集时存在的问题并修正,然后按照国家数字线划图(DLG)数据组织方式进行空间数据建库。
相关信息说明如下:
具体竞赛要求如下:
类似地,你可以对栅格.jpg数据如上操作。
栅格数据展示:
思路仅我个人之见,方法很多。
显而易见,比赛中的矢量文件是由栅格数据(扫描地图)数字化(矢量化)得来的,因此我们完成各项操作都应该基于扫描地图,以它作为参考。
想必已经发现了,所有的数据均没有坐标系。但是,对于不同的文件处理方法是不一样的,首先我们查看栅格.jpg文件(如下图),可以发现,栅格影像的四个角点均有精确的经纬度坐标(注意是地理坐标),因此我们可以基于这四个点位的地理坐标进行地理配准,另外,题目要求:
数据空间参考系统为:西安1980-高斯克吕格投影;
因此我们进行地理配准之后,我们需要对数据进行定义投影和投影转换,得到西安80坐标系的投影坐标系。
另外在进行上述操作之前,我们应该查看一下扫描地图(栅格.jpg)是否已经被做好投影只是被隐去了坐标系,(因为矢量文件就是如此)。具体如下:
栅格文件我们讲完了坐标系问题,主要就是进行:地理配准+定义投影+投影转换,但是还遗留了一些问题,我们在这里会得到解决。
矢量文件可能会觉得不也是如此吗?But实际上不是,我们知道矢量文件是由扫描地图(以后对于栅格.jpg均是如此称呼)数字化(矢量化)得到,所以我们通过扫描地图的4个角点信息可以知道,矢量文件的大致位置在102°E左右。假定我们的坐标系为西安80的6°分带,那么该位置的带号为102 / 6 + 1=17带;假定我们的坐标系为西安80的3°粉黛,那么该位置的带号为(102 - 1.5) / 3 + 1= 34带。(以上除均为向下整除)
那么我们通过下面的判断(如下图)可以发现,shp文件均有正确的投影坐标,而且为西安80坐标系3°分带(下图的6°为口误)。
因此,对于矢量文件,我们仅需要对其进行定义投影即可将其转化为西安80 3°分带的投影坐标系,那么我们也就回答了扫描地图的坐标系问题--转化为何种投影坐标系?--> 西安80 3°分带的投影坐标系。
当然,当我们对矢量文件和栅格文件分别处理完后,可能会存在矢量文件上的要素与栅格文件上的地物对应有一些偏差,那么就还需要对其(这里的其既可以是栅格文件,也可以是矢量文件,这里就推荐对栅格文件进行地理配准吧,因为对矢量文件进行地理配准实际上使用的是另一个工具叫做空间校正)进行地理配准。
其实在这里还想说,为了避免对原始文件的篡改(这是为了我们后续编辑文件失误还可以找到原始文件进行对比查看和修复等)以及题目要求(建立空间数据库,将要素导入最后将数据库打包提交)。
因此这里我们事先将所有数据全部导入到数据库中,之后均对数据库的数据进行操作而保持原始文件没有修改和编辑。
出现下方窗口等待即可······
扫描地图的地理配准;
由于地理配准我们等会需要输入地理坐标,为了保证可以使用该功能,我们将数据框的坐标系更改为西安80地理坐标系。(如果你不想这么操作,那么你需要将扫描地图上的度分秒格式地理坐标转化为十进制的地理坐标,然后在后续地理配准时将十进制的地理坐标填入)
显示地理配准工具条;
对扫描地图进行地理配准;
配准之后由于我们的地理配准工具勾选了Auto adjust(自动校正),所以每当我们添加一个控制点,该工具就会实时的依据当前已有的控制点信息对扫描地图进行校正,这就会导致扫描地图会校正到其他位置而不是在视图范围内的区域。
说人话就是你添加控制点之后,应该会出现视图上的扫描地图不见了的情况,此时只需要将该栅格文件 Zoom to Layer即缩放至图层即可。
如上操作,对于其它几个角点信息亦是如此操作,这里不再一一展示。
扫描地图的定义投影;
此处需要强调一下ArcMap的投影坐标系。对于同一坐投影标系的同一分带,ArcMap提供了两种不同表示方法的坐标系,主要体现在坐标的分带表示上。
例如对于西安80 3°分带的投影坐标系中的第34带(中央经线为102°E),ArcMap提供了如下两种:
Xian 1980 3 Degree GK CM 102E
Xian 1980 3 Degree GK Zone 34
这两种表示的都是同一个分带上的坐标系,但是下面那个坐标系会给每一个点位的经度添加上分带号(shp文件中某一点位的34540644.648 4321097.493 Meters的34表示第34分带);而上面那个坐标系则不会给每一个点位的经度添加上分带号(即shp文件如果是以上面的坐标系投影则点位类似于34540644.648 4321097.493 Meters)所以此处我们可以精确说,我们想要每一个数据都投影成Xian 1980 3 Degree GK Zone 34。
扫描地图的投影转换;
十分抱歉,下方的坐标系应该选择Xian 1980 3 Degree GK Zone 34。
Shp文件只需要定义投影即可。
但是由于要素比较多,这里可以使用模型构建器(ModelBuilder)进行批量处理,当然如果你不会那么建议老老实实一个一个定义投影。
这里仅仅展示模型构建器的一个展示图,不会深入说明。
现在,我们已经处理完大部分的坐标系问题了,现在将所有数据添加到图层可以发现,矢量文件与扫描地图发生了错位(如下图),这很正常,因为矢量文件是比赛组织者基于扫描地图得到的,我们得到的地理配准好的扫描地图肯定和它们的有偏差,所以我们基于它们的shp文件对扫描地图进行再次配准即可。
对扫描地图再次进行地理配准;
重复上述操作多次,直到目视解译发现没有错位为止;
直到得到下方效果为止;
按照比赛要求,我们接下来主要是解决以下的问题
- 将遗漏的要素补充完整,累计至少10处以上;
- 查找出存在几何、属性及冗余错误的要素,并修改正确,累计至少10处以上;
- 查找出图层放置错误的要素,并将其放置到正确图层,累计至少10处以上;
如何判断是否遗漏?错误?主要通过是扫描地图上的图例进行判断,如下:
修正的准备工作
遗漏的水井 ==> 添加
遗漏的城墙、围墙 ==> 添加
遗漏的围墙、城墙 ==> 添加
以上仅仅展示点、线、面冗余部分如何处理,肯定还有其它点、线、面要素类存在遗漏问题,均是如此操作,这里不再重复操作说明。
我们先来了解一下什么叫做几何、属性以及冗余错误。
这个我其实是根据实际情况来的,可能包含以下几个方面。
- 要素类型错误;例如本来应该矢量化为面(例如有宽度的河流),却绘制为线(例如没有宽度的河流); ==> 我认为这属于几何错误
- 范围错误;例如本来只有矩形范围大小为耕地,现在它将这一范围扩大或者说多出一部分本不属于耕地范围的区域;又例如只有圆形范围大小为草地,现在只有不足圆形范围的划为了草地也就是说还有一部分区域属于草地但是没有划归为草地; ==> 这也应该属于几何错误;
- 属性错误;这个其实就是范围错误的极致表现了;一块矩形范围大小的独立厂房,要素范围绘制的非常正确,但是他却将其属性划为草地;(当然其实它也是属于图层放置错误类);其实这里我觉得更应该是属性表中隐藏的错误,而不是上述这种错误,这个我看看能不能遇到这类错误,如果遇到我将会补充完整。== 补充,确实找到,例如某一高程点在地图上显示为867.1m,但是在属性表中显示为897.1m,很显然这就是属性错误,需要我们在属性表中进行更改。
- 冗余错误;这个也是类似和上面的错误有交叉,就是有一个要素本不属于这一类,现在给他绘制出来并归为这一类,那么就是冗余错误了;
变电所及节点冗余错误(如下图);
<抱歉,这其实就是变电节点,所以没有问题。但是这里为了展示冗余错误的处理就不将这部分操作删除了>
需要将其删除;
(因为我不知道这本来是属于什么点类型,所以我只好删除,否则我应该是需要将其选中并导出,与另一种点要素类合并)
高程点的高程字段错误(属性表);
编辑GAOCHENG字段信息
河流类型错误;
从下面可以看出,本来应该属于面状河流的要素现在被绘制为线状河流了,由于我们现在是对单线河流要素类进行操作,所以这里应该对其进行删除处理;
这里删除类似,就略讲了;
做完单线河流的处理,我们应该可以预见,在河流要素类的该位置应该是存在某些问题,结果发现确实;它遗漏了这一部分面状河流(这应该是属于遗漏错误类型了);不过这里也贴出简单的操作步骤;
河流的范围错误;
如下图可以发现,河流的面状区域与底图的河流区域并不相符,因此我们需要编辑节点以使满足底图河流区域。
空地范围错误;
这种错误和其他的还不太一样(如下图),空地的多边形内还有一个独立房,但是它将这个独立房给包含进去了,所以我们需要抠除这一部分的独立房区域;
思路很简单,由于我们有独立房的要素(如下),所以思路就是:
1. 常规思路就是将这个空地内的独立房选中并导出来,这个空地也是如此(选中并导出),然后单独对两个shp文件进行擦除(当然先相交/更新/操作再选中外围区域导出也是可以,不过很明显比较麻烦不如擦除),擦除得到的shp文件与原先的空地Shp文件(记得将原来的所处位置的那个空地要素删除)进行合并;
2. 这个思路本质还是擦除,不过当你真的了解ArcMap,你就不会选择第一种方法进行处理,因为过于麻烦。实际上擦除工具(不仅仅是该工具,很多工具都是如此)中输入需要擦除的要素类以及擦除要素类两个文件时,实际上输入的是这两个文件选中的要素,如果这两个文件没有要素被选中,那么默认是全部用于处理。所以实际上我们仅仅只需要将擦除要素类(独立房)的那一个独立房要素选中,然后在使用擦除工具正常输入就可以了。 (这里我采用第二种方法)
如果我们的独立房文件中没有这个位置独立房要素呢?这个就是属于遗漏要素错误了,很简单,先创建这个独立房要素,然后回到前面继续前面的思路即可。
擦除操作:
至于这个图层放置错误要素,其实修正的思路就是将这一个Shp文件中的错误要素挪到另一个Shp文件中。
官方教程如下:
复制和粘贴要素—ArcMap | 文档 (arcgis.com)
但是完成上述操作之后,还有一步操作,就是将原先的Shp文件的错误要素删除。
上述的操作实际上叫做剪切,但是我似乎没有找到ArcMap中剪切的操作;
植被要素误放置为河流要素;
具体情况如下:
前面基本上就讲完了大部分的错误,或许还有错误我还未发现,希望可以告知。以下展示其它与上相同的错误,但不进行修正操作。
本是省级行政区划线但是误分为河流;
算了,太多错误了,时间上不允许,暂且如此吧。
数据入库我在一开始就已经讲过了,这里不再重复,这里最多就是将一些要素类进行删除和重命名,因为我们没有选择覆盖,而且我也不推荐覆盖,第一是为了保证我们还可以找到一些中间数据防止错误发生时我们不需要从头开始;第二是覆盖不是所有工具都可以进行的,有一些工具是不允许覆盖原先存在的文件;第三是有一些覆盖会导致ArcMa闪退;
至于符号化管理,这个我之前也做过,实在是麻烦,他不是难,他就是比较繁琐,所以如果可以我打算单独出一期关于符号化的操作博客。这里就在展示了。
不知不觉写了这么多,但是发现仅仅写完了上午题,就我个人感觉,上午题仅仅是繁琐,并不难这些题,就是找找错误,考的比较基础。稍微看了一下下午的题目,哦感觉这个就是需要用到空间分析的知识了。这给我的感觉就是上午考的是地理信息系统+地图学的内容,比较基础,需要耐心;下午考的是图像解译和GIS空间分析,需要融会贯通==>要动脑子了。
好了,暂时这么多了,后天还要考试,拜~。