第1个回答 2023-01-18
[摘 要]栅格数据是地理信息系统数据源的重要形式,而地图投影转换作为地理数据处理的重要环节,在数据入库、数据发布等工作中不可或缺。本文以地图投影转换原理为依据,设计了一种地图投影动态分块转换系统,并辅以实验说明。最后提出了借助分布式思想进一步提高转换速度的思路。
[关键词]栅格数据投影转换动态分块分布式
[中图分类号]TP17[文献标识码]A[文章编号]1007-9416(2010)03-0097-02
引言
地球体的自然表面凹凸不平,形态复杂,不能直接将这样一个球体表面的数据映射到二维平面上,必须借助参考椭球与符合局部地理范围的基准面并按照一定的数学法则来完成。由于投影的目的与所要应用的地理范围不同,所采用的对地球体进行模拟表达的参考椭球与基准面也不尽相同,从而形成不同的空间参考系统。我们知道,完整的地理信息不仅应该包括数据体,而且应该包含数据所对应的空间参考信息。实际中,不同的地图比例尺往往采用不同的投影方式,如我国基本比例尺地形图中,大于等于1:50万的均采用高斯―克吕格投影(Gauss-Kruger),小于1:50万的地形图采用正轴等角割圆锥投影。
由于应用需求的经常变化,时常需要将同一种数据在不同的空间参考系统下进行表达以进行数据存储或显示,从而对地理信息数据投影转换提出了需求,而且动态投影显示对投影切换的速度要求更高。对于栅格数据而言,像素点的数据量极大,如果简单的进行一一坐标对应转换,无论是从转换的效率还是转换结果的连续性上分析,都是很难达到要求的,而简单的固定大小分块转换,则会造成数据相邻数据衔接的不连续性,不能较好的满足实际需求。所以对于栅格数据的投影转换,需要考虑更多的存储与显示相关的问题。
地图投影转换的本质是将A坐标参考系统下点坐标位置信息P(x,y)转换为B坐标参考系统下的P’(x,y)来表示。现在流行的商用软件如:arcgis,mapgis等都支持栅格数据的投影转换,但是存在一些列问题:灵活性差,无法根据机器物理配置动态调整转换速度;扩展性差,无法根据自定义的数据需求来进行新的转换,如google merc投影与经纬度表示的数据之间进行转换。
1 地图投影转换模型与数据结构分析
完成单幅地图投影转换分为以下步骤进行
1.1 根据空间参考生成转换器
转换器是能够独立完成一组坐标变换的算子,它是完成整个数据转换的可重用的模板。转换器由转换函数与参考系统等信息组成。以下是转换器的结构定义。其中poForwardTransform与poReverseTransform为封装了原始数据与结果数据空间参考坐标系统的正向转换与逆向转换,transinfoFunc是坐标转换函数,内含正向转换与逆向转换。
struct ProjectionTransformer
{ProjectionTransformerFunc transinfoFunc; //转换函数
Transformation *poForwardTransform; //正向转换
Transformation *poReverseTransform;
}//逆向转换
1.2 结果数据范围与仿射信息计算
创建空的结果数据集,首先需要获取结果数据集的范围与仿射系数信息。通过对原始数据边界进行高密度插值,可以计算出到结果数据的较为精确的范围,从而创建有效的结果数据集。
1.3 地图投影转换对象WarpOption的构建
typedef struct{double dfWarpMemoryLimit;
//内存限制
WarpResampleAlg eResampleAlg;
//抽样算法选择
WarpDataTypeeWorkingDataType;
//数据类型
WarpDatasetH
hSrcDS;
//原始数据集
WarpDatasetH
hDstDS;
//结果数据集
int
nBandCount;
//数据波段数
int
*panSrcBands;
//原始数据处理波段信息
int
*panDstBands;
//结果数据处理波段信息
WarpTransformerFunc pfnTransformer; //转换函数
void
*pTransformerArg;
//转换模板
} WarpOption;
1.4 动态分块
根据可用内存大小限制分块大小参数,设定分块Block大小。Block的大小决定了在内存中单次所能完成的数据读写量,从而影响数据集的读写次数,最终决定转换的速度。对于单个数据集,若可以在内存每次尽可能多的读取数据,进行转换,然后写入到新创建的结果数据集中,这样转换过程中读些的次数就得到减少,所需的整体时间就会缩短。通过windows系统函数获取到系统中的当前进程的可用内存,并规定内存的上下限,作为单块Block内存分配的依据。使用递归算法建立原始Block与结果Block的对应数组列表。
(Ⅰ)根据结果数据集当前范围计算所对应的原始数据集的数据范围。
(a)首先,通过对结果数据集范围所确定的四条边进行简单的离散点插值,可以得到一对像素位置值数组padfX[N]与padfY[N](其中N为各条边总的插值点数),即(padfX[i],padfY[i])表示某一像素i的像素位置。(b)N次循环,对(padfX[i],padfY[i])计算地理坐标值,作为(padfX[i],padfY[i])的新值。padfX[i] = adfTransform[0] +padfX[i]*adfTransform[1]+adfTransform[2]; padfY[i] = adfTransform[3] +padfY[i]*adfTransform[5]+adfTransform[4];其中,adfTransform为6元数组,表示当前结果数据集的仿射变换系数。(c)对(padfX[N],padfY[N])执行新值逆转换,从而求得结果数据集当前范围所对应的原始数据集中的地理位置范围。再利用结果数据集的仿射变换系数,求得原始数据当前范围的像素坐标位置。padfX[i]=(padfX[i] - adfTransform[0])/adfTransform[1];padfY[i]=(padfY[i]-adfTransform[3])/adfTransform[5];(d)通过循环比较,得到padfX [N],padfY[N]所确定的像素范围,即由padfX [N],padfY[N]的最大最小值组成。继续执行(Ⅱ)。
(Ⅱ)根据数据类型与数据范围计算原始数据集与结果数据集在当前范围下总的内存使用量。dfTotalMemoryUse=(((double) nSrcPixelCostInBits)*nSrcXSize * nSrcYSize+ ((double)nDstPixelCostInBits) *nDstXSize*nDstYSize)/8.0;其中,nSrcPixelCostInBits,nDstPixelCostInBits分别为原始数据集与结果数据集单个像素所占有数据字节数;nSrcXSize,nSrcYSize,nDstXSize,nDstYSize分别为原始数据集与结果数据集的所对应的像素宽度和高度。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 (Ⅲ)比较dfTotalMemoryUse与dfWarpMemoryLimit。如果dfTotalMemoryUse> dfWarpMemoryLimit,进入(Ⅳ),否则进入(Ⅴ)
(Ⅳ)比较nDstXSize与nDstYSize的大小。
如果nDstXSize>nDstYSize,对结果数据块进行横向分割,根据左右两块数据集范围分别执行(Ⅰ)否则,对结果数据集进行纵向分割,根据上下两块数据集的范围分别执行(Ⅰ)
(Ⅴ)将(nDstXOff,nDstYOff,nDstXSize,nDstYSize,nSrcXOff,nSrcYOff,nSrcXSize,nSrcYSize)计入panChunkList,panChunkList每八个连续元素表示一组映射。块数计数器加一。进入(Ⅵ)
(Ⅵ)当前计算结束,返回。
1.5 逐块转换
在已经计算得来的panChunkList,完成了对大块数据集的分解。循环转换panChunkList中的所有块,即完成了栅格数据集的地图投影转换。转换过程由三部分组成,数据读取,数据转换以及数据写入。根据panChunkList中的原始数据块的范围信息,从原始数据集中读取数据到预开的buffer中。
1.6 数据插值
由于不同的数据插值方法会造成数据不同精度以及显示效果。可以根据需求选择不同的数据插值方法,如临近点插值、双线性插值、三次样条曲线插值等。
1.7 写入基本元数据信息
在数据转换完成后,需要将基本的元数据信息写入到新生成的结果数据中。这包括统计信息、仿射系数、结果数据集所对应的空间参考信息等。
2 基于动态分块转换算法研究
根据数据的大小确定是否进行分块转换。在系统界面中设置内存域值,从而决定分块的大小。块越大,转换速度越快,这一步需要递归完成。对于每一块需要记录块的结果范围信息与对应的原始块的范围信息,为数据读写做准备。
3 试验分析
本试验基于proj4所提供的地理坐标转换接口,开发出栅格数据投影转换系统。系统开发平台为VS2003,运行环境为windowsXP/2003。支持普通地图投影系统之间的转换(投影坐标系之间转换,地理坐标系与投影坐标系之间的转换,通过简单扩展,已经支持google merc 投影与地理坐标系之间的转换)。
4 分布式计算解决大数据文件转换的思考
对于大数据文件,可以结合分布式计算思想,将文件规则裁切为m*n块,每一块在一台机器上完成。具体做法是建立好并行通信环境,将大数据文件在每台机器上存储一份,然后通过通信环境将转换分块范围分发给各台机器,由各自独立完成转换任务。转换完成后,将数据通过通信环境传回任务管理机,进行合并。分布式计算为解决大数据文件投影转换提供了一个有效的思路。
[参考文献]
[1] 孙连三,张欣英.GIS中地图投影扩展组件的设计和实现,2008.
[2] 韩丽君,安建成.地图投影及其在GIS中的应用.科技情报开发与经济,2009.
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文