当前位置: 首页 > news >正文

中国互联网电视app下载安装/电商seo优化

中国互联网电视app下载安装,电商seo优化,vue做网站如何优化seo,邵阳市建设局网站首页IDL学习笔记(四) MODIS Grid数据的重投影 正弦投影 是以 米 为单位的 经纬度网格 是以 度 为单位的 但是转换之后,不会一一对应,所以需要对中间空缺位置需要进行一个填补。 核心问题: 把一个点从一个空间参考系放到另一个空间参…

IDL学习笔记(四)

  • MODIS Grid数据的重投影

正弦投影 是以 米 为单位的
经纬度网格 是以 度 为单位的
在这里插入图片描述
但是转换之后,不会一一对应,所以需要对中间空缺位置需要进行一个填补。

核心问题:

把一个点从一个空间参考系放到另一个空间参考系

对应的编程关键:

1.数组A的元素应该放到数组B的哪个位置?

2.数组B的行列数量?

3.数组B的空值如何填补?

MODIS Grid数据的重投影

1.对应的专业问题:

数组A的元素应该放到数组B的哪个位置投影

2.坐标与经纬度坐标的转换:

数组B的行列数量:经纬度格网的范围

3.数组B的空值如何填补:

移动窗口均值计算
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先,确定,经纬度最值。(数组行列数:原图像包含的经纬度范围最值 ; 重投影结果分辨率设置)

重投影结果分辨率设置,不能比原来更细,因为这样的话,空缺会更多,将带来更大误差。

每个像元坐标从哪里来?
在这里插入图片描述
知道第一列坐标,那么第二列坐标 就是 第一列坐标 + 像元分辨率。所以其余坐标就可以利用像元分辨率进行 加减乘除 运算 得知。

像元分辨率没有提到,需要自己计算。利用左上角、右下角坐标,以及行数、列数,进行计算得到。
在这里插入图片描述
再找到,我们需要的“一行”信息,再定位到()取出里面的坐标信息。为什么不用strmid?因为()内的信息可能是不固定的,长度不唯一。

根据前面的关键字,通过strpos定位到起始位置和结束位置,获取总共子串长度,然后就可以用strsplit分割函数获取所需数值。

strsplit(ul_info, '=(,)', /extract)

1.'=(,)'只要遇到引号里的任何一个内容就把他分开
2./extract 如果需要提取内容,则输出的是分割的下标。所以需要提取信息的话,需要添加关键字。这时候,提取结果是一个 字符型 数组,里面包含坐标信息。

在这里插入图片描述

    sd_id = hdf_sd_start(file_list[file_i],/read)gindex = hdf_sd_attrfind(sd_id,'StructMetadata.0')hdf_sd_attrinfo, sd_id, gindex, data=metadata;左上角坐标获取ul_start_pos = strpos(metadata,'UpperLeftPointMtrs')ul_end_pos = strpos(metadata,'LowerRightMtrs')ul_info = strmid(metadata,ul_start_pos, ul_end_pos-ul_start_pos)ul_info_spl = strsplit(ul_info,'=(,)',/extract) ; 加 /extract 才返回的是内容,而不是切割点的索引ul_prj_x = double(ul_info_spl[1])ul_prj_y = double(ul_info_spl[2]);右下角坐标获取lr_start_pos = strpos(metadata,'LowerRightMtrs')lr_end_pos = strpos(metadata,'Projection')lr_info = strmid(metadata,lr_start_pos,le_end_pos - le_start_pos)lr_split = strsplit(lr_info,'=(,)',/extract) ;这里一开始忘添加关键字了,导致后面查报错查了很久lr_prj_x = double(lr_split[1])lr_prj_y = double(lr_split[2])

在这里插入图片描述

	;map_proj_inverse 用于将 投影坐标 转为 经纬度坐标sin_prj = map_proj_init('sinusoidal', /gctp, sphere_radius = 6371007.181,center_longitude=0.0,false_easting=0.0,false_northing=0.0);投影坐标参数,从数据里得知,geo_loc = map_proj_inverse(proj_x, proj_y, map_strcture = sin_prj); 进行坐标转换,需要知道原来的投影的坐标

