一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

等值线和/或等值面生成方法、系统、设备及存储介质与流程

2022-07-30 11:15:42 来源:中国专利 TAG:


1.本发明属于地理信息技术领域,尤其涉及一种基于gdal空间插值的等值线和/或等值面生成方法、系统、计算机设备及存储介质。


背景技术:

2.等值线是专题地图的重要图型,起初用来描述地形的起伏变化,后常被用于以相等数值点的连线表示连续分布且逐渐变化的数量特征,如等高线、等温线、等降雨量线等。等值面是一定地理空间范围内相近值的面域范围集合,在专题地图展示时,等值面可更直观地表示要素在空间渐变的趋势。等值线及等值面的应用不仅仅在测绘及地理信息领域,同时也越来越多地被应用于环境、水利、气象等诸多领域的数据分析及可视化渲染。
3.随着地理信息技术的快速发展,利用gis技术中的等值线及等值面进行数据分析以及信息化系统的开发与展示被越来越多的大众接受和认可。尽管等值线及等值面生成技术已经十分成熟,但该功能大多集成在商用地理信息数据处理软件中,如arcgisdesktop、supermap desktop,在webgis信息化系统开发过程中需要取得其桌面软件及服务端软件的产品授权才能使用,软件价格昂贵、等值线及等值面生成技术调用效率低下,因其结果数据只能利用对应软件产品的二维地图sdk或api进行加载,导致无法跨平台使用,且展示效果不直观,更无法与二、三维开源webgisapi进行无缝展示集成。而流行的开源前端的插值渲染类库,如kriging.js、turf.js等,效率低下,准确率较低、参数设置不灵活、展示效果不理想、无法生成等值线数据、与三维webgis集成效果差。后端开源类库wcontour开源插值类库仅仅支持反距离权重插值方法,无法灵活设置插值方法。


技术实现要素:

