交通运输地理空间分析 - 第 3 节课:比飞行检查单还要详细的 MapInfo 使用教程

这份文件是我上课的笔记。

严格来讲,因为笔记里面有一半是老师的课件里面的内容,我只是加上了自己的理解和解释在里面,所以这份笔记的内容创作有一半是我老师完成的。

  • 这门课程最主要是关于一些地理空间分析的实践方法。
  • 比起理论,更关心具体怎么去实现的问题。
  • 我自己结合了平常自己经常使用的 Python 来解释和解决问题
  • 基于 Jupyter Notebook

在这里分享出来,希望能够帮助到一些人。

往期交通地理空间分析笔记回顾:


我们已经讲完了基础知识。从今天开始起,我们就正式开始讲地理信息系统软件的操作了。 我们使用的地理信息系统软件是 MapInfo Professional 12.0

MapInfo Professional 12.0 是一种桌面地理信息系统开发平台,具备测量分析、缓冲区分析、地图代数、多边形操作、数字高程模型(DEM)分析等基本功能,能完成图形、界面、查询、分析等方面的各种要求,为资源管理、区域规划、国土监测、辅助决策等提供解决方案,非常适用于军队管理与指挥、市场营销、城市规划、市政管理、GA交通、邮电通讯、石油地质、土地资源、人口管理、金融保险等各个应用领域。是网优从业人员常用的软件,它可以导入基站图层、经纬度导航等诸多实用功能。

因为只是第一次上机用软件,所以这节课讲的内容不会特别的详细,只是包含一些最基本的使用方法,但是这些最基本的使用方法必须要熟练,因为后面会反复用到。最好能做到肌肉记忆,只要说起一个操作,马上就知道怎么去做,不需要过大脑。

关于 MapInfo

软件的安装

MapInfo 软件的安装方法,我这里不多赘述。因为具体的安装方法取决于你拿到的安装文件是什么形式的,而且一般情况下软件资源都有独立的安装教程。但是因为大家普遍反映了很多在安装过程中遇到的问题,而且我也安装过很多次这个软件,也了解了一些安装过程中可能会遇到的问题。

我把这些问题整理了出来,收录在这篇文章里面:MapInfo 12.0 及 mapbasic 12.0 安装过程当中遇到的问题的汇总。如果你在安装的过程中也遇到了类似的问题,可以参考文章里面的解决方法。

软件操作的基本逻辑

MapInfo 作为一款地理信息系统软件,对于每一个工程项目,会包含这么几个东西:

首先,MapInfo 工作区里面会包含多个图层。最底下会有一个底图图层,我们所有的东西都是在底图图层上面操作的。我们日常生活中会看到很多的地图,那么这些地图实际上 只是一张单独的图片,这些图片本身是不包含数据的。

打个比方说,如果我们想要知道在一张地图上两个点之间的距离,我们可以做的事情就是根据地图的比例尺放大地图到标准尺寸,然后拿起一把尺去测量两个地理坐标之间的距离,通过比例尺换算来获得两个地点之间的真实距离。但是假如我们的地图数据里面是包含坐标信息的,那么我们就可以做到通过地图里面保存的每个点的坐标数据,直接让软件运算出两个地点之间的真实距离。

对于软件的使用来说,我们实际上在做的事情就是把外部底图地图数据导入,然后对这个地图进行加工,使这个地图带上数据。

每一个图层都对应一些数据。这些数据都以二维表的形式保存在数据库里面。我们可以将地图图层比作一张电子表格,类似于Excel。每一行每一行为一个 object,代表一个地理要素(如建筑物、道路、河流等),而每一列为一个 field,则代表该要素的属性(如名称、面积、高度等)。通过这些属性,我们可以对地理要素进行分类和描述。

此外,地图图层还包含了空间信息。这意味着每个地理要素都与特定的坐标位置相关联。这些坐标可以帮助我们在地球上准确定位每个要素的位置,并在地图中显示出来。大概的逻辑可以参考下面的这张表(不过这张图片其实是我从 GeoPandas 库的技术文档里面扒拉下来的哈哈哈,很能体现问题)

在这里插入图片描述

不过我们平时处理的只是前面数据框的部分,而后面那个地理信息的那一列数据通常是软件自动帮我们处理了。(这张图片其实也是我从 Pandas 库的技术文档里面扒拉下来的)

在这里插入图片描述

因此,当我们在GIS软件中添加或编辑地图图层时,实际上是在对这个二维表进行操作。我们可以添加新的行或列来表示新的要素或属性,并根据需要进行数据修改和分析。