在这里插入图片描述

在这里插入图片描述

 	lon_min = min(geo_x)lon_max = max(geo_x)lat_min = min(geo_y)lat_max = max(geo_y)geo_resolution = 0.01 ;1公里的空间分辨率,对应的大概是0.01度data_box_geo_col = ceil((lon_max - lon_min)/geo_resolution) ; ceil 防止无法整除带来的误差,小数部分需要向上取整,保证数据全部存放,没有丢失部分data_box_geo_line = ceil((lat_max - lat_min)/geo_resolution)data_box_geo = fltarr(data_box_geo_col, data_box_geo_line) ; 初始化data_box_geo[*,*] = -9999.0data_box_geo_col_pos = floor((geo_x - lon_min)/geo_resolution) ; 归到哪一列,需要向下取整,因为data_box_geo_line_pos = floor((geo_y - lat_min)/geo_resolution)

对应位置存放:

data_box_geo[data_box_geo_col_pos, data_box_geo_line_pos] = data ; 对应行列号上应放置的像素是哪一个

原理参考如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
填充条件:
1.同时遇到_FillValue(这里是0)和-9999(初始值),要忽略,不参与运算。
2.有N个以上有效值(例如3)的时候才进行填充,否则就是不填充.不填充结果也设置为0
3.不需要填充的数组,保持不动

对空缺值进行填充(平滑):

data_box_geo_out = fltarr(data_box_geo_col, data_box_geo_line)for data_box_geo_col_i=1,data_box_geo_col-2 do beginfor data_box_geo_line_i=1,data_box_geo_line-2 do beginif data_box_geo[data_box_geo_col_i,data_box_geo_line_i] eq -9999.0 then begintemp_window=data_box_geo[data_box_geo_col_i-1:data_box_geo_col_i+1,data_box_geo_line_i-1:data_box_geo_line_i+1]temp_window=(temp_window gt 0.0)*temp_windowtemp_window_sum=total(temp_window)temp_window_num=total(temp_window gt 0.0)if (temp_window_num gt 3) then begindata_box_geo_out[data_box_geo_col_i,data_box_geo_line_i]=temp_window_sum/temp_window_numendifendif else begindata_box_geo_out[data_box_geo_col_i,data_box_geo_line_i]=data_box_geo[data_box_geo_col_i,data_box_geo_line_i]endelseendforendfor

对geo结构体进行定义
在这里插入图片描述

    geo_info = {$MODELPIXELSCALETAG:[geo_resolution,geo_resolution,0.0],$;x、y、z方向的像元分辨率MODELTIEPOINTTAG:[0.0,0.0,0.0,lon_min,lat_max,0.0],$;坐标转换信息,前三个0.0代表栅格图像上的第0,0,0个像元位置(z方向一般不存在),后面-180.0代表x方向第0个位置对应的经度是-180.0度,90.0代表y方向第0个位置对应的纬度是90.0度GTMODELTYPEGEOKEY:2,$GTRASTERTYPEGEOKEY:1,$GEOGRAPHICTYPEGEOKEY:4326,$GEOGCITATIONGEOKEY:'GCS_WGS_1984',$GEOGANGULARUNITSGEOKEY:9102,$GEOGSEMIMAJORAXISGEOKEY:6378137.0,$GEOGINVFLATTENINGGEOKEY:298.25722}

输出一个文件后,打印输出的提示信息,可以都设置为以下格式:

     print,'Reprojection time consuming of file '+file_basename(file_list[file_i])+':'+strcompress(string(end_time-start_time))+' s.'

完整代码:

pro modis_sinusoidal_to_geographicinput_directory = 'E:\Data\IDL\chapter_3\modis_grid\'output_directory = 'E:\Data\IDL\chapter_3\modis_grid\geo_out\'directory_exist = file_test(output_directory,/directory)if directory_exist eq 0 then beginfile_mkdir,output_directoryendiffile_list = file_search(input_directory,'*.hdf')file_n = n_elements(file_list);print, file_nfor file_i = 0, file_n - 1 do begin ;file_n - 1 而不是file_nstart_time = systime(1)result_name = output_directory + file_basename(file_list[file_i],'.hdf') + '_geo.tiff'sd_id = hdf_sd_start(file_list[file_i],/read)gindex = hdf_sd_attrfind(sd_id,'StructMetadata.0')hdf_sd_attrinfo, sd_id, gindex, data=metadata;左上角坐标获取ul_start_pos = strpos(metadata,'UpperLeftPointMtrs')ul_end_pos = strpos(metadata,'LowerRightMtrs')ul_info = strmid(metadata,ul_start_pos, ul_end_pos-ul_start_pos)ul_info_spl = strsplit(ul_info,'=(,)',/extract) ; 加 /extract 才返回的是内容,而不是切割点的索引ul_prj_x = double(ul_info_spl[1])ul_prj_y = double(ul_info_spl[2]);右下角坐标获取lr_start_pos = strpos(metadata,'LowerRightMtrs')lr_end_pos = strpos(metadata,'Projection')lr_info = strmid(metadata,lr_start_pos,lr_end_pos - lr_start_pos)lr_info_spl=strsplit(lr_info,'=(,)',/extract)lr_prj_x = double(lr_split[1])lr_prj_y = double(lr_split[2])sds_index = hdf_sd_nametoindex(sd_id,'LST_Day_1km')sds_id = hdf_sd_select(sd_id,sds_index)hdf_sd_getdata, sds_id, dataindex = hdf_sd_attrfind(sds_id, 'scale_factor') ; 为什么这次没有计算——fillvalue? hdf_sd_attrinfo,sds_id, index, COUNT=cali_num,DATA=cali_scaledata = data * cali_scale[0]hdf_sd_endaccess,sds_idhdf_sd_end,sd_iddata_size = size(data)sin_resolution = (lr_prj_x - ul_prj_x)/(data_size[1]) ; 计算原始正弦投影的 像元分辨率 proj_x = fltarr(data_size[1], data_size[2]) ; 初始化数组,存放坐标proj_y = fltarr(data_size[1], data_size[2])for col_i = 0, data_size[1] -1 do beginproj_x[col_i,*] = ul_prj_x + (sin_resolution * col_i) ; 利用 左上坐标、像元分辨率,计算每个点坐标endforfor line_i = 0, data_size[2] - 1 do beginproj_y[*, line_i] = ul_prj_y - (sin_resolution * line_i)endfor;map_proj_inverse 用于将 投影坐标 转为 经纬度坐标sin_prj = map_proj_init('sinusoidal', /gctp, sphere_radius = 6371007.181,center_longitude=0.0,false_easting=0.0,false_northing=0.0);投影坐标参数,从数据里得知,geo_loc = map_proj_inverse(proj_x, proj_y, map_structure = sin_prj); 进行坐标转换,需要知道原来的投影的坐标;geo是2列1440000行的数组,第一列是精度,第二列是纬度geo_x = geo_loc[0, *] ; x方向 对应应放入  data_box_geo_col_posgeo_y = geo_loc[1, *] ; y方向 对应应放入  data_box_geo_line_pos;到此为止,得知了原图上经纬度坐标。lon_min = min(geo_x)lon_max = max(geo_x)lat_min = min(geo_y)lat_max = max(geo_y)geo_resolution = 0.01 ;1公里的空间分辨率,对应的大概是0.01度data_box_geo_col = ceil((lon_max - lon_min)/geo_resolution) ; ceil 防止无法整除带来的误差,小数部分需要向上取整,保证数据全部存放,没有丢失部分data_box_geo_line = ceil((lat_max - lat_min)/geo_resolution)data_box_geo = fltarr(data_box_geo_col, data_box_geo_line) ; 初始化data_box_geo[*,*] = -9999.0 ; 为什么赋值-9999.0 ?是为了区分是原本数据缺失值 还是 本身就有的0值(_FillValue),判断是否要做填充data_box_geo_col_pos = floor((geo_x - lon_min)/geo_resolution) ; 归到哪一列,需要向下取整,因为data_box_geo_line_pos = floor((geo_y - lat_min)/geo_resolution)data_box_geo[data_box_geo_col_pos, data_box_geo_line_pos] = data ; 对应行列号上应放置的像素是哪一个;对空缺值做一个填补操作----平滑data_box_geo_out = fltarr(data_box_geo_col, data_box_geo_line)for data_box_geo_col_i=1,data_box_geo_col-2 do beginfor data_box_geo_line_i=1,data_box_geo_line-2 do beginif data_box_geo[data_box_geo_col_i,data_box_geo_line_i] eq -9999.0 then begintemp_window=data_box_geo[data_box_geo_col_i-1:data_box_geo_col_i+1,data_box_geo_line_i-1:data_box_geo_line_i+1]temp_window=(temp_window gt 0.0)*temp_windowtemp_window_sum=total(temp_window)temp_window_num=total(temp_window gt 0.0)if (temp_window_num gt 3) then begindata_box_geo_out[data_box_geo_col_i,data_box_geo_line_i]=temp_window_sum/temp_window_numendifendif else begindata_box_geo_out[data_box_geo_col_i,data_box_geo_line_i]=data_box_geo[data_box_geo_col_i,data_box_geo_line_i]endelseendforendforgeo_info = {$MODELPIXELSCALETAG:[geo_resolution,geo_resolution,0.0],$;x、y、z方向的像元分辨率MODELTIEPOINTTAG:[0.0,0.0,0.0,lon_min,lat_max,0.0],$;坐标转换信息,前三个0.0代表栅格图像上的第0,0,0个像元位置(z方向一般不存在),后面-180.0代表x方向第0个位置对应的经度是-180.0度,90.0代表y方向第0个位置对应的纬度是90.0度GTMODELTYPEGEOKEY:2,$GTRASTERTYPEGEOKEY:1,$GEOGRAPHICTYPEGEOKEY:4326,$GEOGCITATIONGEOKEY:'GCS_WGS_1984',$GEOGANGULARUNITSGEOKEY:9102,$GEOGSEMIMAJORAXISGEOKEY:6378137.0,$GEOGINVFLATTENINGGEOKEY:298.25722}write_tiff, result_name, data_box_geo_out,/float, geo_tiff = geo_info end_time = systime(1)print,'Reprojection time consuming of file '+file_basename(file_list[file_i])+':'+strcompress(string(end_time-start_time))+' s.'endfor 
end

