基于夜间灯光遥感数据的中原城市群城镇空间格局研究

简介: 基于夜间灯光提取城市建成区的范围,从而进行区域城镇化空间格局分析。

基于夜间灯光遥感数据的城镇空间格局研究

基于夜间灯光提取城市建成区的范围,从而进行区域城镇化空间格局分析。

初始化环境

import aie
aie.Authenticate()
aie.Initialize()

读取行政区划数据

feature_collection = aie.FeatureCollection('user/35861bf257e14a8c807ef23cd92101c8')
geometry = feature_collection.geometry()
map = aie.Map(
    center=geometry.getCenter(),
    height=800,
    zoom=5
)

vis_params = {
    'color': '#00FF00'
}
map.addLayer(
    geometry,
    vis_params,
    'region',
    bounds=geometry.getBounds()
)
map

中原城市群

2020年中原城市群

#指定检索数据集,可设置检索的时间范围
dataset = aie.ImageCollection('NOAA_VIIRS_DNB_ANNUAL_V2_VCMSLCFG') \
             .filterDate("2020-01-01", "2020-12-31")
imgs = dataset.select(['average'])
imgs = imgs.mosaic()
imgs = imgs.clip(geometry)

# vis_params = {
#     'bands': 'average',
#     'min': 0.0,
#     'max': 60.0
# }
# map.addLayer(
#     imgs,
#     vis_params,
#     'Nighttime average',
#     bounds=imgs.getBounds()
# )
# map
DN_mean_2020 = imgs.reduceRegion(aie.Reducer.mean())
DN_mean_2020.getInfo()
DN_mean_2020 = DN_mean_2020.getInfo()['average_mean']
# 经过多次对比,将阈值设置为20,这个阈值大家可以设置的更加科学
city_2020 = imgs.gte(aie.Image.constant(20))
mask_params = {
    'bands': 'average',
    'min': 0,
    'max': 1,
    'paletee':['#000000','#ffffff']
}
map.addLayer(
    city_2020,
    mask_params,
    'city_2020',
    bounds=city_2020.getBounds()
)
map

2020年中原城市群

# task = aie.Export.image.toAsset(city_2020,'city_2020',1000)
# task.start()

2018年中原城市群

#指定检索数据集,可设置检索的时间范围
dataset = aie.ImageCollection('NOAA_VIIRS_DNB_ANNUAL_V2_VCMSLCFG') \
             .filterDate("2018-01-01", "2018-12-31")
imgs = dataset.select(['average'])
imgs = imgs.mosaic()
imgs = imgs.clip(geometry)
DN_mean_2018 = imgs.reduceRegion(aie.Reducer.mean())
DN_mean_2018.getInfo()
DN_mean_2018 = DN_mean_2018.getInfo()['average_mean']
city_2018 = imgs.gte(aie.Image.constant(20))
mask_params = {
    'bands': 'average',
    'min': 0,
    'max': 1,
    'paletee':['#000000','#ffffff']
}
map.addLayer(
    city_2018,
    mask_params,
    'city_2018',
    bounds=city_2018.getBounds()
)
map

2018年中原城市群

2016年中原城市群

#指定检索数据集,可设置检索的时间范围
dataset = aie.ImageCollection('NOAA_VIIRS_DNB_ANNUAL_V2_VCMSLCFG') \
             .filterDate("2016-01-01", "2016-12-31")
imgs = dataset.select(['average'])
imgs = imgs.mosaic()
imgs = imgs.clip(geometry)
DN_mean_2016 = imgs.reduceRegion(aie.Reducer.mean())
DN_mean_2016.getInfo()
DN_mean_2016 = DN_mean_2016.getInfo()['average_mean']
city_2016 = imgs.gte(aie.Image.constant(20))
mask_params = {
    'bands': 'average',
    'min': 0,
    'max': 1,
    'paletee':['#000000','#ffffff']
}
map.addLayer(
    city_2016,
    mask_params,
    'city_2016',
    bounds=city_2016.getBounds()
)
map

2016年中原城市群

2014年中原城市群