MapInfo 的使用

首先我们 必须要新建一个文件夹。这一点非常重要,因为到后面就会发现 MapInfo 的工程文件是散装的,如果不打包在一个文件夹里面就会缺失,无法正常打开工程。

准备底图

我们的底图上什么地方去找呢?其实按照老师的意思,最好的是有 .tif 格式的底图,而如果没有这样的底图的话,.jpg 或者 .png 这种常见的网络图片格式也是可以直接使用的。

比如我们先到网上去找一张中国地图,然后下载下来。

这里老师已经帮我们找好了 .tif 格式的文件了:

在这里插入图片描述

因为这种文件的格式也确实是比较老了,现在只能通过 Windows 图片查看器来查看。瞬间有了一种童年的感觉。

这里简单科普一下:地理数据分为栅格数据和矢量数据

  • 栅格数据:相当于位图。栅格数据是由一系列方格或像素组成的图像,每个像素都包含有关该位置上某种属性的信息。这种数据通常用于表示连续变量,如高程、气温、降雨量等。举个例子,我们可以将一张世界地图分成许多小方格,并在每个方格中记录该区域的平均气温。

  • 矢量数据:相当于矢量图。矢量数据使用点、线和面等几何要素来表示地理现象。它是通过描述要素之间的空间关系来存储和表示地理信息的。举个例子,如果我们想在地图上标记一条河流,我们可以使用线要素来表示河流的路径和形状。

首先我们打开 MapInfo 软件。现在看起来这个界面中央的部分里面什么也没有。不过最上面有选项卡和工具条,可以拖动改变布局。

在这里插入图片描述

  • 如果发现工具框在界面左侧悬浮而不是按照一般习惯置顶,可以拖动到最顶端
  • 如果发现界面布局按钮太小或者有缺失,可以右键工具栏,勾选 Large Buttons

我们接下来打开 File 选项卡,点击 Open

在这里插入图片描述

在下面的界面里面点击我们的 .tiff 文件,导入到 MapInfo 软件里面来。

导入的时候会打开一个导入的界面。

在这里出现的这个导入界面有一点古早了,所以也不是很能默认定位到想要的位置,我们这里要手动搜索一下路径。

与此同时,注意把导入的文件类型选择为栅格数据 Raster Image。我们的文件不是矢量图层,而是栅格图层。可以看到软件能够识别多种栅格数据的类型。

在这里插入图片描述

可以看到,在重新选择的数据格式之后,我们的中国地图就已经能够显示出来了。

在这种情况下,选择我们的中国地图,然后打开就能看到下面这样的一个选项框:

在这里插入图片描述

?

Do you want to simply display the image, orregister it so that it will have geographic
coordinates?

  • Display
  • Register

这个问题是在问你是想要仅仅展示图片,还是对图片进行地理坐标的校准。

那么我们刚才说过,我们要做的事情就是要让没有数据的地图带上数据,如果我们选择仅仅展示图片,那么这样一个没有数据的地图仍然还是没有数据的地图。为了让地图上面拥有我们想要的数据,我们首先就要让地图带上一个坐标数据,因为坐标数据是其他一切地理数据的基准,因此,我们在这里选择校准 Register

坐标配准

接下来软件就会出现下面的这样一个地理坐标配准界面。

在这里插入图片描述

地理校准是指将数字地图与真实世界中的地理位置相对应。通俗来说,就是让电子地图上的点和线与实际地理位置一一对应起来。

在一般情况下,地理校准的原理是通过将电子地图上的坐标系统与真实世界的坐标系统进行匹配来实现的。首先,我们需要采集一些已知位置的控制点,例如道路交叉口、建筑物角点等。然后,在GIS软件中选择这些已知位置,并在电子地图上标注它们的坐标。

接下来,我们需要使用测量工具在现实世界中测量这些已知位置点的坐标。这可以通过使用全球定位系统(GPS)或其他测量设备来完成。将这些测量得到的坐标输入到GIS软件中。

最后,GIS软件会自动计算出一个转换公式,将电子地图上的像素坐标转换为真实世界中的地理坐标。这个转换公式可以应用于整个电子地图,使得所有点和线都能够正确反映出真实世界中的位置关系。

通过进行地理校准,我们可以确保GIS软件中绘制的地图与实际地理位置一致,从而提高地图的准确性和可靠性。这对于空间分析、导航系统和地理信息管理非常重要。