相关文章:

IDL学习笔记(五)MODIS数据(Grid)

IDL学习笔记(四) MODIS Grid数据的重投影 正弦投影 是以 米 为单位的 经纬度网格 是以 度 为单位的 但是转换之后,不会一一对应,所以需要对中间空缺位置需要进行一个填补。 核心问题: 把一个点从一个空间参考系放到另一个空间参…...

JavaScript语言介绍

JavaScrip是一门编程语言 浏览器的工作原理 所以得域名都会被解析成ip地址,ip地址就是服务器地址,服务器地址会返回一个html文件,解析html遇到css文件和JavaScript标签就会把相应内容下载下来进行解析。 认识浏览器的内核 浏览器的渲染过程 …...

Lua使用点号和冒号的区别

首先建立一个table,再分别定义两个方法,如下: local meta {}function meta:test1(...)print(self)print("")for k,v in pairs({...}) doprint(v)end endfunction meta.test2(...)print(self)print("")for k,v in pairs…...

LLM - 开源视觉多模态 LLaVA-CoT(o1) 深度推理模型 测试与源码 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144304351 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaVA-…...

Ansible的yum和saltstack的哪个功能相似

Ansible的yum和saltstack的哪个功能相似 在 Ansible 和 SaltStack 中,Ansible 的 yum 模块 和 SaltStack 的 pkg 模块 功能相似。它们都用于管理软件包,支持安装、升级、删除和查询等操作。 Ansible 的 yum 模块 用途: 专门用于基于 Red Hat …...

