0%

分带

  1. 东西6°分带
  2. 以东经或西经180°起,自西向东分带, 1号带中央经线为西经177°(-177)
    utm

中央经线

  1. 分带中心经线

伪东和伪北(false easting / false northing)

  1. 主要是通过偏移坐标系以避免赋值的出现

与Web墨卡托区别

  1. Web墨卡托延赤道方向的图上与实际的变化比例一致(正比),横向等距
  2. 横轴墨卡托在中央经线方向的图上与实际变化比例一致(正比),纵向等距
参数 描述
+a 椭球体长半轴长度
+alpha ? 用于斜墨卡托和其它几个可能的投影
+axis 轴方向 (new in 4.8.0)
+b 椭球体短半轴长度
+datum 基准面名(见proj -ld)
+ellps 椭球体名(见proj -le)
+k 比例因子(old name)
+k_0 比例因子(new name)
+lat_0 维度起点
+lat_1 标准平行纬线第一条
+lat_2 标准平行纬线第二条
+lat_ts 有效纬度范围Latitude of true scale
+lon_0 中央经线
+lonc ? 经度用于斜墨卡托和其它几个可能的投影
+lon_wrap Center longitude to use for wrapping (见下文)
+nadgrids NTv2网格文件的文件名,用于基准面转换(见下文)
+no_defs 不要使用/usr/share/proj/proj_def.dat缺省文件
+over 允许经度超出-180到180范围,禁止wrapping (见下文)
+pm 备用本初子午线(通常是一个城市的名字,见下文)
+proj 投影名(见proj -l)
+south 表示南半球UTM区域
+to_meter 乘数,转换地图单位为1.0m
+towgs84 3或7参数基准面转换(见下文)
+units meters(米), US survey feet(美国测量英尺),等.
+vto_meter 垂直变换为米.
+vunits 垂直单位.
+x_0 东伪偏移
+y_0 北伪偏移
+zone UTM区域

遥感影像的处理流程

1
2
3
4
5
6
7
8
9

start=>start: 开始
jihe=>operation: 几何校正
fushedingbiao=>operation: 辐射定标
fushejiaozheng=>operation: 辐射校正
end=>end: 结束

start->jihe->fushedingbiao->fushejiaozheng->end

基于GLT的几何校正

什么是GLT数据

Geolocation 或者 Geolocation Lookup Table 地理信息查找表。
一种基于地理信息查找表的校正方式,向风云系列卫星常采用此种方式,数据中一般存在名为Longitude和Latitude两个表示经纬信息的波段,大小与实际数据相等,或者等比例缩小。

应用范围

风云、MODIS、NOAA、NPP

校正方法

  1. 生成VRT文件
1
gdal_translate.exe-of VRT HDF5:"D:\FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS.HDF"://EV_1KM_RefSB FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS_sub5.vrt
  1. 配置元数据,在VRT文件中加入一下内容
