Docker compose 踩坑 - network
Docker compose 踩坑 - network https://pfun.sunrui.ink/forum.php?mod=viewthread&tid=49 (出处: 编程客) 此前使用 docker-compose.yaml 的时候,都没有自己配置 network,最近在部署新的 docker-compose 的时候报了 network overlap 的问题,才知道我的 network 子网不够用了。 问题是这样的,当你的 docker-compose.yaml 未指定 network 的时候,它会自动为你创建一个文件夹名_default 的网络,网络 CIDR 是 172.x.0.0/16。 每次我创建一个未配置 network 的 docker-compose 的时候都会创建一个,于是我的宿主
贴吧:docker作者:sunruisunrui 2024-04-10 16:35
回复:【资源共享】MODIS云图渲染基础教程&伪VIS代码实现
c. HDF文件读取,MODIS波段简介
卫星云图数据存储的格式相当多样,其中不少格式需要较复杂的脚本才能读取(比如Himawari-8/9最广泛使用的DAT格式)。相对容易读取的数据存储方式包括HDF4,HDF5,NetCDF等。MODIS的L1B数据正是用HDF4格式存储的。HDF4有多种读取方式,这里我们选择使用第三方库pyhdf。HDF5和NetCDF我使用的分别是h5py和netCDF4,在此不作详细介绍。
pyhdf的介绍:https://fhs.github.io/pyhdf/modules/SD.html,下图列举了部分会用到的功能