paimon0.9记录

启动paimon -- 本地模式演示 bin/start-cluster.sh-- 启动sqlclient bin/sql-client.sh示例 -- 创建catalog,每次都要创建,创建一个已经存在的catalog相当于使用 CREATE CATALOG fs_catalog WITH (typepaimon,warehousefile:/data/soft/paimon/catalog…...

Java 中 List 接口的学习笔记

1. 什么是 List? 在 Java 中,List 是一个接口,属于 Java Collections Framework。它表示一个有序的集合,可以包含重复元素。List 接口允许通过索引访问元素,提供了多种实现方式,如 ArrayList 和 LinkedLis…...

【原生js案例】webApp实现鼠标移入移出相册放大缩小动画

图片相册这种动画效果也很常见,在我们的网站上。鼠标滑入放大图片,滑出就恢复原来的大小。现在我们使用运动定时器来实现这种滑动效果。 感兴趣的可以关注下我的系列课程【webApp之h5端实战】,里面有大量的css3动画效果制作原生知识分析&…...

LVGL9 定时器模块

文章目录 前言定时器系统概述特点 定时器的创建函数:lv_timer_create函数:lv_timer_create_basic 定时器的控制函数:lv_timer_ready函数:lv_timer_reset 定时器的参数设置函数:lv_timer_set_cb函数:lv_time…...

Qt学习笔记第51到60讲

第51讲 记事本实现打开功能 回到第24个功能文件Notepad,给UI中的各个控件添加槽函数。 ①开始按钮 void Widget::on_btnOpen_clicked() {QString fileNameQFileDialog::getOpenFileName(this,tr("Open File"),"E:\\6_Qt Projects\\24_Notepad\\fi…...

网页设计--axios作业

根据以下mock地址中的json数据,使用axios异步方式获取并显示在页面中。 https://apifoxmock.com/m1/3761592-3393136-default/peotfindAll?apifoxApiId171582689 {"code": 1,"msg": "success","data": [{"id": …...

SpringBoot 整合 Avro 与 Kafka 详解

SpringBoot 整合 Avro 与 Kafka 详解 在大数据处理和实时数据流场景中,Apache Kafka 和 Apache Avro 是两个非常重要的工具。Kafka 作为一个分布式流处理平台,能够高效地处理大量数据,而 Avro 则是一个用于序列化数据的紧凑、快速的二进制数…...

若依 ruoyi VUE el-select 直接获取 选择option 的 label和value

1、最新在研究若依这个项目,我使用的是前后端分离的方案,RuoYi-Vue-fast(后端) RuoYi-Vue-->ruoyi-ui(前端)。RuoYi-Vue-fast是单应用版本没有区分那么多的modules 自己开发起来很方便,这个项目运行起来很方便,但是需要自定义的…...

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

修改MySQL存储路径

1.查看原路径 show variables like ‘%datadir%’; 2.停止MYSQL 以管理员身份运行命令提示符 net stop MySQL84 在服务中直接停止MySQL 3.编辑配置文件 可能会遇到无权限修改,可以先修改my.ini的权限。可以通过:右键my.ini → 属性 → 安全→ 编辑 …...

Git常用的命令【提交与回退】

git分布式版本控制系统 (SVN集中式版本控制系统)之间的对比 git有本地仓库和远程仓库,不同的开发人员可以分别提交自己的本地仓库并维护代码的版本控制。 然后多个人员在本地仓库协作的代码,可以提交到远程仓库中做整合。 git本…...

详解:HTTP/HTTPS协议

HTTP协议 一.HTTP是什么 HTTP,全称超文本传输协议,是一种用于分布式、协作式、超媒体信息系统的应用层协议。HTTP往往是基于传输层TCP协议实现的,采用的一问一答的模式,即发一个请求,返回一个响应。 Q:什…...

0.96寸OLED---STM32

一、简介 OLED:有机发光二极管 OLED显示屏:性能优异的新型显示屏,具有功耗低(相比LCD不需要背光源,每一个节点当度发光)、响应速度快、宽视角(自发光,从任何视角看都比较清晰&…...

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…...

常用Vim操作

vimrc配置 ctags -R * 生成tags文件 set number set ts4 set sw4 set autoindent set cindent set tag~/tmp/log/help/tags 自动补全: ctrln:自动补全 输入: a:从当前文字后插入i:从当前文字前插入s: 删除当前字…...

【C#】NET 9中LINQ的新特性-CountBy

前言 在 .NET 中,使用 LINQ 对元素进行分组并计算它们的出现次数时,需要通过两个步步骤。首先,使用 GroupBy方法根据特定键对元素进行分类。然后,再计算每个组元素包含个数。而随着 .NET 9 版本发布,引入了一些新特性。其中 LINQ 引入了一种新的方法 CountBy,本文一起来了…...

Trimble X9三维激光扫描仪高效应对化工厂复杂管道扫描测绘挑战【沪敖3D】

化工安全关系到国计民生,近年来随着化工厂数字化改革不断推进,数字工厂逐步成为工厂安全管理的重要手段。而化工管道作为工厂设施的重要组成部分,由于其数量多、种类繁杂,一直是企业管理的重点和难点。 传统的化工管廊往往缺乏详…...

【数据结构】文件和外部排序

外部排序 外存信息的存取 计算基本存储方式 内部存储(主存):断电后数据会丢失,访问速度快,成本高容量通常较小外部存储(辅存):断电后数据不会丢失,访问速度较慢&#x…...

新手学习:网页前端、后端、服务器Tomcat和数据库的基本介绍

首先一点,不管是那个框架开发的网页前端,最后都需要Build,构建完毕以后都是原始的HTML CSS JS 三样文件! 网页前端 目录结构 在开始开发网站之前,首先需要了解如何组织文件。一个简单的网页项目通常会有以下几个文件夹和文件&…...

机器学习贝叶斯模型原理

一、引言 在机器学习与数据分析的广袤天地中,贝叶斯模型犹如一颗璀璨的明星,闪耀着独特的光芒,为众多领域的分类、预测等任务提供了强大的理论支撑与实用解法。然而,对于许多初涉此领域的小伙伴而言,贝叶斯模型背后的…...

【C++】实现100以内素数的求解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯代码概览💯代码结构与逻辑分析1. 包含的头文件和命名空间2. 素数判断函数 isPrime功能输入与输出核心逻辑数学背景 3. 主函数 main功能核心逻辑输出示例 &#…...

Python 浏览器自动化新利器:DrissionPage,让网页操作更简单!

Python 浏览器自动化新利器:DrissionPage,让网页操作更简单! 文章目录 Python 浏览器自动化新利器:DrissionPage,让网页操作更简单!🚀 引言🌟 DrissionPage简介🛠️ 三大…...

Rust学习笔记_13——枚举

Rust学习笔记_10——守卫 Rust学习笔记_11——函数 Rust学习笔记_12——闭包 枚举 文章目录 枚举1. 定义1.1 无值变体1.2 有值变体1.3 枚举与泛型的结合 2. 使用2.1 和匹配模式一起使用2.2 枚举作为类型别名 3. 常用枚举类型 在Rust编程语言中,枚举(enum…...

Postgresql 格式转换笔记整理

1、数据类型有哪些 1.1 数值类型 DECIMAL/NUMERIC 使用方法 DECIMAL是PostgreSQL中的一种数值数据类型,用于存储固定精度和小数位数的数值。DECIMAL的精度是由用户指定的,可以存储任何位数的数值,而小数位数则由用户自行定义。DECIMAL类型的…...

AI开发:卷积神经网络CNN原理初识,简易例程 - 机器学习

一 、卷积神经网络是什么 (1)印象 今天说的CNN,并不是我们熟知的美国有线电视新闻网。 那什么是CNN呢? Convolutional Neural Networks, CNN)简单来说,就是用一个筛子来筛面粉的。 筛子就是卷积核&…...