有学员问如何计算城市之间的距离矩阵,前面讲过的我看是用ArcGIS PRO做的,这次使用QGIS做一下。
省会筛选
从1:100万基础地理数据库中可以筛选省级行政单位地名,也就是省会所在地。
选取省会点
上图的代码:
"CLASS" = 'AB'
将选取的省会进行数据的导出,另存为一个新的GeoPackage,也就是QGIS的数据库。
在QGIS中将选择的省会点另存
由于1:100万基础地理数据库包含中国周边地区,存在部分国外的点,这里我们打开属性表,然后启动编辑,删除非国内省会的点。
小技巧:在AGNP图层中,有GNID字段是中国的行政区划代码,在这里把行政区划代码为空的选中,就是国外的点了。
点击铅笔按钮,启动编辑,删除国外的点
选几个点叠加中科星图数据云的底图查看一下,位置匹配的还是非常准确的,1:100万基础地理数据库中省会地名点的位置就是省政府所在地。
山西省政府
河北省政府
北京市政府
距离矩阵计算
QGIS中有专门的距离矩阵计算工具。从Vector菜单中Analysis Tools找到Distance matrix工具打开,即可计算距离矩阵。
Distance matrix工具参数设置
对于省会城市距离矩阵计算,在参数设置中,Input point layer和Target point layer均设置为前面导出的省会地名点图层即可。为了方便查看是那个城市到哪个城市的距离,这里Input unique ID field和Target unique ID field都选的NAME字段,也就是各省的名称。
Output matrix type,这个参数指定了输出距离矩阵的样式:
Linear (N *
k
x 3) distance matrix
:
这种类型的矩阵为每个输入点报告到_k_个最近目标点的距离。输出矩阵由多达_k_行组成,每行包含三个列:_InputID_,
TargetID
和 _Distance_。
Standard (N x T) distance matrix
:
这是一个标准的矩阵类型,生成的就是常规意义上的距离矩阵,和我们平时看到的一致。
Summary distance matrix (mean, std. dev., min, max)
:
这种类型的矩阵为每个输入点报告其目标点的距离统计信息,包括平均值、标准偏差、最小值和最大值。
使用距离矩阵工具进行计算
三种距离矩阵输出结果
Linear (N *
k
x 3) distance matrix,结果是线性的,fid字段是默认的,每个矢量要素都有,剩下的三个字段分别是起点、终点ID,还有它们之间的距离,单位是“米”。
Linear (N * _k_ x 3) distance matrix
Standard (N x T) distance matrix这个就是我们平时常见的距离矩阵了,看着更舒服一些。
Standard (N x T) distance matrix
Summary distance matrix (mean, std. dev., min, max)这种就是对距离矩阵进行汇总的结果,没有每个城市之间的具体距离,输出的是统计的均值、标准差、最大最小值结果。
Summary distance matrix (mean, std. dev., min, max)
结果验证
使用QGIS中的测量工具对计算结果进行了验证对比,结果表明,QGIS距离计算结果单位为米。
计算结果验证
绘制OD流线
获取起点终点坐标
给省会地名点计算x,y坐标,用来准备挂接得到起点坐标。
给省会地名点添加x,y坐标
检查发现,距离矩阵Linear (N *
k
x 3) distance matrix生成的点要素为终点,在这里之间使用字段计算功能得到
to_x
和
to_y
两个字段,也就是终点坐标。
计算终点的坐标
在省会最临近矩阵图层图层属性中设置挂接,将省会地名点图层的属性表挂接过来,以获取起点XY坐标。
使用字段计算器将省会地名点图层的xy坐标计算到省会最临近矩阵图层,计算得到
from_x
和
from_y
两个起始点XY坐标。
使用字段计算器将省会地名点图层的xy坐标计算到省会最临近矩阵图层
从图层属性中取消挂接,这样我们就得到了带有起终点XY坐标的属性表,有了这个属性表,我们就可以构造OD线了。