from pyhdf.SD import SD, SDC
import numpy as np
首先导入pyhdf与numpy,此处pyhdf只导入了其中的一部分模块,numpy则是导入时命名为了np,后续反复调用的时候少打几个字母。
file = SD(r'E:\Data\MOD021KM.A2015296.0515.061.2017322234443.hdf', SDC.READ)
在只读模式(SDC.READ)下打开文件,文件路径请自行替换,这里是用了Patricia10.23 0515z的Terra,此处路径前的r是为了直接拷贝过来的绝对路径能够正常读取。
我们先使用datasets()看看文件中放了哪些数据,这一步相当于列出数据集的“目录”,还没有真正将数据取出来:
data = file.datasets()
print(data)
print(data.keys())
直接print(data)会返回每个数据集的名称与一些附带信息,加上keys()能仅返回数据集名称,以下是print(data.keys())的结果:
dict_keys(['Latitude', 'Longitude', 'EV_1KM_RefSB', 'EV_1KM_RefSB_Uncert_Indexes', 'EV_1KM_Emissive', 'EV_1KM_Emissive_Uncert_Indexes', 'EV_250_Aggr1km_RefSB', 'EV_250_Aggr1km_RefSB_Uncert_Indexes', 'EV_250_Aggr1km_RefSB_Samples_Used', 'EV_500_Aggr1km_RefSB', 'EV_500_Aggr1km_RefSB_Uncert_Indexes', 'EV_500_Aggr1km_RefSB_Samples_Used', 'Height', 'SensorZenith', 'SensorAzimuth', 'Range', 'SolarZenith', 'SolarAzimuth', 'gflags', 'EV_Band26', 'EV_Band26_Uncert_Indexes', 'Band_250M', 'Band_500M', 'Band_1KM_RefSB', 'Band_1KM_Emissive', 'Noise in Thermal Detectors', 'Change in relative responses of thermal detectors', 'DC Restore Change for Thermal Bands', 'DC Restore Change for Reflective 250m Bands', 'DC Restore Change for Reflective 500m Bands', 'DC Restore Change for Reflective 1km Bands'])
其中'Latitude','Longitude'是经纬度数据,'EV_1KM_RefSB'是反射波段数据,这里暂时用不到,'EV_1KM_Emissive'是热辐射波段数据,包含了我们所需要的各个红外波段。
使用select将'Latitude','Longitude','EV_1KM_Emissive'读取出来,并用get()读取数组,用np.shape()获取每个数组的形状(不过其实print(data)也会将数组形状作附带信息返回):
lon = file.select('Longitude').get()
lat = file.select('Latitude').get()
Emissive = file.select('EV_1KM_Emissive').get()
print(lon, lat, Emissive)
print(np.shape(lon), np.shape(lat), np.shape(Emissive))
可以看到热辐射波段数组的形状是(16, 2030, 1354),代表有16个不同波段堆叠在一起,每个波段的图像有2030×1354个像素,而数组的值都是0~65535的整数,显然不是我们最终需要的亮温,需经过辐射定标与亮温反演(见2.d);经纬度数组的值是正确的,但数组形状是(406, 271),像素比波段数据少,这是因为文件中存储的经纬度降过分辨率,需插值后才能使用(见2.e)。
'EV_1KM_Emissive'这个数据集并非只包含上面读取的数组,HDF文件可以为数据集附上attributes,其中往往包含辐射定标的关键信息,查看方式如下:
print(file.select('EV_1KM_Emissive').attributes())
print(file.select('EV_1KM_Emissive').attributes().keys())
以下是加上keys(),只获取attributes名称的结果:
dict_keys(['long_name', 'units', 'valid_range', '_FillValue', 'band_names', 'radiance_scales', 'radiance_offsets', 'radiance_units'])
其中'long_name'是数据集全称, 'band_names'是波段号,这两个attribute可以在看官方文献看晕掉的时候让你知道读的是什么数据;'radiance_scales','radiance_offsets'是辐射定标的两个系数(见2.d),'radiance_units'是辐射定标后得到的辐亮度的单位,有时候不同卫星数据会采用不同的辐亮度单位,反演的亮温如果偏差很大则需要检查该单位并调整黑体辐射公式的形式。
获取attributes中的数组同样是使用get()即可:
radiance_scales = file.select('EV_1KM_Emissive').attributes().get('radiance_scales')
radiance_offsets = file.select('EV_1KM_Emissive').attributes().get('radiance_offsets')
MODIS波段介绍:https://modis.gsfc.nasa.gov/about/specifications.php
先前查看热辐射波段attributes的时候16个波段号分别为20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36。细心的读者可能已经发现了,Band26不在其中。(不细心的作者因为这个在伪VIS教程篇里面把中波红外要用的Band20错写成Band21了,前两天刚勘误)Band26是短波红外反射波段,在2.d中读取指定波段数据的时候需要注意到这一点,不然可能会读错波段。
16个热辐射波段中,Band31用于渲染我们最熟知的IR云图,Band27则是标准水汽波段,Band28是响应层面偏低一些的水汽波段,反映中低层大气的暖心和水汽吸收情况。伪VIS所用到的波段则是Band31,Band32与Band20,波段选择的具体原因可以参考《伪VIS算法原理与教程 - 理论篇》。值得一提的是,Band20与Band21,22的波长非常相近,选择Band20的主要原因是Band20接收的波长宽一些,更容易接收到较冷云顶上微弱的辐射,云顶噪点相对而言少一些。
贴吧:台风作者:我不是Carl2 2024-04-16 12:24
仿钉钉审批流程后端 PHP 处理(一)
前端数据结构参照:https://github.com/StavinLi/Workflow 数据表结构: 数据处理: /** * 处理流程配置 * @param $type * @param $data * @return mixed */ public function checkProcessConfig($data, $type = 'processConfig') { if (!isset($data[$type]) || !$data[$type]) return []; return $this->getSerializeData($data[$type]); } /** * 初始化流程配置数据 * @param $data * @param int $level * @param string $onlyValue * @param int $is_initial * @return array */ public function getSerializeData($data, $level = 0, $onlyValue = '', $is_initial = 1, $group = 0)
贴吧:crmeb作者:CRMEB众邦科技 2022-08-04 09:54
我就说TX的游戏不可能没挂╮(╯_╰)╭有视频有真相
美服插件免费功能的说明: 进入游戏里按F8 1.Myrange 我的普攻范围 2.ExpRange经验范围 3.PlayersRange敌对英雄普攻范围 4.turretrange 炮塔攻击范围
贴吧:dota作者:心碎DE梦境 2013-02-01 15:43
2022年网络安全岗位各大厂面试课题汇总,含答案(也可以私信我)
(1) 深信服-漏洞研究员实习 (2) 字节跳动-安全研究实习生 (3) 长亭科技-安全服务工程师 (4) 天融信面试复盘 (5) 腾讯-安全技术实习生 (6) 小鹏汽车-安全工程师 (7) 阿里巴巴-阿里云安全 (8) 字节跳动-无恒实验室 (9) 58同城-安全工程师 (10) 腾讯-玄武实验室 (11) 360-安全工程师 (12) 快手-安全实习生 (13) 华顺信安-安全服务工程师 (14) 奇安信面试复盘 (15) 京东-安全研发 (16) 安恒面试复盘 (17) 浙江东岸检测 (18) 360-安全工程师实习 (19) 某一线实验室实习 (20) 腾讯-科
贴吧:渗透测试作者:WX_08081005 2022-04-25 16:55
Docker极速搭建:PHP+Nginx+Msql+PHPmyadmin LNMP最新版
以前我用debian系统编译安装了一个lnmp环境《这是一个我弄的Docker lnmp镜像基于Debian构建》虽然很稳定,但是由于php版本不高,导致我有些程序运行不了; 所以呢,我昨天尝试在docker容器中使用debian和centos系统重新编译lnmp一键安装脚本来安装php高版本,可惜尝试多次均已失败告终,浪费大量时间就是无法编译高版本的php和mysql; 既然没搞定,而且花费这么多时间去编译安装,,我何不直接用docker镜像来组合lnmp呢?甚至都不需要编译,触手可及; 通过
贴吧:养生达人作者:一天到晚吵吵 2018-03-10 05:04
诚之和:PHP中什么是生成器(Generator)?怎么使用?
PHP中什么是生成器(Generator)?怎么使用?下面本篇文章带大家深入讲解一下PHP 中的生成器,希望对大家有所帮助! 谈到驾驶,速度并非一切。但在网络上,速度变得与众不同。你的应用程序越快,用户体验越好。这篇文章是关于 PHP 生成器的,那么我们为什么要讨论速度呢?你很快就会发现,生成器在速度和内存的管理上发挥着巨大的作用。 PHP生成器是什么? 生成器是在 PHP 5.5 版本中添加的,它提供了一种简单的方法来遍历数据,而不需要在内存
贴吧:php作者:leng88887 2021-10-13 14:52
诚之和:php怎么输出80以内所有被3整除的数
PHP中什么是生成器(Generator)?怎么使用?下面本篇文章带大家深入讲解一下PHP 中的生成器,希望对大家有所帮助! 谈到驾驶,速度并非一切。但在网络上,速度变得与众不同。你的应用程序越快,用户体验越好。这篇文章是关于 PHP 生成器的,那么我们为什么要讨论速度呢?你很快就会发现,生成器在速度和内存的管理上发挥着巨大的作用。 PHP生成器是什么? 生成器是在 PHP 5.5 版本中添加的,它提供了一种简单的方法来遍历数据,而不需要在内存
贴吧:php作者:leng88887 2021-10-13 14:50
phpwwwh519vip162287l9999生成器函数
优点:# 生成器会对 PHP 应用的性能有非常大的影响 PHP 代码运行时节省大量的内存 比较适合计算大量的数据 使用一个简单的例子说明(迭代输出从 1 开始到 10000 的数组,步进为 1): <?php$start_mem = memory_get_usage();$arr = range( 1, 10000 );foreach( $arr as $value ){ //echo $value.',';}$end_mem = memory_get_usage();echo " use mem : ". ( $end_mem - $start_mem ) .'bytes'.PHP_EOL; 输入结果: <?php$start_mem = memory_get_usage();function xrange($start, $limit, $step = 1) { for ($i = $start; $i <
贴吧:phh作者:灾情7743364 2021-09-25 12:26

大家都在搜

  • range rover
  • range rover什么意思
  • range()
  • range(1,10,3)
  • range(10)
  • for i in range
  • a wide range of
  • wide range
  • range from to
  • a range of什么意思
  • 什么range
  • range什么意思啊
  • out of range
  • orange是什么意思
  • range怎么读
  • orange怎么读
  • PHP开发
  • PHP源码
  • PHP框架
  • php和java
  • php网页编程
  • php数组
  • php语言入门
  • php7.4