4.本发明的目的在于提供一种等值线和/或等值面生成方法、系统、设备及存储介质,以解决现有软件需授权才能使用,价格昂贵,调用效率低,无法跨平台使用且展示效果不直观;以及开源类库参数设置不灵活的问题。
5.本发明是通过如下的技术方案来解决上述技术问题的:一种等值线和/或等值面生成方法,包括以下步骤:
6.步骤1:根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据;
7.步骤2:根据所述数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值;
8.步骤3:根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小,并动态生成内存缓冲区;
9.步骤4:利用gdal(geospatial data abstraction library)提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至所述内存缓冲区;
10.步骤5:选择生成等值线和/或等值面,当生成等值线时,执行步骤6;当生成等值面时,执行步骤9;当生成等直线和等值面时,执行步骤6和9;
11.步骤6:创建第一临时存储文件,并为所述第一临时存储文件写入四角范围坐标,在所述第一临时存储文件中创建存储波段,将所述内存缓冲区的插值结果写入至第一临时存储文件的存储波段中;
12.步骤7:创建第一矢量图层,并设置等值线生成间隔;利用gdal提供的等值线生成函数对所述第一临时存储文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至所述第一矢量图层;
13.步骤8:根据需要输出的结果范围创建第一裁剪图层,利用所述第一裁剪图层对所述第一矢量图层中的等值线数据进行裁剪,得到等值线文件;
14.步骤9:将所述内存缓冲区的插值结果转化为特定的数值类型,对转化后的数据进行重分类,并将重分类后的数据按照原顺序写入整形数组;
15.步骤10:创建第二临时存储文件,并为所述第二临时存储文件写入四角范围坐标,在所述第二临时存储文件中创建存储波段,将所述步骤9中写有重分类后的数据的整形数组写入至第二临时存储文件的存储波段中;
16.步骤11:创建第二矢量图层,利用gdal提供的栅格矢量化函数对所述第二临时存储文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至所述第二矢量图层;
17.步骤12:根据需要输出的结果范围创建第二裁剪图层,利用所述第二裁剪图层对所述第二矢量图层中的数据进行裁剪,得到等值面文件。
18.进一步地,所述步骤2中,栅格区域的宽度值和高度值的计算公式为:
[0019][0020][0021]
其中,n
x
表示栅格区域的宽度值,ny表示栅格区域的高度值,x
max
、y
max
分别表示x、y方向坐标的最大值,x
min
、y
min
分别表示x、y方向坐标的最小值,δ表示数据分辨率。
[0022]
进一步地,所述步骤3中,内存缓冲区大小的计算公式为:
[0023][0024]
其中,b表示内存缓冲区大小,n
x
表示栅格区域的宽度值,ny表示栅格区域的高度值,n
type
表示输出数据类型尺寸。
[0025]
优选地,利用java.nio.bytebuffer.allocatedirect()函数动态生成所述内存缓冲区。
[0026]
进一步地,所述步骤4中,插值函数所采用的插值方式为反距离权重插值法、自然邻域插值法或趋势面法插值。
[0027]
进一步地,所述步骤6或10中,利用gdal内置函数rasterdriver.create()创建第一临时存储文件或第二临时存储文件;
[0028]
利用setgeotransform()函数为第一临时存储文件或第二临时存储文件写入四角范围坐标;
[0029]
利用getrasterband()函数在第一临时存储文件或第二临时存储文件中创建存储
波段;
[0030]
利用writeraster_direct()函数将内存缓冲区中的插值结果或数据分别写入至第一临时存储文件或第二临时存储文件的存储波段中。
[0031]
进一步地,所述步骤7或11中,利用ogr.getdriverbyname.createdatasource()函数创建第一矢量图层或第二矢量图层。
[0032]
优选地,所述步骤8或12中,利用geometry.createfromjson()函数创建第一裁剪图层或第二裁剪图层。
[0033]
进一步地,所述生成方法还包括图形展示及渲染,具体实现过程为:
[0034]
读取所述等值线和/或等值面文件,将所述等值线和/或等值面文件分别转化为字符串数据,并分别将对应的所述字符串数据请求到web前端,实现等值线和/或等值面图像展示;
[0035]
利用cesium三维平台对生成的等值线geojson字符串数据进行加载,并生成贴地线,对等值线对应的值进行颜色分类渲染,并在线要素上生成对应的值标注;
[0036]
利用cesium三维平台对生成的等值面geojson字符串数据进行加载,并生成贴地面,按照等值面分类值进行渲染。
[0037]
本发明还提供一种等值线和/或等值面生成系统,包括:
[0038]
参数设置单元,用于根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据;
[0039]
第一计算单元,用于根据所述数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值;
[0040]
缓冲区生成单元,用于根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小,并动态生成内存缓冲区;
[0041]
第二计算单元,用于利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至所述内存缓冲区;
[0042]
临时存储文件创建单元,用于创建第一临时存储文件,并为所述第一临时存储文件写入四角范围坐标,在所述第一临时存储文件中创建存储波段,将所述内存缓冲区的插值结果写入至第一临时存储文件的存储波段中;以及用于创建第二临时存储文件,并为所述第二临时存储文件写入四角范围坐标,在所述第二临时存储文件中创建存储波段,将写有重分类后的数据的整形数组写入至第二临时存储文件的存储波段中;
[0043]
矢量图层创建单元,用于创建第一矢量图层,并设置等值线生成间隔;以及用于创建第二矢量图层;
[0044]
等值线数据生成单元,用于利用gdal提供的等值线生成函数对所述第一临时存储文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至所述第一矢量图层;
[0045]
裁剪图层创建单元,用于创建第一裁剪图层和第二裁剪图层;
[0046]
第一裁剪单元,用于利用所述第一裁剪图层对所述第一矢量图层中的等值线数据进行裁剪,得到等值线文件;
[0047]
转化重分类单元,用于将所述内存缓冲区的插值结果转化为特定的数值类型,对转化后的数据进行重分类,并将重分类后的数据按照原顺序写入整形数组;
[0048]
栅格矢量化单元,用于利用gdal提供的栅格矢量化函数对所述第二临时存储文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至所述第二矢量图层;
[0049]
第二裁剪单元,用于利用所述第二裁剪图层对所述第二矢量图层中的数据进行裁剪,得到等值面文件。
[0050]
本发明还提供一种设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如上所述等值线和/或等值面生成方法的步骤。
[0051]
本发明还提供一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述等值线和/或等值面生成方法的步骤。
[0052]
有益效果
[0053]
与现有技术相比,本发明的优点在于:
[0054]
本发明所提供的一种等值线和/或等值面生成方法与系统,利用gdal开源类库进行等值线和/或等值面计算和生成,利用cesium开源三维渲染平台进行等值线和等值面的渲染,配置简单,操作便捷,免费,避免了商业gis软件使用复杂,收费昂贵的问题;
[0055]
相对于商业gis插值模块及其他开源插值类库,经实际算法效率测试对比,本发明具有更高的生成效率和使用效率,且可自定义插值方法,并可灵活设置插值及生成参数;
[0056]
采用cesium三维平台进行等值线及等值面的渲染和标注,展示方法较二维平台更加直观、精美;
[0057]
采用gdal java版本进行等值线和等值面生成,可以跨计算机操作系统平台进行应用;同时生成结果为geojson格式,可以利用绝大部分的商业及开源二、三维gis平台进行结果展示渲染,跨gis平台。
附图说明
[0058]
为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一个实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0059]
图1是本发明实施例中方法流程示意图;
[0060]
图2是本发明实施例中生成的等值线/等值面结果示意图。
具体实施方式
[0061]
下面结合本发明实施例中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0062]
下面以具体地实施例对本技术的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
[0063]
实施例1
[0064]
本发明实施例所提供的一种等值线生成方法,如图1所示,包括以下步骤:
[0065]
步骤1、参数设置。
[0066]
配置java版本gdal开发环境,并引入gdal.jar包,本实施例采用gdal release 3.0版本。根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。由四角坐标数据确定的范围通常为矩形区域,矩形区域的长为四角坐标数据中横坐标(即x方向)最大值与最小值的差,矩形区域的宽为四角坐标数据中纵坐标(即y方向)最大值与最小值的差。
[0067]
步骤2、栅格区域的宽高计算:根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,具体计算公式为:
[0068][0069][0070]
其中,n
x
表示栅格区域的宽度值(即x方向栅格个数),ny表示栅格区域的高度值(即y方向栅格个数),x
max
、y
max
分别表示x、y方向坐标的最大值,x
min
、y
min
分别表示x、y方向坐标的最小值,δ表示数据分辨率pixresoultion。
[0071]
数据分辨率的单位与插值数据的坐标对应,例如当插值数据的坐标为地理坐标时,数据分辨率的单位也对应为地理坐标。
[0072]
步骤3、缓冲区的动态生成:根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小(即存储结果数据需要的字节个数),并动态生成内存缓冲区。
[0073]
插值结果栅格的输出数据类型可以为整型、浮点型或双精度类型,本实施例设插值结果栅格的输出数据类型为浮点型。内存缓冲区大小的计算公式为:
[0074][0075]
其中,b表示内存缓冲区大小,n
x
表示栅格区域的宽度值,ny表示栅格区域的高度值,n
type
表示输出数据类型尺寸。利用gdal.getdatatypesize()函数可以得到输出数据类型尺寸,例如gdal.getdatatypesize(gdalconst.gdt_float32)为gdal中定义的浮点型的输出数据类型尺寸。
[0076]
根据内存缓冲区大小,利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区,内存缓冲区用于存储插值结果。
[0077]
步骤4、插值结果计算和存储:利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0078]
在本发明的一个具体实施方式中,插值函数所采用的插值方式为反距离权重插值法、自然邻域插值法或趋势面法插值。以反距离权重插值法为例,插值参数设置包括插值范围四角坐标、插值点的坐标及属性值数组、反距离权重插值参数(插值权重幂值、插值半径、角度等)、插值缓冲区。
[0079]
步骤5、利用gdal内置函数rasterdriver.create()创建第一临时存储tif文件,并利用setgeotransform()函数为第一临时存储tif文件写入四角范围坐标,然后在第一临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将内存缓冲区的插值结果写入至第一临时存储tif文件的存
储波段中。
[0080]
原则上,四角范围坐标与步骤1的四角坐标数据对应。
[0081]
步骤6、利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第一矢量图层,并设置等值线生成间隔;利用gdal提供的gdal.contourgenerate()等值线生成函数对第一临时存储tif文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至第一矢量图层,图层格式为geojson。
[0082]
步骤7、根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素和第一裁剪图层,利用第一裁剪图层的clip()对第一矢量图层中的等值线数据进行裁剪,得到等值线文件。
[0083]
步骤8、删除过程数据,例如存储插值结果的第一临时存储tif文件、第一裁剪图层等。
[0084]
步骤9、通过后台代码读取geojson等值线文件,并转化为字符串,通过ajax将字符串数据请求到web前端,实现等值线图像展示,如图2所示。
[0085]
步骤10、在web前端引入cesium.js三维平台类库,直接利用cesium三维平台的geojson加载接口对生成的等值线geojson字符串数据进行加载,并生成贴地线,然后对等值线对应的值进行颜色分类渲染,并在线要素上生成对应的值标注。
[0086]
本发明实施例还提供一种等值线生成系统,包括参数设置单元、第一计算单元、缓冲区生成单元、第二计算单元、临时存储文件创建单元、矢量图层创建单元、等值线数据生成单元、裁剪图层创建单元、第一裁剪单元。
[0087]
参数设置单元,用于根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。
[0088]
第一计算单元,用于根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,如公式(1)和(2)所示。
[0089]
缓冲区生成单元,用于根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小(如公式(3)所示),并利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区。
[0090]
第二计算单元,用于利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0091]
临时存储文件创建单元,用于利用gdal内置函数rasterdriver.create()创建第一临时存储tif文件,并利用setgeotransform()函数为第一临时存储tif文件写入四角范围坐标,然后在第一临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将内存缓冲区的插值结果写入至第一临时存储tif文件的存储波段中。
[0092]
矢量图层创建单元,用于利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第一矢量图层,并设置等值线生成间隔。
[0093]
等值线数据生成单元,用于利用gdal提供的gdal.contourgenerate()等值线生成函数对第一临时存储tif文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至第一矢量图层,图层格式为geojson。
[0094]
裁剪图层创建单元,用于根据需要输出的结果范围将坐标值序列化为geojson字
符串,然后利用geometry.createfromjson()函数创建裁剪要素和第一裁剪图层。
[0095]
第一裁剪单元,用于利用第一裁剪图层的clip()对第一矢量图层中的等值线数据进行裁剪,得到等值线文件。
[0096]
实施例2
[0097]
本发明实施例所提供的一种等值面生成方法,如图1所示,包括以下步骤:
[0098]
步骤1、参数设置。
[0099]
配置java版本gdal开发环境,并引入gdal.jar包,本实施例采用gdal release 3.0版本。根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。由四角坐标数据确定的范围通常为矩形区域,矩形区域的长为四角坐标数据中横坐标(即x方向)最大值与最小值的差,矩形区域的宽为四角坐标数据中纵坐标(即y方向)最大值与最小值的差。
[0100]
步骤2、栅格区域的宽高计算:根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,具体计算公式如式(1)和(2)所示。
[0101]
步骤3、缓冲区的动态生成:根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小,并动态生成内存缓冲区。
[0102]
插值结果栅格的输出数据类型可以为整型、浮点型或双精度类型,本实施例设插值结果栅格的输出数据类型为浮点型。内存缓冲区大小的计算公式如公式(3)所示。
[0103]
根据内存缓冲区大小,利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区,内存缓冲区用于存储插值结果。
[0104]
步骤4、插值结果计算和存储:利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0105]
在本发明的一个具体实施方式中,插值函数所采用的插值方式为反距离权重插值法、自然邻域插值法或趋势面法插值。以反距离权重插值法为例,插值参数设置包括插值范围四角坐标、插值点的坐标及属性值数组、反距离权重插值参数(插值权重幂值、插值半径、角度等)、插值缓冲区。
[0106]
步骤5、将内存缓冲区的插值结果(字节数据)转化为特定的数值类型(例如浮点型数据),对转化后的数据进行重分类,即将数据按照区间分类,并将重分类后的数据按照原顺序写入整形数组。
[0107]
步骤6、利用gdal内置函数rasterdriver.create()创建第二临时存储tif文件,并利用setgeotransform()函数为第二临时存储tif文件写入四角范围坐标,然后在第二临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将步骤5中写有重分类后的数据的整形数组写入至第二临时存储tif文件的存储波段中。
[0108]
原则上,四角范围坐标与步骤1的四角坐标数据对应。
[0109]
步骤7、创建第二矢量图层,用于存储重分类后的等值面,利用gdal提供的栅格矢量化函数gdal.polygonize()对第二临时存储tif文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至第二矢量图层,图层格式为geojson。
[0110]
步骤8、根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素和第二裁剪图层,利用第二裁剪图层的
clip()对第二矢量图层中的数据进行裁剪,得到等值面文件。
[0111]
步骤9、删除过程数据,例如存储插值结果的第二临时存储tif文件、第二裁剪图层等。
[0112]
步骤10、通过后台代码读取geojson等值面文件,并转化为字符串,通过ajax将字符串数据请求到web前端,实现等值面图像展示,如图2所示。
[0113]
步骤11、在web前端引入cesium.js三维平台类库,直接利用cesium三维平台的geojson加载接口对生成的等值面geojson字符串数据进行加载,并生成贴地面,然后按照等值面分类值进行渲染。
[0114]
本发明实施例还提供一种等值面生成系统,包括参数设置单元、第一计算单元、缓冲区生成单元、第二计算单元、转化重分类单元、临时存储文件创建单元、矢量图层创建单元、栅格矢量化单元、裁剪图层创建单元、第二裁剪单元。
[0115]
参数设置单元,用于根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。
[0116]
第一计算单元,用于根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,如公式(1)和(2)所示。
[0117]
缓冲区生成单元,用于根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小(如公式(3)所示),并利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区。
[0118]
第二计算单元,用于利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0119]
转化重分类单元,用于将内存缓冲区的插值结果转化为特定的数值类型,对转化后的数据进行重分类,并将重分类后的数据按照原顺序写入整形数组。
[0120]
临时存储文件创建单元,用于利用gdal内置函数rasterdriver.create()创建第二临时存储tif文件,并利用setgeotransform()函数为第二临时存储tif文件写入四角范围坐标,然后在第二临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将写有重分类后的数据的整形数组写入至第二临时存储tif文件的存储波段中。
[0121]
矢量图层创建单元,用于利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第二矢量图层。
[0122]
栅格矢量化单元,用于利用gdal提供的栅格矢量化函数对第二临时存储tif文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至第二矢量图层,图层格式为geojson。
[0123]
裁剪图层创建单元,用于根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素和第二裁剪图层。
[0124]
第二裁剪单元,用于利用第二裁剪图层的clip()对第二矢量图层中的数据进行裁剪,得到等值面文件。
[0125]
实施例3
[0126]
本发明实施例所提供的一种等值线和等值面生成方法,如图1所示,包括以下步骤:
[0127]
步骤1、参数设置。
[0128]
配置java版本gdal开发环境,并引入gdal.jar包,本实施例采用gdal release 3.0版本。根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。由四角坐标数据确定的范围通常为矩形区域,矩形区域的长为四角坐标数据中横坐标(即x方向)最大值与最小值的差,矩形区域的宽为四角坐标数据中纵坐标(即y方向)最大值与最小值的差。
[0129]
步骤2、栅格区域的宽高计算:根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,具体计算公式如式(1)和(2)所示。
[0130]
步骤3、缓冲区的动态生成:根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小,并动态生成内存缓冲区。
[0131]
插值结果栅格的输出数据类型可以为整型、浮点型或双精度类型,本实施例设插值结果栅格的输出数据类型为浮点型。内存缓冲区大小的计算公式如公式(3)所示。
[0132]
根据内存缓冲区大小,利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区,内存缓冲区用于存储插值结果。
[0133]
步骤4、插值结果计算和存储:利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0134]
在本发明的一个具体实施方式中,插值函数所采用的插值方式为反距离权重插值法、自然邻域插值法或趋势面法插值。以反距离权重插值法为例,插值参数设置包括插值范围四角坐标、插值点的坐标及属性值数组、反距离权重插值参数(插值权重幂值、插值半径、角度等)、插值缓冲区。
[0135]
步骤5、执行步骤6~11实现等值线生成,执行步骤12~18实现等值面生成,等值线和等值面的生成可以同时执行,也可以先后执行。
[0136]
步骤6、对于等值线的生成,利用gdal内置函数rasterdriver.create()创建第一临时存储tif文件,并利用setgeotransform()函数为第一临时存储tif文件写入四角范围坐标,然后在第一临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将内存缓冲区的插值结果写入至第一临时存储tif文件的存储波段中。
[0137]
步骤7、利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第一矢量图层,并设置等值线生成间隔;利用gdal提供的gdal.contourgenerate()等值线生成函数对第一临时存储tif文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至第一矢量图层,图层格式为geojson。
[0138]
步骤8、根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素和第一裁剪图层,利用第一裁剪图层的clip()对第一矢量图层中的等值线数据进行裁剪,得到等值线文件。
[0139]
步骤9、删除过程数据,例如存储插值结果的第一临时存储tif文件、第一裁剪图层等。
[0140]
步骤10、通过后台代码读取geojson等值线文件,并转化为字符串,通过ajax将字符串数据请求到web前端,实现等值线图像展示,如图2所示。
[0141]
步骤11、在web前端引入cesium.js三维平台类库,直接利用cesium三维平台的
geojson加载接口对生成的等值线geojson字符串数据进行加载,并生成贴地线,然后对等值线对应的值进行颜色分类渲染,并在线要素上生成对应的值标注。
[0142]
步骤12、对于等值面的生成,将内存缓冲区的插值结果(字节数据)转化为特定的数值类型(例如浮点型数据),对转化后的数据进行重分类,并将重分类后的数据按照原顺序写入整形数组。
[0143]
步骤13、利用gdal内置函数rasterdriver.create()创建第二临时存储tif文件,并利用setgeotransform()函数为第二临时存储tif文件写入四角范围坐标,然后在第二临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将步骤12中写有重分类后的数据的整形数组写入至第二临时存储tif文件的存储波段中。
[0144]
步骤14、创建第二矢量图层,用于存储重分类后的等值面,利用gdal提供的栅格矢量化函数gdal.polygonize()对第二临时存储tif文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至第二矢量图层,图层格式为geojson。
[0145]
步骤15、根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素和第二裁剪图层,利用第二裁剪图层的clip()对第二矢量图层中的数据进行裁剪,得到等值面文件。
[0146]
步骤16、删除过程数据,例如存储插值结果的第二临时存储tif文件或第一临时存储tif文件、第二裁剪图层或第一裁剪图层等。
[0147]
步骤17、通过后台代码读取geojson等值面文件,并转化为字符串,通过ajax将字符串数据请求到web前端,实现等值面图像展示,如图2所示。
[0148]
步骤18、在web前端引入cesium.js三维平台类库,直接利用cesium三维平台的geojson加载接口对生成的等值面geojson字符串数据进行加载,并生成贴地面,然后按照等值面分类值进行渲染。
[0149]
本发明实施例还提供一种等值线和等值面生成系统,包括参数设置单元、第一计算单元、缓冲区生成单元、第二计算单元、转化重分类单元、临时存储文件创建单元、矢量图层创建单元、等值线数据生成单元、栅格矢量化单元、裁剪图层创建单元、第一裁剪单元以及第二裁剪单元。
[0150]
参数设置单元,用于根据栅格数据的使用分辨率需求设置插值结果栅格的数据分辨率,根据所需结果数据的实际坐标范围设置插值范围的四角坐标数据。
[0151]
第一计算单元,用于根据数据分辨率和四角坐标数据计算出栅格区域的宽度值和高度值,如公式(1)和(2)所示。
[0152]
缓冲区生成单元,用于根据栅格区域的宽度值和高度值、定义的插值结果栅格的输出数据类型计算出内存缓冲区大小(如公式(3)所示),并利用java.nio.bytebuffer.allocatedirect()函数动态生成内存缓冲区。
[0153]
第二计算单元,用于利用gdal提供的插值函数对空间散点数据进行插值结果计算,并将计算出的插值结果存储至内存缓冲区。
[0154]
转化重分类单元,用于将内存缓冲区的插值结果转化为特定的数值类型,对转化后的数据进行重分类,并将重分类后的数据按照原顺序写入整形数组。
[0155]
临时存储文件创建单元,用于利用gdal内置函数rasterdriver.create()创建第
一临时存储tif文件,并利用setgeotransform()函数为第一临时存储tif文件写入四角范围坐标,然后在第一临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将内存缓冲区的插值结果写入至第一临时存储tif文件的存储波段中;
[0156]
以及用于利用gdal内置函数rasterdriver.create()创建第二临时存储tif文件,并利用setgeotransform()函数为第二临时存储tif文件写入四角范围坐标,然后在第二临时存储tif文件中利用getrasterband()函数创建存储波段,最后利用波段对象的writeraster_direct()函数将写有重分类后的数据的整形数组写入至第二临时存储tif文件的存储波段中。
[0157]
栅格矢量化单元,用于利用gdal提供的栅格矢量化函数对第二临时存储tif文件中存储整形数组的波段数据进行栅格矢量化转换,并将栅格矢量化转换后的数据存储至第二矢量图层,图层格式为geojson。
[0158]
矢量图层创建单元,用于利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第一矢量图层,并设置等值线生成间隔;以及用于利用ogr.getdriverbyname("esri shapefile").createdatasource()函数创建第二矢量图层。
[0159]
等值线数据生成单元,用于利用gdal提供的gdal.contourgenerate()等值线生成函数对第一临时存储tif文件中存储插值结果的波段数据进行等值线数据生成,并将生成的等值线数据存储至第一矢量图层,图层格式为geojson。
[0160]
裁剪图层创建单元,用于根据需要输出的结果范围将坐标值序列化为geojson字符串,然后利用geometry.createfromjson()函数创建裁剪要素、第一裁剪图层和第二裁剪图层。
[0161]
第一裁剪单元,用于利用第一裁剪图层的clip()对第一矢量图层中的等值线数据进行裁剪,得到等值线文件。
[0162]
第二裁剪单元,用于利用第二裁剪图层的clip()对第二矢量图层中的数据进行裁剪,得到等值面文件。
[0163]
本发明实施例还提出了一种设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述等值线和/或等值面生成方法的步骤。
[0164]
示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述计算机设备中的执行过程。例如,所述计算机程序可以被分割成参数设置单元、第一计算单元、缓冲区生成单元、第二计算单元、转化重分类单元、临时存储文件创建单元、矢量图层创建单元、等值线数据生成单元、栅格矢量化单元、裁剪图层创建单元、第一裁剪单元以及第二裁剪单元,各单元具体功能如上所述。
[0165]
所述设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述设备可包括但不仅限于处理器、存储器。本领域技术人员可以理解,等值线和/或等值面生成系统仅仅是设备的示例,并不构成对设备的限定,可以包括比系统更多或更少的部件,或
者组合某些部件,或者不同的部件,例如所述设备还可以包括输入输出设备、网络接入设备、总线等。
[0166]
所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0167]
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述等值线和/或等值面生成系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0168]
所述计算机程序被处理器执行时实现所述等值线和/或等值面生成方法的步骤。
[0169]
所述等值线和/或等值面生成系统集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0170]
以上所揭露的仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或变型,都应涵盖在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献