按照老师上课讲的,因为这是一张中国地图,我们只要找到具有代表性的城市的位置,然后在网上查一下这个城市的地理坐标,标注出它的地理坐标就可以了。

但是实际上甚至根本不需要这样做。 首先,第一方面,这是一张中国地图。地图上已经标上了经纬线了。既然有经纬线,那么直接取经纬线的交点作为参考点就可以进行地理配准了。取城市标记点多此一举。

另一方面,标记城市的点并不是几何意义上的点,城市是有一定尺度的,在经纬度上占据一定的范围,而地图上标出的城市位置实际上只是一个相对准确的城市中心的位置。采取这个位置会导致配准精度降低。

第三方面,城市的分布不规则,用经纬线节点校准可以选择一个大尺度的曲面矩形的四角进行校准,效果可能更好。

不过鉴于本文只是一篇上课的笔记,我们就暂时按照老师上课讲的跟着走了。

这里已经查好了下面几个城市的地理坐标:

城市 经度 纬度
漠河 122.37 53.48
台北 121.50 25.03
海口 110.32 20.03
乌鲁木齐 87.62 43.82

我们首先在下面的选择框里面点选城市点,然后就会弹出让你输入坐标点的界面。

在这里插入图片描述

这里的这个点在软件里面被称为 “控制点”。

我们把四个控制点都选择和设置好,如下图所示:

在这里插入图片描述

然后就可以在软件里面看见这个时候地图已经被导入进来了。

有的时候软件在这个位置会问你是否要为项目设置一个坐标系统。(老师在课上演示的时候出现了这个界面,但是我在写这篇笔记的时候并没有出现这个界面,我也没有截到。)

鉴于我们还是初学者,我们就选择 latitude and longitude (经纬度)这个选项。但实际上我们必须明白:经纬度并不是唯一的坐标系统。 关于这个问题我们只要先有个概念就好了,以后会再提及的。

  • longitude n. 经度
  • latitude n. 纬度

地图文件

这个时候不要着急,我们先来按一下保存键 ctrl + s。这个时候只要打开我们为 MapInfo 项目单独建立的文件夹就能看见:地图文件已经存在在这里了。这个地图文件是 .TAB 格式,TAB 就是指 Table,我们之前说过地图图层的本质就是二维表信息。这个就是我们刚才导入的底图的 Table。

在这里插入图片描述

那么打个比方说,如果现在有人跟你说要你把地图发给他,你就可以很容易地把整个文件项目打包然后发给对方。

不要只发 .TAB 文件,更不能把没有地理信息的原图直接发给对方。

以后下一次想要打开这个工程的时候,就点击这个 TAB 文件。除此之外,我们每一次建立新的图层之后,都会单独产生新的文件,我们都要存在这个文件夹里面,以免丢失和造成混乱。

管理和查看图层

可以看见这个时候图片呈现为一个子窗口,可以放大子窗口以便于我们能够看清。

在这里插入图片描述

  • 这个按钮 在这里插入图片描述
    可以选中地图中的矢量元素(我们还没有添加任何的矢量元素,所以暂时无法选中)

  • 这个按钮 在这里插入图片描述
    可以允许用户自行拖动地图浏览。

  • 这个按钮 在这里插入图片描述
    可以打开一个图层页面(通常显示为边栏)

我们点击图层按钮,打开图层菜单界面。可以看到这里有两个图层:Cosmeic Layer 我们暂时不管,我们现在显示的图层是下面这个 “中国地图” 的图层,图层左侧的马赛克图案代表这是一组栅格数据。

在这里插入图片描述

我们点击这个马赛克的图标,就可以打开编辑底图样式的界面。可以看到这里有好几个选项:

  1. 勾选 Style Override,再点击下面的马赛克图标,可以允许自由编辑底图的色差、灰度、对比度和亮度等选项
  2. 勾选 Display within Zoom Range,可以取消地图放大尺寸限制,理论上可以无限放大地图。不过这样做有一个缺点,就是这张地图本身的精度没有那么高,分辨率也没有那么高。但是当你有无限缩放地图的需要的时候,可以取消勾选这个按钮。

在这里插入图片描述

新建图层

现在我们来新建一个 City 图层,用来保存一些城市之间的信息。

点击左上角的 File,然后选择 New Table...,或者直接点击工具栏的新表格选项按钮。然后就会出现下面的界面:

在这里插入图片描述

我们这里选择 Add To Current Mapper,把新的涂层添加到当前的地图。

