关于栅格数据中换算行列号和坐标系的说明

在进行栅格数据行列号和坐标系换算时需要注意以下两点:
1、栅格数据的行列号索引值一般以0开始;
2、坐标系方向与栅格行列索引方向是否相同。

一、将XY表示的坐标系值转换成对应栅格的行列号索引值:

// 栅格数据总行数
int rowCount = 100;
// 栅格数据总列数
int columnCount = 100;
// 栅格数据最小X坐标
double minX = 0;
// 栅格数据最小Y坐标
double minY = 0;
// 栅格数据最大X坐标
double maxX = 1000;
// 栅格数据最大Y坐标
double maxY = 1000;
// 需要换算的X坐标
double x = 400;
// 需要换算的Y坐标
double y = 400;
// 计算X轴方向每个栅格的坐标跨度(与栅格列相对应)
double dx = (maxX - minX) / (double)columnCount;
// 计算指定x坐标对应的栅格列索引值(坐标系X轴方向与栅格列索引方向相同)
int columnIndex = (int)((x - minX) / dx);
// 计算Y轴方向每个栅格的坐标跨度(与栅格行相对应)
double dy = (maxY - minY) / (double)rowCount;
// 计算指定y坐标对应的栅格行索引值(坐标系Y轴方向与栅格行索引方向相反)
int rowIndex = rowCount - (int)((y - minY) / dy) - 1;

二、将栅格的行列号索引值转换成以XY表示的坐标系值:

// 栅格数据总行数
int rowCount = 100;
// 栅格数据总列数
int columnCount = 100;
// 栅格数据最小X坐标
double minX = 0;
// 栅格数据最小Y坐标
double minY = 0;
// 栅格数据最大X坐标
double maxX = 1000;
// 栅格数据最大Y坐标
double maxY = 1000;
// 需要换算的栅格行索引值
int rowIndex = 40;
// 需要换算的栅格列索引值
int columnIndex = 40;
// 计算X轴方向每个栅格的坐标跨度(与栅格列相对应)
double dx = (maxX - minX) / (double)columnCount;
// 计算指定栅格列索引值对应的x坐标(坐标系X轴方向与栅格列索引方向相同,并取栅格的中心点作为栅格x坐标)
double x = (columnIndex + 0.5) * dx + minX;
// 计算Y轴方向每个栅格的坐标跨度(与栅格行相对应)
double dy = (maxY - minY) / (double)rowCount;
// 计算指定栅格行索引值对应的y坐标(坐标系Y轴方向与栅格行索引方向相反,并取栅格的中心点作为栅格y坐标)
double y = (rowCount - rowIndex - 0.5) * dy + minY;

发表评论