本次操作使用的ArcGIS版本为 10.8 。
第Ⅰ部分:试题
一、 案例背景
我们需要制作一幅国际航线图,图上需要绘制全球大陆、中国、飞机航线和对应的飞机场。地图使用的坐标系是 World_Winkel_Tripel_NGS,*经线东经 150° 。
二、 数据说明(见 “上午A” 文件夹中的 “数据” 文件夹)
- 世界大洲.shp:世界大洲面数据。
- 世界地图.jpg:一张坐标系是WGS1984,*经线是东经 150° 的世界地图。
- 国际航班表.xls:需要在地图上展示的飞机航线信息表。
- 机场 ICAO 码.xls:机场 ICAO 码信息表。
- 世界机场部分.shp:全球部分机场点数据。
三、 分析要求(100分)
-
使世界地图有正确的坐标值和坐标系(20分)
1)世界地图.jpg 的坐标系是 WGS1984,*经线是东经 150° 。
2)请创建一份正确的世界地图数据,命名为 “世界地图配准” 。
地理配准时请在世界地图.jpg的原坐标系下进行,正确位置信息参考世界大洲.shp 。
3)请在工作报告文档中截图附上步骤中涉及到的坐标系信息,否则不予得分。 -
数字化中国地图数据(30分)
为了达到下图的效果,请参考上一步的世界地图配准数据结果,数字化所有缺失的中国数据。
-
创建飞机航线线数据和机场点数据(30分)
1)创建国际航班表中的所有航线信息线数据,命名为 “国际航线” 。
2)创建上一步航线中涉及到的所有机场点数据,命名为 “机场数据” 。请在工作文档报告中截图附上机场数据的属性表截图,截图中要求能看到机场中文名称字段和机场数量信息。每个机场只用一个点表示,请勿重复。 -
制作国际航线地图(20分)
1)地图的背景请参考下图样式:
地图背景参考图 2)国际航线数据和机场点数据,请自己选择合适的符号。 3)不需要排版出图(无需添加指北针、经纬网、图名、图例等信息),请在工作文档报告中截图附上最终制图成果。
a)为了完成下图样式,根据需要创建缺失的数据。
b)深蓝色轮廓线 RGB:42,176,239。
c)浅蓝色背景色 RGB:224,242,252。
d)黑色轮廓线 RGB:88,88,88。
e)坐标系为 World_Winkel_Tripel_NGS,*经线为东经 150° 。
第Ⅱ部分:参考解题过程
一、 配置默认地理处理环境
在 “结果” 文件夹下新建文件地理数据库 “am.gdb” ,并右键设为默认地理数据库。
图1 配置默认地理处理环境二、 导入数据并查看坐标系
从【目录】中拖入 “世界大洲.shp”、“世界机场部分.shp” 和 “世界地图.jpg” 三个图层,发现世界机场部分点数据的坐标系为 WGS1984 ,世界大洲面数据的坐标系为 WGS 1984 Web Mercator Auxiliary Sphere ,世界地图的坐标系为 Unknown 。且数据框的投影坐标系自动与世界大洲的投影坐标系保持一致。
图2 导入数据 图3 世界地图栅格图片三、 地图配准
- 更改数据框的投影坐标系
从上一步我们可以发现世界大洲和世界地图的*经线不一致,所以看起来左右半球刚好相反。为进行地理配准,需要将世界大洲投影成与世界地图相同的形状,这一步可以通过更改*经线完成。
右键【图层】,选择【属性】,打开【坐标系】选项卡,选择 GCS_WGS_1984 地理坐标系并双击进入参数设置界面如下图 4 所示,更改坐标系名称为 “GCS_WGS_1984_150” ,并将本初子午线的名称设置为 “<自定义>” ,经度为 150° 。
图4 更改数据框的投影坐标系之后,打开地理配准工具条并开始地理配准。
图5 地理配准开始前准备- 地理配准并校正
首先打开链接表,关闭【自动校正】,然后创建链接对,根据题目要求将链接对数据保存为 “RMS.txt” 。
图6 保存地图配准链接数据设置配准方法为【校正】,并在地图配准工具条下拉选择【校正】而不是【更新地理配准】,这样做的好处是可以保留原始世界地图数据,并创建新的 "世界地图配准.tif" 。
图7 校正下图 8 为地理配准效果。查看校正结果的坐标系,可以发现校正结果被自动赋上一个坐标系,并且与数据框的坐标系相同。
图8 地理配准效果 图9 世界地图配准的坐标系与数据框坐标系一致且自动生成四、 数字化缺失的中国数据
数字化这一步相对比较容易,首先在文件地理数据库 “am.gdb” 下新建要素数据集 “China”,要素数据集 China 的坐标系设置为 GCS_WGS_1984,其余设置可以保持默认。然后在要素数据集下面新建要素类 “Border” 和 “Nine_line” ,然后以 "世界地图配准" 为参照进行矢量化。
图10 新建 China 要素数据集和 2 个要素类 图11 数字化缺失的中国数据五、获取国际航线与机场数据
首先描述这一步的大致思路,第一需要将 EXCEL 表格导入成属性表,然后依据 ICAO 字段将 “世界机场部分” 与 "ICAO码" 进行连接获取机场的中文名称。 第二步是要依据机场中文名称获取 ”国际航班表“ 中每一条航线的起点和终点的 XY 坐标。第三步即根据 ”XY转线“ 工具获取国际航线,最后获取相关机场数据。
- 获取机场中文名称
打开【ArcToolBox】|【转换工具】|【Excel】|【Excel转表】工具,将 ”国际航班表“ 和 ”机场ICAO码“ 导入到文件地理数据库 "am.gdb" 中。
图12 导入Excel表格打开 "世界机场部分" 的属性表,添加 “中文名” 字段,类型设置为文本。初始化为空值。
图13 在世界机场部分添加机场中文名字段连接 “世界机场部分” 与 “机场ICAO码” 。
图14 连接字段为 ICAO再次打开 “世界机场部分” 属性表,可以看到后边新增了几列。右键 “中文名”,选择字段计算器来获取 “世界机场部分.中文名”,该步骤截图如下所示:
图15 获取机场中文名称至此,机场的中文名称已经获取完毕,可以取消连接。
- 获取航线起点与终点的 XY 坐标
第一步,获取世界机场部分的 XY 坐标:打开【ArcToolBox】|【数据管理工具】|【要素】|【添加XY坐标】工具,输入为世界机场部分,操作结果如图 16 所示,最后两列分别为 "POINT_X" 和 “POINT_Y” 字段。
图16 获取机场的 XY 坐标第二步之前已经获取每一个机场的坐标,接着在第二步中需要获取每一条航线的起点和终点的坐标。可以想到,这里需要进行 2 次连接,但是在 ArcGIS 中两个属性表无法同时建立 2 个连接。那怎么办呢?方法就是先将需要的字段提前在 “国际航班表” 中创建好,然后进行第 1 次连接,接着使用字段计算器进行赋值。第 2 次连接之前取消上一步的连接,然后重复上一步的操作,这也算是一个小技巧。
第二步,在国际航班表中添加 4 个字段,类型为双精度,字段名称如下图所示:
图17 国际航班表添加起点和终点的 XY 坐标共 4 个空白字段将 “国际航班表” 的 “出发城市与机场” 与 “世界机场部分” 的中文名进行第 1 次连接,然后使用字段计算器对上图中的 “起点POINT_X” 和 “起点POINT_Y” 进行赋值。取消第 1 次连接,然后将 “国际航班表” 的 “目的地城市与机场” 与 "世界机场部分" 的中文名进行第 2 次连接,使用字段计算器对 “终点POINT_X” 和 “终点POINT_Y” 进行赋值。
图18、19 国际航班表与世界机场部分进行的 2 次连接最后,查看国际航班表:
图20 字段计算器获得起点终点坐标- 获取国际航线
上一步中,已经知道每一条航线的起点与终点的 XY 坐标,可以依据此进行 XY 转线以获取国际航线。打开【ArcToolBox】|【数据管理工具】|【要素】|【XY转线】,详细设置界面如下所示:
图21 XY 转航线大家也可以尝试一下,如果空间参考选择为 GCS_WGS_1984_150 ,XY转线的结果也即国际航线会是什么样子,具体这里为什么选择 GCS_WGS_1984 ,欢迎看到这里的小伙伴一起来交流!
- 获取机场数据
思考一下,相关机场的特征是什么?其实相关机场就是国际航线的端点,而在 ArcGIS 的【按位置选择】中,可以通过 “接触源图层要素的边界” 来对世界机场部分进行筛选,然而不幸的是,ArcGIS Desktop 10.8 这个版本在使用这个工具时会出现错误并且强制退出。最终我用 “与源图层要素相交” 这一空间选择方法作为替代,来筛选机场数据,实际效果也是完全一致。
图22 按位置选择相关机场右键 “世界机场部分” ,选择【导出数据】,将所选要素导出到文件地理数据库 “am.gdb” 中,命名为 “机场数据”。其属性表如下所示,可见机场中文名称,并且机场数量为 89 。
图23 机场数据六、 制作地图背景并成图
- 绘制矩形背景
新建要素数据集 “World”,其坐标系仍然为 GCS_WGS_1984,然后将 “世界大洲.shp” 导入到要素数据集当中,然后新建要素类 “Background” ,打开【编辑器】,设置编辑对象为 “Background”,然后以 “世界地图配准” 的 4 个顶点为参照绘制出一个矩形。
图24 在 GCS_WGS_1984_150 数据框坐标系下创建矩形背景创建矩形背景之后,无法确定左右边界是否准确,因此需要更改*经线,然后对背景进行修理,使缝隙或重叠完全消失。
- 更改*经线并编辑折点
保存编辑结果并停止编辑,右键【图层】,将数据框的坐标系更改为 GCS_WGS_1984。开始编辑 “Background”,点击编辑器下拉按钮,打开【捕捉】。选中编辑器的【选择】按钮,选中Background,右键点击【编辑折点】,
图26 打开编辑折点 图27 移动折点使其完全对准当背景图层完全密合后,保存编辑结果并退出编辑。将数据框的坐标系更改回 GCS_WGS_1984_150 。右键图层设置符号形状及大小,国际航线地图的简单线性投影如下。
图28 飞机航线地图- 更改数据框坐标系
右键【图层】,更改数据框坐标系为 Winkel Tripel (NGS - World),双击该坐标系以修改 Central_Meridian 为东经 150° 。
图29 修改数据框坐标系国际航线地图如下:
图30 国际航线地图结尾:参赛收获及数据下载地址
这道题目一直在使用的坐标系 GCS_WGS_1984 其实只是地理坐标系,那么,为什么它不是投影坐标系却可以显示在平面上呢?通过搜索,我后来才明白 ArcGIS 使用一种简单的普通线性投影 WGS_1984_Plate_Carree 来作为地理坐标系 GCS_WGS_1984 的投影方法,所以这里使用到的 GCS_WGS_1984 都改成 WGS_1984_Plate_Carree 也是可行的,甚至要更可靠一些。
我当时在参加比赛的过程没能和队友完成这一道题目,现在来看原因主要是地图投影。当我们准备地图配准时,看到世界大洲和世界地图的左右半球刚好相反,于是我一下就懵了。地图投影对地理数据的处理真的是太关键了,没有正确的坐标系,后边的坐标计算都是白搭。此外,修改*经线这样的骚操作也是我一开始没有想到的。不过,比赛结束之后重新完成这道题目给我带来了更大的收获。
数据下载地址(提取密码:zy65)
参考资料:
GIS地图投影的几分感想
第十届全国大学生GIS应用技能大赛上午(试题及参考答案)