接下来会产生下面这个界面。这个界面是让你创建图层字段。

所谓字段,就是图层的这个二维表的列名。字段可以是数字、文本、日期、布尔值等类型,具体取决于数据的性质。例如,如果我们现在要创建一个包含城市人口的图层,那么这个图层可能有一个 “人口” 字段,这个字段用来存储每个城市的人口数量。

我们创建下面的这几个字段:

字段名称 数据类型 对应的内容
ID integer 点数据编号
name character 城市名称
popu float 人口
GDP float 地区生产总值

创建好之后,就会产生像下面这样的界面。我这里故意把 name 字段写错成浮点数类型,给大家展示一下如何修改写错了的字段。

在这里插入图片描述

如果不小心写错了字段类型,可以通过如下的方式修改:

首先,在标签栏里找到 Table Structure 这个选项。

在这里插入图片描述

点击之后就会出现和之前设置字段类型一样的界面,然后重新调整就可以了

创建图层数据点

我们现在点击工具栏里的标点工具,在地图上标记一些城市出来。我们选择 合肥、南京、芜湖、上海、苏州、绍兴、杭州、黄山、舟山、台州、温州 这 11 个城市。

提示:有的时候你会看到这个扎点的工具是灰色的,没有办法点击。这可能是因为你把图层设置成了不可编辑的模式。这个时候看左侧图层管理器,图层旁边有一个便签纸上面放着一支铅笔的图标,如果这个图标是灰色的,就说明图层被你设置成了不能编辑的模式。点击一下这个图标,就可以恢复图层编辑了。然后你就会看到上面工具栏里的标点工具变成彩色,可以使用了

刚刚标记完的时候我们可以看见这个点在地图上显示为 size = 12 的黑色小五角星,非常的不清晰。我们这里要把它的这个显示给它放大。

首先可以看到,此时在左侧的图层栏里面已经多出来了 City 这个图层,而图层列项目的左边多了一个小星星的图标。点击这个图标就是设置图例的选项

在这里插入图片描述

就像下面这张图所展示的这样,我们点击一下这个小星星的图标:

在这里插入图片描述

然后就可以进入到这个设置图例的界面,我们这里把图例设置成圆点,颜色设置为红色,大小设置为 18

在这里插入图片描述

这个时候就可以看到我们的点变得清晰了,即使缩小地图也可以很清楚的看到这些点在什么地方

在这里插入图片描述

我们右键左边图层管理器里面的图层,点击 Browse table 选项,打开图层的属性表。

这个时候可以看到属性表里面所有的数值都是 0,文本对象是空着的。这是因为我们还没有添加样本点的信息。现在这些样板点还只是空的、没有对应信息的地理坐标

更新列

在我们之前创建的属性字段里面有一个 ID,这是每一个样本点的编号,我们现在要把我们给每一个样本点数据一个编号值。那么我们要做的事情就是给这些样本点,按照我们添加到地图上的顺序,从 1 到 n 编号。

像这样重复性的工作当然不需要我们自己去做,软件已经提供了功能了。

我们在标签栏中选中 Table 打开,然后选择 Update Column 选项。

在这里插入图片描述

就会出现下面的这个界面。可以看到这里的 ID 字段刚好已经匹配上了。

在这里插入图片描述

然后我们可以使用 MapInfo 内置的 rowid 函数。

(如果我没搞错的话,这个 rowid 函数应该原本是 Oracle 数据库的内置函数,因为地理信息系统的本质就是一个数据库,所以这边应该是可以直接调用。我不知道,我猜的)

像下面这样直接输入就好了。

在这里插入图片描述

按理来说,如果没有什么问题的话,你这里就应该可以看到每一个数据点的 ID 都已经自动匹配起来了,而 ID 的顺序就是你创建点的顺序。

编辑属性表

添加数据点

在右侧的地图里面用选中工具逐一选中每一个样本点编辑属性,把下面表格里的内容写入图层:

ID City popu GDP
1 合肥 963.4 12013.1
2 南京 949.11 12013.1
3 芜湖 373.1 4502.13
4 上海 2475.89 44652.8
5 苏州 1291.1 11521.41
6 绍兴 535.3 7351
7 杭州 1039 18753
8 黄山 132.3 1002.3
9 舟山 117 1951.3
10 台州 667.8 6040.72
11 温州 12110 8029.8

图层信息编辑好之后,就是下面这个样子:

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后比方说,我们现在要添加一个新的坐标点 “盐城”,我们可以再在地图上点击一下盐城的位置。

