为什么要学Kotlin
我想开发一款安卓APP,所以就想去学学这个语言,主要是不打游戏了,下班之后也闲得慌,闲着也是闲着,所以就去学Kotlin,内卷从我做起。
文章很多内容机翻于w3schools, 有需要的同学可以去它家网站学习:https://www.w3schools.com/KOTLIN/kotlin_intro.php
写这样的文章也是在督促自己保持学习。
简介什么是kotlin?
Kotlin 是一种现代的、流行的编程语言,由 JetBrains 于 2016 年发布。
它变得非常流行,因为它与Java(目前最流行的编程语言之一)兼容,这意味着 Java 代码(和库)可以在 Kotlin 程序中使用。
为什么使用Kotlin?
Kotlin 与 Java 完全兼容
Kotlin 适用于不同的平台(Windows、Mac、Linux、Raspberry Pi 等)
Kotlin 简洁安全
Kotlin 易于学习,特别是如果您已经了解 Java
Kotlin 是免费使用的
大社区/支持
Kotlin入门集成开发环境使用 IntelliJ,可以从https://www. ...
引言很久没用过matlab,不记得了获取矩阵的大小的函数、不记得矩阵的下标索引操作,一些语法都忘记一干二净。但是要记住解决问题的大概思路,换个语言实现也是可以的,过程中遇到问题就去搜索。
回到这个这篇文章的主题,6个波段的landsat数据怎么在Matlab里叠加成12个波段,是一个网友向我咨询,我给出了大概的思路。
试验由于没有landsat 8影像,这里暂用一张单波段的影像作为示例。
具体代码如下:
clc,clear;
filepath1 = 'D:\hh1.tif'
img_1 = imread(filepath1);
img_2 = img_1; % 没有第二张影像,使用第一张影像的复制
[row, col, bands] = size(img_1); % 获取数组维度信息
new_bands = bands*2; % 新的影像的波段是原来的两倍
img_3 = zeros([row, col, new_bands]); % 创建新的数组
img_3(:,:,1:bands) = img_1; % 前一半放第一张影像
img_3(:,:,bands+1:end) = ...
介绍我们将使用 Python 将 netCDF 文件转换为 GeoTIFF。GeoTIFF 基于 TIFF 格式,用作地理参考光栅图像的交换格式。
第三方库netCDF4
gdal
numpy
geopandas
读取 netCDF 文件我们将使用 netCDF.Dataset() 属性来读取 netCDF 文件:
#从osgeo导入必要的库import gdal
import numpy as np
from netCDF4 import Dataset
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
#读取netCDF文件
data = Dataset( r'\path\to\file.nc' )
print(data)
简单可视化#Creating a vairable 'sic' to store the 2-D array variable 'z'
sic = data.variables[ 'z' ][:]
#翻转
asi_sic ...
配置GDAL首先打开Visual Studio 2019,新建控制台工程,名字叫做“简单调用GDAL”。
右击工程,找到“属性”
把GDAL的include文件夹填写到“附加包含目录”中,如下图。
把GDAL的lib文件夹填写到“附加库目录”中,如下图。
简单调用GDALGDAL封装了很多类、函数接口,我们要去学习怎么调用它们。
# include "gdal_priv.h"
using namespace std;
#include <iostream>
int main()
{
printf("strat!\n");
//注册文件格式
GDALAllRegister();
const char* file = "D:\\hh1.tif";
GDALDataset *ds = (GDALDataset*) GDALOpen (file, GA_ReadOnly);
//A* p则使用:p->play(); 左边是结构指针。
//A p 则使用:p.paly(); 左边是结构变量。
int Xsize = ds->GetRast ...
介绍Sentinel-5P任务旨在在 2017 年至至少 2023 年之间提供有关空气质量和气候的信息和服务。通过机载 TROPOMI 传感器,它每天对主要大气成分进行全球观测,包括臭氧、二氧化氮、二氧化硫、一氧化碳、甲烷、甲醛以及云和气溶胶特性。该任务旨在确保 Envisat 卫星退役和 NASA 的 Aura 任务与 Sentinel-5 发射之间的数据连续性
数据上一篇是介绍怎么使用程序下载sentinel5p数据,这篇是讲怎么对其进行可视化。因为下载的是L2级数据了,无需再进行预处理。
数据范围是覆盖大陆陆地区域,这里仅作为展示使用。时间是2021年6月(这个代码就是那时候写的)
第三方库from scipy.interpolate import griddata #插值
from netCDF4 import Dataset #读取nc文件
import numpy as np
from matplotlib.colors import LogNorm #画图
import matplotlib.pyplot as plt #画图 ...
介绍Sentinel-5P任务旨在在 2017 年至至少 2023 年之间提供有关空气质量和气候的信息和服务。通过机载 TROPOMI 传感器,它每天对主要大气成分进行全球观测,包括臭氧、二氧化氮、二氧化硫、一氧化碳、甲烷、甲醛以及云和气溶胶特性。该任务旨在确保 Envisat 卫星退役和 NASA 的 Aura 任务与 Sentinel-5 发射之间的数据连续性
数据上一篇是介绍怎么使用程序下载sentinel5p数据,这篇是讲怎么对其进行可视化。因为下载的是L2级数据了,无需再进行预处理。
数据范围是覆盖大陆陆地区域,这里仅作为展示使用。时间是2021年6月(这个代码就是那时候写的)
第三方库from scipy.interpolate import griddata #插值
from netCDF4 import Dataset #读取nc文件
import numpy as np
from matplotlib.colors import LogNorm #画图
import matplotlib.pyplot as plt #画图 ...
Sentinel-5P下载代码测试
介绍Sentinel-5P任务旨在在 2017 年至至少 2023 年之间提供有关空气质量和气候的信息和服务。通过机载 TROPOMI 传感器,它每天对主要大气成分进行全球观测,包括臭氧、二氧化氮、二氧化硫、一氧化碳、甲烷、甲醛以及云和气溶胶特性。该任务旨在确保 Envisat 卫星退役和 NASA 的 Aura 任务与 Sentinel-5 发射之间的数据连续性
手动查询下载地址:
https://s5phub.copernicus.eu/dhus/#/home
官方提供一个账号下载S5P数据
account = 's5pguest'
password = 's5pguest'
借此,我们尝试进行自动化下载。
流程如下:
1.填写数据覆盖的范围
2.填写开始结束日期
3.查询每景影像对应的uuid
4.下载到指定的输出路径
Demo自动下载DEMO如下:
#! usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
import json
from requests import S ...
RPC(rational polynomial coefficients),有理多项式系数。RPC是传感器严格几何模型的拟合形式。是根据卫星平台载荷测量的平台运行轨迹参数、姿态参数、传感器安装参数及传感器内部几何参数构建的像-地关系几何模型,一共有90个参数。
相关理论不再展示,感兴趣去网上搜,现在是基于高分三号进行RPC校正,代码如下:
from osgeo import gdal
import re
import os
#这是一个读取RPC文件的函数
def read_rpb (rpbfile):
with open(rpbfile, 'r') as f:
buff = f.read()
# 关键字1,2(修改引号间的内容)
# 命名参考的网址:http://geotiff.maptools.org/rpc_prop.html
ERR_BIAS1 = 'errBias = ' # 错误-偏差。图像中所有点的RMS偏差误差(单位:米/水平轴)(-1.0,如果未知)
ERR_BIAS2 ...
相关理论不再展示,感兴趣去网上搜,现在是基于图片图片进行匀色,代码如下:
# -*- coding: utf-8 -*-
# @Time : 2022/01/05 10:18
import numpy as np
from matplotlib import pyplot as plt
import cv2
import matplotlib
import time
# 进行直方图匹配的函数
def arrayToHist(grayArray,nums):
if(len(grayArray.shape) != 2):
print("length error")
return None
w,h = grayArray.shape
hist = {}
for k in range(nums):
hist[k] = 0
for i in range(w):
for j in range(h):
if(hist.get(grayArray[i][j]) is ...
为了能够使用numpy,我们需要使用import numpy导入库。此外,指定np代表numpy:
import numpy as np
现在,我们可以通过输入np.name_of_function来访问numpy中所有可用的函数。例如
max = np.max(img) # 包含无效值
max2 = np.nanmax(img) # 排除无效值
上面这两个函数是有区别的,在遥感中要注意到二者的区别,这一点会再专门的写一篇文章介绍。
在numpy中定义的大多数函数和操作都可以应用于数组。
尝试向其中一个数组添加另一个数字,看看会发生什么。通常,数组需要具有相同的尺寸….
例如:
arr1 = np.array([1,2,3,4])
arr2 = np.array([3,4,5,6])
arr3 = np.add(arr1, arr2)
print(arr3)
数组可以被分割。我们可以使用索引符号[starte: end:stride]来获得数组的子集。让我们来看看这意味着什么:
arr = np.array([0,1,2,3,4,5,6,7,8,9,10])
print( ...