#指定检索数据集,可设置检索的时间范围
dataset = aie.ImageCollection('NOAA_VIIRS_DNB_ANNUAL_V2_VCMSLCFG') \
             .filterDate("2014-01-01", "2014-12-31")
imgs = dataset.select(['average'])
imgs = imgs.mosaic()
imgs = imgs.clip(geometry)
DN_mean_2014 = imgs.reduceRegion(aie.Reducer.mean())
DN_mean_2014.getInfo()
DN_mean_2014 = DN_mean_2014.getInfo()['average_mean']
city_2014 = imgs.gte(aie.Image.constant(20))
mask_params = {
    'bands': 'average',
    'min': 0,
    'max': 1,
    'paletee':['#000000','#ffffff']
}
map.addLayer(
    city_2014,
    mask_params,
    'city_2014',
    bounds=city_2014.getBounds()
)
map

2014年中原城市群

平均灯光亮度变化

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
x = np.array([2014,2016,2018,2020])
Y = np.array([DN_mean_2014,DN_mean_2016,DN_mean_2018,DN_mean_2020])
plt.figure(figsize=(10,8))
ax = plt.gca()
ax.plot(x,Y,'o-')
ax.set_yticks([0,0.5,1,1.5])
ax.set_xticks([2014,2016,2018,2020])
for a,b in zip(x,Y):
    plt.text(a,b+0.02,'%.4f'%b,ha='center',va='bottom',fontsize=9)

image.png

建成区面积变化

比如还可以做建成区面积的变化对比,这方面还不太支持,所以知识给大家一个思路,还比如 CNLI 的区域整体城镇化水平动态演化。还有就是阈值的确定还不够合理,大家应该有更加合理确定阈值的方法,本次案例主要引用了《城市与区域规划空间分析实验教程》(第3版)中的实验13。

相关文章
|
JSON API Android开发
Android bundetool 详解
Android bundetool 详解
374 0
|
存储 安全 算法
AVB源码学习(一):AVB2.0工作原理及编译配置
AVB源码学习(一):AVB2.0工作原理及编译配置
1805 0
|
11月前
|
数据安全/隐私保护
PHP-Casbin 中 ABAC 的使用方法
PHP-Casbin 是一个强大的、高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理。
168 0
|
11月前
|
分布式计算 DataWorks 大数据
🚀DataWorks 深度实践与评测:数据治理新时代的全景体验。
在数字化转型中,企业不仅需要技术创新,更需完善的**数据管理和开发治理工具**。DataWorks 作为阿里云推出的一站式智能大数据平台,整合了阿里巴巴15年的大数据经验,提供从数据接入、开发、治理到资产管理的全流程解决方案。它支持湖仓一体架构,内置AI助手提升开发效率,并适用于金融、零售等多行业。本文将深入探讨 DataWorks 的功能、应用场景及性能表现,通过用户画像分析实践展示其强大潜力...
594 8
🚀DataWorks 深度实践与评测:数据治理新时代的全景体验。
|
JavaScript
Vue3滚动条(Scrollbar)
这是一个基于 Vue 的自定义滚动条组件 Scrollbar.vue,提供了丰富的配置选项和方法。通过参数如 `contentClass`、`size` 和 `trigger` 等,可以灵活控制滚动条的样式和行为。
595 1
Vue3滚动条(Scrollbar)
|
网络虚拟化
无线基础知识:直接转发和隧道转发有何区别?
无线基础知识:直接转发和隧道转发有何区别?
1188 4
|
弹性计算 运维 Cloud Native
XGRIDS三维重建服务,构建云上数字孪生世界
基于阿里云建设三维重建云平台,搭建云端仿真资源池
XGRIDS三维重建服务,构建云上数字孪生世界
|
存储 算法 关系型数据库
TiDB的向量需求
TiDB的向量需求
|
算法 安全 Java
[转载]加密解密算法【RSA、AES、DES、MD5】介绍和使用
为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高。下面将介绍几种常用的加密算法使用。这些算法的加密对象都是基于二进制数据,如果要加密字符串就使用统一编码(如:utf8)进行编码后加密。
3129 0