这里可以看见 “盐城” 已经出现在这里了,我们手动写上盐城的人口和地区生产总值。

但是与此同时,我们也能看到,坐标的 ID 值不对了。新添加的 “盐城” ID 变成了 0,出现在了所有坐标点的 ID 的最下面。

在这里插入图片描述

要解决这个问题的方法也很简单,就是重新执行一下之前我们更新列的操作。

我们打开刚才的更新列的选项卡,重新输入 rowid。因为操作的流程和刚才是一模一样的,所以我这里就不演示了。总之重新执行了这步操作之后就能看见 ID 变成了下面的图片这样:

在这里插入图片描述

删除数据点

我这里就不截图了,因为太简单了,我就用文字描述一下:

直接选中图中的样本点,然后点击到属性表所在的子窗口,按下电脑键盘上的 delete 键,这些样板点就没有了。

当然也可以用工具栏里的批量选中工具来选中批量样本点,同样是切换到属性表所在的子窗口,然后按下键盘上的 delete 按钮。

工具栏里有一连串的选择按钮 在这里插入图片描述
,提供不同的样本点的框选方式。我这里不详细介绍了,大家可以自己尝试

我这里主要重点讲一下如何通过查找筛选的方式删除特定的样本点。

查找数据点

我们这里要查找数据点。为了更好的表现效果,我在这里多增加一些城市的数据点。增加新城市的方法跟前面是完全一样的,我不再演示了。

查找功能在下面这个地方:选中 Qurey,再选中 Select

在这里插入图片描述

作为示例,我们这里筛选人口数量小于 1000 万人的城市。方法非常的简单:只要输入表达式:popu < 1000 就可以了。

(如果筛选的是字符对象,比如我们来查找上海市,则应该输入 name = "上海"。这里的关键就是要加上双引号表示这是字符串。)

在这里插入图片描述

这边就可以看见,无论是在我们的属性表里面,还是在我们的地图上,这些数据点都已经被选出来了。

在这里插入图片描述

我们找到的的是下面的这几个城市。

ID City popu GDP
1 合肥 963.4 12013.1
2 南京 949.11 12013.1
3 芜湖 373.1 4502.13
6 绍兴 535.3 7351
8 黄山 132.3 1002.3
9 舟山 117 1951.3
10 台州 667.8 6040.72
12 盐城 668.97 7079.8
13 宿州 530 2224.6
14 蚌埠 330.9 2012.3
15 九江 457 4027
16 景德镇 162.185 1192.19
17 鹰潭 115.58 1237.55
18 南昌 653.81 7203.5

我们只要按下电脑键盘上的 delete 按钮,这几个点就没有了。这样一来,我们地图上所剩下的就只剩下这几个大城市了:

在这里插入图片描述

可是这里还有一个问题。我想大家已经发现了,在这个表里面有很多条灰颜色的线条。这个线条所代表的意思是,你虽然看上去好像是删除了这个点,但是实际上这个点还是在数据库里面的。这些灰色线条就代表这里有冗余数据,如果不把这些冗余数据清理掉,就会一直占据磁盘空间。

我们接下来要对这些冗余数据进行清理,而我们所使用的方法就是压缩属性表。

压缩属性表

首先,我们在标签栏的这个地方找到压缩属性表的选项。

  • Maintenance 在这里的含义就是指 对属性表进行维护

在这里插入图片描述

然后在下面这个菜单里,我们选择压缩一般属性和地理属性。

在这里插入图片描述

点击之后就可以看到这些灰色的线条都消失了,这就代表着我们已经清理掉了冗余的数据。

这个时候软件还会问你在压缩数据的时候要不要保存一份数据。这个取决于你的具体要求。

在这里插入图片描述

我们最后看到的地图呈现就是这个样子的。

在这里插入图片描述

当然,因为我们,删除了这些数据点,所以 ID 的顺序又乱了。我们这里还有必要再次执行一下 rowid 的操作,确保每一个数据点的 ID 顺序是正确的。

矢量图层文件

一般一个矢量图层会有一个 TAB 文件,里面是文本信息;一个 DAT,一个 ID,一个 MAP,都是 Binary 文件,一般的编辑工具打不开。

如果有转发文件的必要,一定要记得把四个图片同时发给别人,才能保证矢量地图图层的完整性。

猜你喜欢

转载自blog.csdn.net/BOXonline1396529/article/details/132911482