选址模型是GIS经典的空间分析模型,也是GIS最擅长解决的问题之一。选址在生产生活有着广泛的应用,如餐饮企业(麦当劳/肯德基)选址、超市、医院、物流仓储、甚至核电站选址等。选址的好坏直接影响到服务方式、服务质量、服务效率、服务成本等,从而影响到利润和市场竞争力。
(资料图)
本文以飞机场停机坪选址为例,模拟实际生活中的决策约束条件,使用QGIS模型构建器建立选址模型,详细演示分析和建模过程,得到选址结果。(文末附有示范数据下载地址)
01 模型需求分析
本文的需求背景简要描述如下:
航空公司想在Nueces县现有的机场中查找一个合适的位置,为自己公司的直升飞机修建停机坪,要求如下:
不能修建在建成区内,以免影响市民的日常生活。
为了方便飞行员通勤,最好在城市5公里范围内。
距离县级道路不超过2公里。
距离水域不超过800米。
现有的数据为:
县级行政区划面图层,县名为COUNTY字段。
水系图层。
道路图层,道路等级存储在RTTPY字段中,取值为”C“表示县级道路。
城市建成区面图层。
飞机场点图层。
分析需求,转化为GIS语言,则选址模型变为步骤:
从行政区划图层中按属性提取出Nueces县要素。
按Nueces县的位置提取位于该县的机场。
从城市建成区面图层按属性提取出城市Corpus Christi面要素,对该要素做5000米的缓冲区,然后使用缓冲区将建成区擦除。
从道路图层按属性提取县级道路,然后对提取结果做2000米缓冲区。
对水系图层做800米缓冲区。
将城市建成区处理结果、道路缓冲区和水系缓冲区做叠加分析,得到的面多边形即为满足需求的区域。
使用满足需求的区域裁剪机场图层,即可得到适宜修建停机坪的机场。
下面使用QGIS模型构建器将上述步骤构建为模型。
02 打开数据
在【浏览】面板中定位到示范数据,拖拽到地图窗口中。
在【图层】面板调整图层顺序,从下到上依次为:Counties、CityBoundaries、Water_features、Roads、Airports。
03 模型构建器界面介绍
点击菜单【处理】->【模型构建器…】,打开【处理模型】窗口。
【处理模型】窗口由上方的工具栏、左侧的操作面板和右边的模型构建主窗口组成。
工具栏提供打开模型、保存模型、浏览模型和运行模型等功能。
左上方为模型变量定义区域,可以把需要重复使用的字符串或者数值定义为变量,使用变量可以提高工作效率。
中间为模型特性,用于设置模型的名称和所属分组。名称和分组决定了模型在【处理工具箱】面板中所处的位置,方便查找和调用。
左下方是模型构建元素面板,分为【输入】和【算法】两个标签页。
要新建一个模型,只需设置模型的名称和所在的分组,点击工具栏的【保存】按钮设置存储路径即可。例如本文新建的模型名称为“停机坪选址模型”,显示在【处理工具箱】的【我的模型】节点下。
04 提取县级区划
建模第一步:从全部行政区划中按属性提取出Nueces县要素。
将左侧的操作面板切换到【输入】标签页,可以看到QGIS的模型提供矢量字段、地图图层、坐标参照系(CRS)、字段映射器、字符串、布尔型等输入参数类型。我们需要为县图层定义一个输入参数,所以找到“+矢量图层”拖拽到右边窗口中。
在弹出的【矢量图层参数定义】对话框中,设置如下参数:
参数名称:“县 图层”。
几何图形类型:“多边形”。
勾选“强制”,表示该参数在模型运行时必须提供,不能为空。
点击【OK】完成参数定义设置。
可以看到模型窗口中用黄色方框绘制出了“县 图层”参数,双击该方框可调整参数。
为了按字段筛选县级区划,需要定义矢量字段(Vector Field)参数,选中“+向量场”(这里实际是“矢量字段”,翻译有误差),拖拽到右边画布中。
在参数定义对话框中,设置如下参数:
参数名称:“县名 属性”。
父图层设置:“县 图层”,表示该字段是来自参数“县 图层”的属性。
允许的数据类型:“字符串”。
默认值:“COUNTY”。
勾选“强制”复选框。
点击【OK】完成设置。
定义【按属性提取】算法参数以提取“县 图层”要素。左侧面板切换到【算法】标签页,在上方的搜索框中输入“extract”,找到【矢量选择】->【按属性提取】,拖拽到模型窗口中。
在弹出的【按属性提取】对话框中设置:
Description:提取Nueces县。
输入图层:县 图层。
选择属性:县名 属性。
操作符:=。
值:Nueces。表示提取名为“Nueces”的县。
提取后(属性):Nueces县。表示提取成功时,输出结果默认情况下保存在“Nueces县”为名称的图层中。在模型运行时,用户可以另行设定输出结果的路径和文件格式。
注意,在模型处理过程中,如果不设置输出结果的参数,则输出结果作为中间文件在内存中作为下一步骤的输入参数,不会被保存,也不会出现在地图窗口中。
可以看到窗口中增加了一个“提取Nueces县”的白色方块,表示算法,绿色方块“Nueces县”表示该算法的输出结果。至此,县级区域图层的处理结束,点击工具栏的【保存】按钮保存模型。
05 处理机场图层
建模第二步:按Nueces县的覆盖范围提取位于该县的机场点。
设置输入图层参数。切换到【输入】标签页,双击【矢量图层】添加机场图层参数,在弹出的参数定义对话框中设置:
参数名称:“机场 图层”。
几何图形类型:点。
勾选“强制”复选框。
点击【OK】完成设置。
使用裁剪算法提取处于县范围内的机场。切换到【算法】标签页,在搜索框中输入“clip”,找到【矢量叠加】->【裁剪】,拖拽到窗口中。
在【裁剪】对话框中设置参数如下:
Description:裁剪机场
输入图层:机场 图层
叠加图层:"提取后(属性)" from algorithm "提取Nueces县"。
其他参数保持默认即可,点击【OK】完成设置。
完成机场图层裁剪后,模型如下:
06 处理城市建成区面图层
模型构建第三步:处理城市建成区面图层,即根据需求从城市建成区面图层按属性提取出城市Corpus Christi面要素,对该要素做5000米的缓冲区,然后在缓冲区面将建成区擦除。
添加输入图层参数。切换到【输入】标签页,双击【矢量图层】,参数定义如下:
参数名称:城市区域 图层。
几何图形类型:多边形。
勾选”强制“复选框。
点击【OK】完成设置。
添加字段参数。双击【输入】标签页的参数【向量场】,设置城市区域属性参数如下:
参数名称:城市区域 属性。
父图层:城市区域 图层。
允许的数据类型:字符串。
默认值:NAME。
勾选”强制“复选框。
点击【OK】按钮完成设置。
切换到【算法】标签页,双击【矢量选择】->【按属性提取】,参数设置如下:
Description:提取Corpus Christi市。
输入图层:城市区域 图层。
选择属性:城市区域 属性。
操作符:=。
值:Corpus Christi。
其他参数保持默认即可。
点击【OK】完成设置。
使用缓冲区分析计算距离城市5000米的覆盖范围。在【算法】标签页找到【矢量几何图形】->【轮廓】(buffer),双击弹出参数设置对话框,参数定义如下:
Description:Corpus Christi缓冲区。
输入图层:"提取后(属性)" from algorithm "提取Corpus Christi市"。
栅格距离结果:5000。
融合结果:是。
其他参数保持默认,点击【OK】完成设置。
使用差分算法,去除建成区域范围,得到城市区域5000米内不属于建成区的环状地带。找到【矢量叠加】->【差分】算法,双击,设置参数如下:
Description:差分Corpus Christi市。
输入图层:"缓冲区建立后" from algorithm "Corpus Christi缓冲区"。
叠加图层:"提取后(属性)" from algorithm "提取Corpus Christi市"。
其他参数保持默认,点击【OK】完成设置。
此时,模型的全图如下:
07 处理道路图层
模型构建第四步:处理道路图层,即从道路图层按属性提取县级道路,然后对提取结果做2000米缓冲区。
添加道路图层输入参数。在【输入】标签页双击【矢量图层】,参数定义如下:
参数名称:道路 图层。
几何图形类型:线条。
勾选”强制“复选框。
点击【OK】完成设置。
添加用于提取道路的属性参数。在【输入】标签页双击【向量场】,在弹出对话框设置参数定义:
参数名称:道路 属性。
父图层:道路 图层。
允许的数据类型:字符串。
默认值:RTTYP。
勾选”强制“复选框。
点击【OK】完成设置。
使用【按属性提取】提取出县级道路。切换到【算法】标签页,找到【矢量提取】->【按属性提取】,双击,在弹出的对话框中定义如下参数:
Description:提取县域道路。
输入图层:道路 图层。
输入属性:道路 属性。
操作符:=。
值:C。
其他参数保持默认,点击【OK】按钮完成设置。
使用缓冲区算法计算出道路2000米范围的区域。找到【矢量几何图形】->【轮廓】算法,双击,在弹出对话框设置如下参数:
Description:道路缓冲区。
输入图层:"提取后(属性)" from algorithm "提取县域道路"。
栅格距离结果:2000.000000。
融合结果:是。
其他参数保持默认,点击【OK】完成设置。
道路处理完成后,模型全貌如下图:
08 处理水系图层
模型构建第五步:处理水系图层,即对水系图层做800米缓冲区。
添加水系图层输入参数。双击【矢量图层】,在弹出的参数定义对话框中设置:
参数名称:水要素图层。
几何图形类型:线条。
勾选”强制“复选框。
点击【OK】完成设置。
使用缓冲区计算水系800米范围区域。双击【矢量几何图形】->【轮廓】,在弹出对话框中设置如下参数:
Description:水要素缓冲区。
输入图层:水要素图层。
栅格距离结果:800.000000。
融合结果:是。
其他参数保持默认,点击【OK】按钮完成设置。
09 叠加分析,找到满足综合条件的区域
使用相交算法计算出城市建成区、道路缓冲区和水系缓冲区的共同部分。点击【矢量叠加】->【相交(intersection)】,在弹出对话框中设置:
Description:相交。
输入图层:"差分(difference)" from algorithm "差分Corpus Christi市"。
叠加图层:"缓冲区建立后" from algorithm "道路缓冲区"。
由于需要用城市区域叠加道路、河流两个图层,因此要设置【Parent Algorithm】参数,表示多个图层来源。点击【Parent Algorithm】右侧的【…】按钮,在 弹出的多项选择框中勾选”水要素缓冲区“,点击【OK】关闭多项选择对话框。
在【相交】对话框中点击【OK】完成设置。
使用裁剪算法找出满足条件的机场。在【算法】标签页双击【矢量叠加】->【裁剪】,在弹出对话框中设置如下参数:
Description:用适宜区域裁剪机场。
输入图层:"裁剪后" from algorithm "裁剪机场"。
叠加图层:"相交(intersection)" from algorithm "相交"。
裁剪后:最终选址方案。
其他参数保持默认,点击【OK】完成设置。
模型最终全图如下:
10 运行模型,得到选址结果
点击工具栏【保存】按钮,保存模型。点击工具栏【运行】按钮,弹出【停机坪选址模型】对话框。
按照下图依次选择对应的参数,点击【运行】按钮,运行模型。
切换到【记录】标签页,可以查看模型运行过程的详细输出。
等待运行结束后,点击【Close】关闭对话框,返回地图主窗口。
可以看到【图层】面板中新增了”Nueces县“和”最终选址方案“两个图层,其中,”最终选址方案“图层代表模型建议的停机坪选址位置。
11 小结&示范数据下载
使用模型构建器做选址分析的优点在于:一旦模型建立完成,可以反复微调模型的输入参数,模拟不同的限制条件选择方案。例如,当将距离道路2000米修改为1500米时,会导致找不到建立停机坪的机场。而实际工作中,决策约束条件经常需要调整,模型的参数也随之变化,此时只需要在运行模型时改变参数,其他步骤均不需要重新设置,大大方便了决策过程。
然而,不同行业对选择条件的需求各不相同。例如,咖啡店的选址,一般要考虑附近是否有大商场、与高级写字楼的距离、朝向(路南还是路北)、甚至考虑坡向(上坡的位置可增加进入店内的几率)。又如核电站选址,则需要考虑与居民点的距离、附近是否有自然灾害风险、对生态环境的影响、紧急情况疏散等。因此,在实际工作中应根据具体的选址需求构建模型,才能得到最佳的选址方案,为决策提供参考。