世界各地的人口越来越多地从农村地区转移到城市中心。这种趋势已经变得如此持久,以至于全球一半以上的人口现在居住在城市地区。地理人口结构的这种变化有可能造成意想不到的负面后果,特别是在环境问题上。
分析土地覆被变化是观察城市地区扩张和植被面积减少的常用方法,以配合人口增长。计算土地覆盖的变化可以为区域规划者、政府当局和保护组织提供重要数据,以更有效和可持续的方式发展城市和减轻环境危害。
一、设置工作环境
1–0.地理数据库
在下载任何数据之前,我将创建多个地理数据库,在其中保存和存储我将创建的所有数据和后续图层。将为我将分析的五个城市中的每个城市创建一个地理数据库,该地理数据库将称为:
“Phoenix.gdb”
“Singapore.gdb”
“Berlin.gdb”
“Buenos_Aires.gdb”
“Addis_Ababa.gdb”
为此,我将在 ArcGIS Pro 中打开一个新的 python 笔记本来运行 python 脚本并将其命名为“Land_Cover_Notebook.ipynb”。ArcGIS Pro 中的集成 python 笔记本基于 Jupyter Notebooks,因此它们直观且易于使用。
用于创建新地理数据库的成功 Python 脚本
以下是创建新地理数据库的脚本:
# Import system modulesimport arcpy# Create file geodatabasearcpy.management.CreateFileGDB(r"C:\Users\cstile11\Desktop\Global Land Cover","Berlin.gdb")
ArcGIS Pro 还具有 Python 窗口,这是一个运行简单快速脚本的绝佳选择,同时在窗口上方的地图中查看实时结果。
1–1.坐标系
创建唯一地理数据库后,我为要分析的每个位置添加了一张新地图。我现在想要更改每个地图的坐标系以匹配位置的坐标系,并确保所有坐标系彼此一致。
我将使用通用横轴墨卡托 (UTM) 区域作为投影坐标系。UTM将世界分为60个南北区域,每个区域宽6度。区域连续编号,坐标以米为单位测量北和东。
ArcGIS Hub World UTM 格网是一个有用的交互式地图,其中包含世界上所有的 UTM 区域。我将使用此 web 地图查找我的所有位置以及它们所在的区域。
柏林位于UTM33区
以下是每个城市的UTM区域:
Phoenix — UTM Zone 12
Singapore — UTM Zone 48
Berlin — UTM Zone 33
Buenos Aires — UTM Zone 21
Addis Ababa — UTM Zone 37
在每个地图的属性窗口中,我可以找到要使用的UTM坐标系并进行更改。ArcGIS Pro 中提供了多个 UTM 系统;有些是世界各大洲和地区特有的。由于我正在分析各个国家的城市,因此我将对每张地图使用“WGS 1984 UTM”系统。除布宜诺斯艾利斯外,所有地点都在北半球。
柏林的正确 UTM 坐标系
1–2.土地覆被数据
土地覆盖数据可从各种网站下载,有些是全球性的,有些是针对各国的。我无需在线搜索每个城市的此数据,而是可以在目录窗格中导航到 ArcGIS Pro 中的 Living Atlas 门户。
快速搜索“土地覆被”提供了许多结果。这些结果中包含“1992-2019 年全球土地覆被”,这是一个覆盖全球土地覆被的栅格图层。此数据集还有一个时间线,允许我选择特定年份并显示这些结果,这对于计算不同年份之间的变化是必要的。我将把这些数据添加到每个地图中。
活地图集门户中的全球土地覆盖数据
此土地覆被栅格图层采用 300 米像元大小分辨率和 8 位无符号像素类型和深度。
二、编辑土地覆被数据
2–0.设置 1992 时间戳
由于门户中的土地覆被栅格图层包含 1992 年至 2019 年间每年的数据,因此我需要每年添加时间戳以创建新图层,以便以后比较更改。
为了添加时间戳,我将创建一个新的定义查询,该查询将显示最早可用时间(即 1992 年 1 月 1 日)的数据。
定义查询 = 其中“开始日期”等于“1/11992 12:00:00 AM”
现在,1992 年的数据将显示在我的地图中,我将在其中将该数据导出为其自己的图层。
2–1.导出 1992 年栅格
要导出 1992 年的数据,我将使用“导出栅格”工具。在运行该工具之前,我将确保地图的当前显示比例为 1:400,000,对于每个城市的地图都是相同的,因此我在所有地图和图层之间保持一致。
此工具还允许我设置正确的坐标系,并将图层裁剪为更易于管理的大小。一个可选的 Python 脚本(我将在后面展示)可以完成相同的任务。
创建的新图层称为“Berlin_1992.gdb”。
导出 1992 年栅格
2–2.设置 2019 时间戳
设置 2019 年时间戳的方法与 1992 年数据相同。我需要确保此定义查询在包含所有年份的原始栅格图层上执行,而不是在我刚刚为 1992 年创建的新图层上执行。
定义查询 = 其中“开始日期”等于“1/1/2019 12:00:00 AM”
2–3.导出 2019 年栅格
与 2019 年数据一样,我将使用“导出栅格”工具为 2019 年数据创建新的栅格图层。此层将称为“Berlin_2019.gdb”。
我现在应该有两个新栅格,一个用于 1992 年,一个用于 2019 年。此过程将针对每个城市重复。这两个栅格将用于分析,以检测多年来的变化。
2–4.(备用选项)使用 Python 裁剪和更改坐标系
此处不是在导出栅格时设置裁剪范围和坐标系,而是使用 Python 脚本完成这些相同任务的替代选项。
python脚本将使用“with”命令并首先运行坐标系,然后它将能够执行“裁剪”工具。这一次,我在 Python 窗口中运行了脚本。
下面是 Python 脚本,生成的图层位于上面的地图中,内容窗格位于左侧,目录窗格位于柏林地理数据库中
以下是我的脚本,用于设置投影坐标系并裁剪柏林的栅格:
# Clip raster with correct coordinate systemwith arcpy.EnvManager(outputCoordinateSystem='PROJCS["WGS_1984_UTM_Zone_33N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",15.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]', extent='320748.742880528 5775837.65853288 474065.083709664 5867894.41339754 PROJCS["WGS_1984_UTM_Zone_33N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",15.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]'):
三、计算土地覆被变化
编辑并准备好每个城市的所有土地覆被栅格图层后,我现在可以分析 1992 年至 2019 年间土地覆被的变化。ArcGIS Pro 中可通过多种方式分析两个不同年份的栅格变化。
3–0.备用工具
使用的一个常见选项是“更改检测向导”,这是一个简单直观的工具,允许用户在运行向导时预览结果。该向导是一个引导式工作流,包含三个步骤(用于分类更改):配置、类配置和输出生成。
还有“计算变化栅格”地理处理工具,该工具可以完成完全相同的操作。
3–1.执行 Python 脚本
我没有使用任何 GUI(图形用户界面)工具,而是从以下 Python 脚本运行了分析:
# Check Image Analyst extension licensearcpy.CheckOutExtension("ImageAnalyst")# Compute land cover change from 1992 to 2019out_raster_dataset = arcpy.ia.ComputeChangeRaster("Berlin_1992", "Berlin_2019", "CATEGORICAL_DIFFERENCE", "'Rainfed Cropland';'Herbaceous Cropland';'Tree or Shrub Cropland';'Mostly Cropland in a Mosaic with Natural Vegetation';'Mostly Natural Vegetation in a Mosaic with Cropland';'Closed to Open Canopy Broadleaved Deciduous Tree Cover';'Closed to Open Canopy Needleleaved Evergreen Tree Cover';'Closed to Open Canopy Needleleaved Deciduous Tree Cover';'Mixed Tree Cover';'Mostly Trees and Shrubs in a Mosaic with Herbaceous Cover';'Mostly Herbaceous Cover in a Mosaic with Trees and Shrubs';Grassland;'Sparse Vegetation';'Flooded Shrub or Herbaceous Cover';'Urban Areas';'Consolidated Bare Areas';'Bodies of Water'", "'Urban Areas'", "CHANGED_PIXELS_ONLY", "AVERAGE", "ClassName", "ClassName")
不需要检查影像分析扩展模块,但需要具有扩展模块许可才能运行 ArcPy 工具。对于此柏林示例,输出栅格在相应地理数据库中另存为“Berlin_Change.gdb”。
以下是柏林的输出栅格:
柏林从1992年到2019年转移到市区的所有细胞
通过单击其中一个单元格,我可以看到单个单元格发生的转换,该单元格的大小为 300 平方米。例如,选择一个粉红色单元格将告诉我该区域从 1992 年的雨养农田到 2019 年的市区。所有土地覆被变换都列在地图旁边的内容窗格中。
四、使用条形图分析土地覆被变化结果
创建结果的条形图是更好地可视化土地覆被结果变化的另一种有用方法。借助 ArcGIS Pro 中的“创建图表”工具,我可以快速创建多种类型的图表来可视化我的分析。
4–0.清理属性数据
在创建图表之前,我需要组织和清理数据。打开栅格上的属性表并按“面积”降序排序后,我可以看到有一行名为“其他”,另一行名为“无变化”,其中包含年份之间未发生任何变化的所有像素。我不需要图表的这些数据,所以我会删除它们。
4–1.创建条形图
使用“创建图表”工具,我将创建一个新的条形图。我希望 x 轴上的 1992 年土地覆被类和 y 轴上更改的总面积。
设置图表变量
4–2.编辑图表属性
编辑图表系列和格式后,以下是最终条形图,其中显示了 1992 年以来在 2019 年更改为城市土地覆被的土地类型和数量:
改变为城市的土地覆盖量最大的是草本耕地
五、比较所有城市
每个城市最终都取得了不同的结果,但总体主题是相同的——从 1992 年到 2019 年,所有五个城市都经历了显着的城市增长。这种城市增长的大部分是以耕地、森林地区和灌木丛为代价的。
5–0. Phoenix Results
5–1. Addis Ababa Results
5–2. Buenos Aires Results
5–3. Singapore Results
5–4. Berlin Results
结论
使用 ArcGIS Pro 和 Python 中的工具,城市和地区能够分析多年来土地覆被的变化。正如我们在这里看到的,没有两个城市会有相同的结果。为了进一步分析,我们可以逐年比较,以确定哪些年份经历了最大的变化,以及为什么。这些分析可以帮助城市规划未来,以实现可持续和更高效的增长,消除发展中的任何猜测,并优先考虑自然景观的保护。
- END -
CC、Pix4D、大疆智图、M3D...国内外常用实景三维建模软件电脑配置推荐
谷歌影像、天地图、DEM、土地覆盖数据...这个软件竟然都能下载