栅格数据传输方法及系统 【技术领域】
本申请涉及计算机数据处理技术领域, 特别是涉及一种栅格数据传输方法及系统。 背景技术
基于栅格模型的数据结构简称为栅格数据结构, 是指将空间分割成有规则的网 格, 成为栅格数据块, 在各个栅格数据块上给出相应的属性值来表示地理实体的一种数据 组织形式。 栅格数据结构因为相对简单, 而且空间分析和地理现象的模拟比较容易, 有利于 遥感数据的匹配应用和分析, 输出方法快速, 且成本比较低廉, 因此被广泛应用于地理信息 系统中。 但是, 另一方面, 栅格数据结构的图形数据量大、 冗余度高, 在进行数据传输时需要 占用大量资源和传输时间。
例如, 当栅格数据是存储在服务器端时, 如果客户端程序需要实现某一个模型的 计算, 首先需要从远程网络数据服务器端上获取多个栅格数据作为模型计算的输入数据, 然后基于这些栅格数据进行模型运算, 最后得到一系列的栅格数据。 有的时候, 客户端程序 还需要将得到的一系列栅格数据返回给服务器端。 如前所述, 因为栅格数据的数据量大、 冗 余度高, 这就会使客户端获取全部远程网络数据服务器上栅格数据以及传回计算后的栅格 数据的速度变慢, 同时因为数据量大, 在传输过程中占用大量的网络带宽, 这就会影响数据 传输速度和效率, 从而影响模型运算速度和效率。 发明内容 本申请所要解决的技术问题是提供一种栅格数据传输方法及系统, 能够解决栅格 数据因为数据量大而占用大量的网络带宽, 影响数据传输速度和效率问题。
为了解决上述问题, 本申请公开了一种栅格数据传输方法, 包括以下步骤 :
接收客户端发送的获取栅格数据块的请求, 并基于所述请求查找栅格数据块 ;
遍历所述各栅格数据块的像素, 确定每一个栅格数据块的最大像素值和最小像素 值;
根据各栅格数据块的最大像素值和最小像素值为各栅格数据块确定放大系数 ;
依据所述确定的放大系数对各栅格数据块进行放大得到放大后的栅格数据 ;
将所述放大后的栅格数据以及各栅格数据块的放大系数发送给客户端。
进一步地, 所述根据各栅格数据块的最大像素值和最小像素值为各栅格数据块确 定放大系数包括 :
获取预先设定的上限值和下限值 ;
对最大像素值和最小像素值进行 10 的整数次方的放大并四舍五入后, 同时满足 最大像素值和上限值的差值最小, 最小像素值和下限值差值最小的放大倍数为该栅格数据 块的放大系数。
进一步地, 所述预先设定的上限值和下限值根据如下条件确定 :
使放大后的最大像素值和最小像素值存储字节数最小 ; 或
使放大后的最大像素值和最小像素值存储字节数小于放大前的最大像素值和最 小像素值存储字节数。
进一步地, 所述根据各栅格数据块的最大像素值和最小像素值为各栅格数据块确 定放大系数包括 :
a. 如果最大像素值和最小像素值均在 [-1.27, 1.28], 放大系数取 100 ;
b. 如果最大像素值和最小像素值均在 [-12.7, 12.8], 放大系数取 10 ;
c. 如果最大像素值和最小像素值均在 [-127.0, 128.0], 放大系数取 100 ;
d. 如果最大像素值和最小像素值均在 [-3276.0, 3276.0], 放大系数取 10 ;
e. 其他范围情况下, 按原值不放大 ;
若最大像素值和最小像素值同时满足所述两个以上的条件, 则选取上下限值的取 值范围最小的那个条件中的放大系数。
进一步地, 所述方法还包括 :
客户端根据接收到的所述放大后的栅格数据以及各栅格数据块的放大系数对栅 格数据进行对应倍数的缩小, 将缩小后的栅格数据代入模型中进行运算, 并将运算后的数 据传回给服务器端。 进一步地, 所述将运算后的数据传回给服务器端之前还包括 :
对运算后的数据进行放大, 将放大后的数据传回。
为了解决上述问题, 本申请还提供了一种栅格数据传输系统, 包括 :
栅格数据块查找模块, 用于接收客户端发送的获取栅格数据块的请求, 并基于所 述请求查找栅格数据块 ;
像素值遍历模块, 用于遍历所述各栅格数据块的像素, 确定每一个栅格数据块的 最大像素值和最小像素值 ;
放大系数确定模块, 用于根据各栅格数据块的最大像素值和最小像素值为各栅格 数据块确定放大系数 ;
计算模块, 用于依据所述确定的放大系数对各栅格数据块进行放大得到放大后的 栅格数据 ; 和
数据传输模块, 用于将所述放大后的栅格数据以及各栅格数据块的放大系数发送 给客户端。
进一步地, 所述放大系数确定模块包括 :
数值获取单元, 用于获取预先设定的上限值和下限值 ;
放大系数确定单元, 用于对最大像素值和最小像素值进行 10 的整数次方的放大 并四舍五入后, 同时满足最大像素值和上限值的差值最小, 最小像素值和下限值差值最小 的放大倍数为该栅格数据块的放大系数。
进一步地, 所述放大系数确定模块还包括 :
数值确定单元, 用于根据条件确定上限值和下限值, 所述条件包括 :
使放大后的最大像素值和最小像素值存储字节数最小 ; 或
使放大后的最大像素值和最小像素值存储字节数小于放大前的最大像素值和最 小像素值存储字节数。
进一步地, 所述系统还包括 :
接收模块, 用于接收客户端传回的经模型运算后的结果栅格数据。
与现有技术相比, 本申请包括以下优点 :
本申请的栅格数据传输方法通过对需要传输的栅格数据按照其像素值选取适合 该栅格数据块的放大系数对其进行放大, 从而使栅格数据可以改用占用字节数较少的数据 类型进行存储, 从而降低了栅格数据传输量, 也提高传输效率。
进一步地, 因为在确定放大系数时, 并不是统一为所有栅格数据数据块设定, 而是 针对各栅格数据块的实际像素值所在范围来确定, 可以使放大更有针对性, 从而使放大后 的数据做占用的存储字节数更小, 从而使栅格数据传输量能尽可能的被降低。
另外, 当客户端接收到栅格数据以及放大系数后, 可以对栅格数据进行缩小, 从而 代入模型运算。服务器器和客户端对栅格数据的放大以及缩小操作的运算过程较为简单, 而且都是在内存中完成, 耗时几乎可以忽略不计, 所以并不会影响数据传输时间。
当然, 实施本申请的任一产品不一定需要同时达到以上所述的所有优点。 附图说明 图 1 是本申请的栅格数据传输方法实施例一的流程图 ;
图 2 是本申请的栅格数据传输方法实施例二的流程图 ;
图 3 是本申请的栅格数据传输系统实施例一的结构示意图 ;
图 4 是所需传输的一个栅格数据块示意图 ;
图 5 是服务器端依照本申请的栅格数据传输方法及系统对图 4 所示的栅格数据块 进行放大后的示意图 ;
图 6 是客户端依照本申请的栅格数据传输方法及系统对图 5 所示的栅格数据块进 行缩小后的示意图。
具体实施方式
为使本申请的上述目的、 特征和优点能够更加明显易懂, 下面结合附图和具体实 施方式对本申请作进一步详细的说明。
参照图 1, 示出本申请的一种栅格数据传输方法实施例一, 包括以下步骤 :
步骤 101, 接收客户端发送的获取栅格数据块的请求, 并基于所述请求查找栅格数 据块。
当客户端需要进行模型计算时, 根据需要向服务器端发送获取栅格数据请求, 请 求中会包括目标栅格数据的文件名称以及目标栅格数据中的栅格数据块的块号。 当服务器 端接收请求后, 基于请求中的目标栅格数据的文件名称查找到对应的栅格数据文件, 然后 再基于请求中的块号去查找该栅格数据文件中对应的栅格数据块。
步骤 102, 遍历所述栅格数据块的像素, 确定每一个栅格数据块的最大像素值和最 小像素值。
栅格数据是由若干栅格数据块组成, 例如, K×L 个栅格数据块, K, L 分别为≥ 2 的 整数。每一个栅格数据块由若干像素构成, 例如, m×n 个象素构成。m = 2i, n = 2j, i, j分 别为≥ 2 的整数。假设客户端请求的目标栅格数据包含 m 个栅格数据块, 则分别确定 m 个栅格数据块中的最大像素值和最小像素值。
步骤 103, 根据各栅格数据块的最大像素值和最小像素值为各栅格数据块确定放 大系数。
确定放大系数需要满足的基本条件为 : 使每一个像素值可以用更小字节的数据类 型进行存储, 从而减少栅格数据的传输量。 具体的做法为 : 将每一个栅格数据块的最大像素 值和最小像素值进行 10 的整数次方的放大并四舍五入后, 同时满足最大像素值和上限值 的差值最小, 最小像素值和下限值差值最小的放大倍数为该栅格数据块的放大系数。 即, 最 大像素值和最小像素值分别乘以相同的放大倍数后, 其仍然需要在上限值和下限值的数值 范围内。
设置前述条件的原因是 : 对于像素值较小且小数位较少的栅格数据块来说可以很 好的实现。但是, 当栅格数据块的像素值本身就较大, 若再经过放大系数的放大, 则可能占 用更多的空间, 对于这些像素值则无须放大, 维持原状即可。另外, 当栅格数据块的像素值 小数部分较多时, 需要很大的放大系数才能转化为整数时, 其最终放大后的值也会很大, 因 此也会占用更多的空间。 因此, 除了考虑将像素值转化为整数, 还需要设定转化后的整数的 上下限值, 来保证转化后的整数能够以比原来更小的字节数存储。具体可以通过如下方式 实现 : 预先设定像素值不同的取值范围以及各取值范围对应的放大系数, 然后将放大后仍 然存在小数的像素值进行四舍五入。 当某一栅格数据块的最大像素值和最小像素值落入某 一取值范围内时, 则将该取值范围对应的放大系数确定为该栅格数据块的放大系数, 超过 这些取值范围, 则不放大。 因为在转化为整数的过程中可能存在四舍五入, 这就会影响数据精准度, 从而影 响模型运算精度。优选地, 在转换时除了考虑减少像素值占用的字节数还可以考虑模型运 算精度。即, 在减少像素值占用字节的前提下, 尽量选取使结果精确度相对较高的放大系 数。例如, 在很多情况下, 栅格数据块中的像素是以 float 型或 double 型数据格式存储的, 其每一个像素所占用的字节数为 4 字节或 8 字节, 如果对于精度要求较高的时候, 当某一个 像素值按照放大系数 K1 放大后, 可以只占用一个字节, 但是需要舍掉一位小数, 而按照放 大系数 K2 放大后, 会占用两个字节, 但是没有小数部分, 无须四舍五入。此时, 若只考虑占 用字节数, 则可以选取 K1 为放大系数, 若还需要考虑精度, 则可以选取 K2 为放大系数。具 体情况, 可以根据客户端的模型运算精度要求来选取, 只要能够使放大后的最大像素值和 最小像素值存储字节数小于放大前的最大像素值和最小像素值存储字节数, 能够实现减少 栅格数据传输量的目标即可, 本申请对此并不限制。
步骤 104, 依据所述确定的放大系数对各栅格数据块进行放大得到放大后的栅格 数据。
放大过程包括 : 将前述确定的放大系数乘以各栅格数据块的每一个像素值, 若所 得数包括小数部分, 则对所得数四舍五入。
步骤 105, 将所述放大后的栅格数据以及各栅格数据块的放大系数发送给客户端。
因为对栅格数据进行了放大处理, 客户端在计算时需要原始的数据, 此时需要将 放大系数一同发给客户端, 客户端根据各栅格数据块对应的放大系数对接收到的数据进行 对应倍数的缩小, 然后再将缩小后的栅格数据代入模型中进行运算, 从而保证模型运算精 度。
优选地, 参照图 2, 本申请的栅格数据传输方法实施例二, 还包括以下步骤 :
步骤 201, 接收客户端传回的经模型运算后的结果栅格数据。
其中, 在客户端经模型运算后的结果栅格数据可以直接传回给服务器端, 也可以 按照与实施例一中各步骤相同的方法对结果栅格数据放大后, 将放大后的栅格数据以及放 大系数一同传回给服务器端, 从而减少传回数据时的数据量以及提高数据回传的效率。
参照图 3, 示出本申请的一种栅格数据传输系统, 包括栅格数据块查找模块 10、 像 素值遍历模块 20、 放大系数确定模块 30、 计算模块 40 和数据传输模块 50。
栅格数据块查找模块 10, 用于接收客户端发送的获取栅格数据块的请求, 并基于 所述请求查找栅格数据块。
像素值遍历模块 20, 用于遍历所述各栅格数据块的像素, 确定每一个栅格数据块 的最大像素值和最小像素值。
放大系数确定模块 30, 用于根据各栅格数据块的最大像素值和最小像素值为各栅 格数据块确定放大系数。优选地, 放大系数确定模块 30 包括数值获取单元和放大系数确定 单元。数值获取单元, 用于获取预先设定的上限值和下限值。放大确定单元, 用于对最大像 素值和最小像素值进行 10 的整数次方的放大并四舍五入后, 同时满足最大像素值和上限 值的差值最小, 最小像素值和下限值差值最小的放大倍数为该栅格数据块的放大系数。优 选地, 放大系数确定模块还包括数值确定单元, 用于根据条件确定上限值和下限值, 所述条 件包括使放大后的最大像素值和最小像素值存储字节数最小 ; 或使放大后的最大像素值和 最小像素值存储字节数小于放大前的最大像素值和最小像素值存储字节数。 计算模块 40, 用于依据所述确定的放大系数对各栅格数据块进行放大得到放大后 的栅格数据。
数据传输模块 50, 用于将所述放大后的栅格数据以及各栅格数据块的放大系数发 送给客户端。
优选地, 该系统还包括数据接收模块, 用于接收客户端传回的经模型运算后的结 果栅格数据。
下面结合具体的实例对前述方法和系统进行详细说明, 假设只考虑占用较少字节 数, 不考虑数据的准确度, 放大系数确定过程如下 :
a. 如果最大像素值 Vmax 和最小像素值 Vmin 均在 [-1.27, 1.28], 放大系数 K 取 100 ;
b. 如果最大像素值 Vmax 和最小像素值 Vmin 均在 [-12.7, 12.8], 放大系数 K 取 10 ;
c. 如果最大像素值 Vmax 和最小像素值 Vmin 均在 [-127.0, 128.0], 放大系数 K 取 100 ;
d. 如果最大像素值 Vmax 和最小像素值 Vmin 均在 [-3276.0, 3276.0], 放大系数 K 取 10 ;
e. 其他范围情况下, 按原值不放大 ( 即放大系数为 1)。
需要注意的是, 前述各取值范围是逐级扩大的, 因此当最大像素值和最小像素值 同时落入多个范围时, 需要选取的是最小的取值范围对应的放大系数。 例如, 若最大像素值 和最小像素值分别为 1.2 和 -1.2, 落入前述所有取值范围内, 但是此时需要选取的是最小
取值范围 [-1.27, 1.28]。
假设原始栅格块数据每一个像素都为 float 型 4 字节数值, 根据前述方法确定的 放大系数进行放大数据后的传输量变化如下 :
对于 Vmax 和 Vmin 均在 [-1.27, 1.28] 以及 [-12.7, 12.8] 内的像素, 放大后, 用 byte 类型的 1 字节数值存储每个像素值, 传输量为原始的 1/4 ;
对于 Vmax 和 Vmin 均在 [-127.0, 128.0] 以及 [-3276.0, 3276.0] 内的像素, 放大 后, 用 short 类型的 2 字节数值存储每个象素值, 传输量为原始的 1/2 ;
其余的则传输量与原始数据一样, 无减少。
参照图 4, 示出某一栅格数据块 Ni 中各像素值 ( 其中省略号表示其他像素值与已 经列出的像素值取值相当 ), 根据上述方法, 应用 b 条件来确定放大系数, 即取放大系数 K 为 10, 再进行四舍五入后取整, 得到如图 5 所示的结果 ( 其中省略号表示其他像素值与已经列 出的像素值取值相当 ), 然后用 1 字节的 byte 数据类型来存储放大后的栅格数据, 并传输给 客户端, 数据传输量则为原始栅格块数据的 1/4。
客户端接收到栅格数据块 Ni 放大后的数据与放大系数 K, 对图 5 所示的每个像素 进行 K 倍缩小, 得到如图 6 的数据 ( 其中省略号表示其他像素值与已经列出的像素值取值 相当 ), 然后用这些数据进行模型运算。 从图 6 中可以看出, 栅格数据块是图 4 的近似结果, 但是如果在实际应用中, 该近似精度满足实际应用需求时, 本方法可大大减少网络传输数 据量, 提高效率。特别是, 对于客户端与服务器端进行大量栅格数据读写情况下, 传输效率 能够得到显著的提高。 可以理解, 客户端在模型运算完成后, 会将得到的运算后的栅格数据回传给服务 器, 可以直接回传, 也可以对栅格数据按照前述相同的方法进行放大后, 再将放大后的栅格 数据和放大系数回传, 在此不再赘述。
本申请的栅格数据传输方法通过对需要传输的栅格数据按照其像素值选取适合 该栅格数据块的放大系数对其进行放大, 从而使栅格数据可以改用占用字节数较少的数据 类型进行存储, 从而降低了栅格数据传输量, 也提高传输效率。
进一步地, 因为在确定放大系数时, 并不是统一为所有栅格数据数据块设定, 而是 针对各栅格数据块的实际像素值所在范围来确定, 可以使放大更有针对性, 从而使放大后 的数据做占用的存储字节数更小, 从而使栅格数据传输量能尽可能的被降低。
另外, 当客户端接收到栅格数据以及放大系数后, 可以对栅格数据进行缩小, 从而 代入模型运算。服务器器和客户端对栅格数据的放大以及缩小操作的运算过程较为简单, 而且都是在内存中完成, 耗时几乎可以忽略不计, 所以并不会影响数据传输时间。
本说明书中的各个实施例均采用递进的方式描述, 每个实施例重点说明的都是与 其他实施例的不同之处, 各个实施例之间相同相似的部分互相参见即可。对于系统实施例 而言, 由于其与方法实施例基本相似, 所以描述的比较简单, 相关之处参见方法实施例的部 分说明即可。
以上对本申请所提供的栅格数据传输方法及系统进行了详细介绍, 本文中应用了 具体个例对本申请的原理及实施方式进行了阐述, 以上实施例的说明只是用于帮助理解本申 请的方法及其核心思想 ; 同时, 对于本领域的一般技术人员, 依据本申请的思想, 在具体实施 方式及应用范围上均会有改变之处, 综上所述, 本说明书内容不应理解为对本申请的限制。