1
2
3
4
5
6
7
8
9
10
11
<Metadata domain="GEOLOCATION">
<MDI key="LINE_OFFSET">1</MDI>
<MDI key="LINE_STEP">1</MDI>
<MDI key="PIXEL_OFFSET">1</MDI>
<MDI key="PIXEL_STEP">1</MDI>
<MDI key="SRS">GEOGCS["WGS84",DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9108"]],AUTHORITY["EPSG","4326"]]</MDI>
<MDI key="X_BAND">1</MDI>
<MDI key="X_DATASET">HDF5:"D:\Data\FY3_Data\FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS.HDF"://Longitude</MDI>
<MDI key="Y_BAND">1</MDI>
<MDI key="Y_DATASET">HDF5:"D:\Data\FY3_Data\FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS.HDF"://Latitude</MDI>
</Metadata>
  1. 执行校正
1
gdalwarp -geoloc D:\Data\FY3_Data\FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS_sub5.vrt D:\Data\FY3_Data\FY3A_MERSI_GBAL_L1_20100321_0150_1000M_MS_sub5_warp.tif

基于RPC的几何校正

什么是RPC数据

RPC(Rational Polynomial Coefficient)有理多项式系数
共线条件方程作为摄影测量与遥感的核心,也是传感器模型的理论基础。通过共线方程建立严格的几何成像模型需要获取传感器的各种成像参数,如航空影像的内外方位元素、卫星轨道参数、传感器平台的方位参数等。由于传感器模型建立的是地面点对应像点之间的严格的几何关系,具有较高的定位精度,所以一直是摄影测量学的首选。然而在卫星影像的传感器参数出于技术保密而不被提供的情况下,则需要用通用传感器模型。
openGIS组织提出了4种适合实时处理遥感影像的通用成像模型:

  • 多项式模型Polynomial Model
  • 格网内插模型Grid Interpolation Model
  • 有理函数模型 Rational Function model
  • 通用实时成像几何模型 Universal Real-time Image Geometry Mode

它们共同的特点是形式简单,计算速度快。
用RPC参数替代以共线条件为基础的严格几何模型,既可以为用户提供精确的地理信息,又不泄露卫星的相关参数,以成为国内外测绘卫星提供产品的主要形式和手段。

应用范围

高分

校正方法

gdalwarp -rpc

辐射定标

辐射校正

下面给出一个简单的 CMakeLists.txt :

1
2
3
4
5
6
cmake_minimum_required(VERSION 3.1)  # CMake 版本要求
PROJECT(hello) # 项目名称

aux_source_directory(. PROGRAM_SOURCE) # 将当前目录所有文件添加到变量 PROGRAM_SOURCE 中

add_executable(hello ${PROGRAM_SOURCE}) # 指定目标可执行文件 hello 的源代码文件为 PROGRAM_SOURCE

要编译的时候,可以建立单独的文件夹,让编译过程文件和源代码区分出来,以下是一种编译的方式, 当前目录为项目源代码目录:

1
2
3
4
$ mkdir build
$ cd build
$ cmake .. #在当前文件生成make等文件, 路径指示的是含有MakefileLists.txt的路径
$ make

这样操作之后,编译的目标会
位于 build 中,不会和源代码混在一起。

添加外部头文件查找目录

当我们用到外部的库的时候,我们便需要添加外部库的头文件所在目录作为头文件查找目录。在 CMakeLists 中添加以下代码即可:

1
2
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_SOURCE_DIR}../include)

CMake 中通过空格或者换行区分多个变量,上面的示例便是添加了两个目录到头文件查找路径中。

添加外部链接库

通过以下代码可以添加外部链接库查找目录, 其中CMAKE_CURRENT_SOURCE_DIR 是内置宏, 表示当前 CMakeLists.txt 所在目录:

1
2
3
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../../lib
${CMAKE_CURRENT_SOURCE_DIR}/../lib)

通过以下代码可以添加链接的外部库,这里链接 libmylib1 和 libmylib2, 这里链接的库可以是静态库也可以是动态库:

1
link_libraries(mylib1 mylib2)

如果是链接指定目录指定某个库,则可以用以下方式:

1
2
target_link_libraries(hello ../mylib1.a
hello ../mylib2.so)

对于同一个工程中构建的库,则可以用以下方式,无需指定具体的库的位置:

1
target_link_libraries(hello mylib1 mylib2)

自定义编译选项

编译选项的内置宏为 CMAKE_CXX_FLAGS ,只要将此宏设置为自定义的编译选项即可:

1
set(CMAKE_CXX_FLAGS “-std=c++11 -O2 -g”)

创建工程内的库

1
2
3
4
5
#创建库和创建可执行文件的 CMakeLists.txt 区别不大,只是将
add_executable
#替换为:
add_library(mylib STATIC ${SRC})
#STATIC表示创建静态库,目标文件为 libmylib.a,如果是 SHARED, 则为创建动态库.

CMake 模块

如果工程的很多 CMakeLists.txt 都有共同的部分,则可以通过 CMake 模块来构建更容易维护的 CMakeLists.txt 代码。

CMake模块为以 .cmake 为文件后缀的文件,其中的语法与 CMakeLists.txt 保持一致,可以直接 讲 CMakeLists.txt 中的公共内容抽取出来,放到 .cmake 文件中。然后通过以下方式包含进来, 比如说公共模块的文件名为 common.cmake :

1
2
3
4
#设置模块放置的目录,此处为上层目录的 cmake 文件夹中
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake")
#包含 common 模块,无需文件后缀名
include(common)

执行外部命令

当我们的代码在编译之前需要先执行一些外部命令,比如说使用 thrift 接口需要先执行 thrift 的代码生成器生成代码时,我们可以在 CMakeLists.txt 中添加以下代码, 当执行 cmake 命令 生成 Makefile 的时候,该命令就会被执行:

1
2
set(THRIFT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/mythrift.thrift)
exec_program("thrift --gen cpp -o ${CMAKE_CURRENT_SOURCE_DIR} ${THRIFT_FILE}")