美文网首页
10_Geoist之网格数据处理模块1

10_Geoist之网格数据处理模块1

作者: 地学小哥 | 来源:发表于2020-04-08 18:37 被阅读0次

内容摘要:网格数据是地球物理数据处理和解释的基础,通常野外测量的离散点也是要先转换为规则的网格数据才能进行进一步的变换与计算。今天我们就谈谈在Geoist中怎么,实现对网格数据的定义和操作接口使用方法。

1、网格数据

(1)基本概念

网格数据这里指的是规则网数据,网格定义如图1所示。

图1 网格文件数据示意图

如果计算机绘制等值线,一般都需要用网格数据来表示。如果不是网格数据,通常需要通过插值算法,先变成网格数据。

在地球物理重磁数据处理和模型计算中,一般也要先插值成规则的网格数据,才能满足FFT变换的数据格式要求。

网格数据定义又很多种,一般都包括文件头和数据体两部分,不同的文件头定义 有差别,因此,常用的包括:ESRI的网格数据定义,Netcdf,Surfer等。

(2)Geoist中的实现

在Geoist的others模块中,实现了对网格数据的定义和操作。基本类的继承关系如下:Dataset->Grid->Grid2D->GMT or GDAL。

而网格信息数据定义类为:GeoDict。

下面我们不急着动手,先看看Geoist中依赖的GDAL库。

2、第三方GDAL库

GDAL(Geospatial Data Abstraction Library)是一个重要的第三方支持库,是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ARCGIS,Google Earth和跨平台的GRASS GIS系统。利用GDAL/OGR库,可以直接获得上百种矢量和栅格文件数据的支持。

当然,Python接口也是有的,如果不知道本地已经安装的GDAL版本,可以通过pip show gdal命令查看,结果如下:

(base) D:\Miniconda3\Scripts>pip show gdal
Name: GDAL
Version: 2.3.3
Summary: GDAL: Geospatial Data Abstraction Library
Home-page: http://www.gdal.org
Author: Frank Warmerdam
Author-email: warmerdam@pobox.com
License: MIT

Geoist中,对网格数据类型的格式扩展功能、投影变换、重采样等基于RasterIO库开发,而该库又基于GDAL,所以,这两个第三方库都要支持。

3、一个例子

下面我们结合三个具体的例子,分别说明:

(1)建立一个最简单的网格对象

使用Grid2D和GeoDict两个类,就可以定义一个网格文件,并初始化导入数据。

import matplotlib.pyplot as plt
import numpy as np
from geoist.others.grid2d import Grid2D
from geoist.others.geodict import GeoDict

xmin = 118.5
xmax = 120.5
ymin = 32.0
ymax = 34.0
xdim = 0.25
ydim = 0.25

ncols = len(np.arange(xmin,xmax+xdim,xdim))
nrows = len(np.arange(ymin,ymax+ydim,ydim))
data = np.arange(0,nrows*ncols)
data.shape = (nrows,ncols)

geodict = {'xmin':xmin,
           'xmax':xmax,
           'ymin':ymin,
           'ymax':ymax,
           'dx':xdim,
           'dy':ydim,
           'nx':ncols,
           'ny':nrows,}

grid = Grid2D(data,GeoDict(geodict))

plt.figure()
plt.imshow(grid.getData(),interpolation='nearest')
plt.colorbar()

lat,lon = grid.getLatLon(4,4)
print('The coordinates at the center of the grid are %.3f,%.3f' % (lat,lon))
value = grid.getValue(lat,lon)
print('The data value at the center of the grid is %i' % (value))

(2)抽取一个网格内部的区域

有了一个网格对象的示例后,可以使用interpolateToGrid函数对其进行重采样,指定一个新的GeoDict位置后即可,代码如下:

xmin = 119.2
xmax = 119.8
ymin = 32.7
ymax = 33.3
dx = 0.33
dy = 0.33
nx = len(np.arange(xmin,xmax+xdim,xdim))
ny = len(np.arange(ymin,ymax+ydim,ydim))
sdict = {'ymin':32.7,'ymax':33.3,'xmin':119.2,'xmax':119.8,'dx':0.33,'dy':0.33,'nx':nx,'ny':ny}
grid2 = grid.interpolateToGrid(GeoDict(sdict))

plt.figure()
plt.imshow(grid2.getData(),interpolation='nearest'); #'linear', 'cubic', 'nearest'
plt.colorbar();

(3)读取一个实际数据

读取GMT的Netcdf格式网格文件。

from geoist.others.gmt import GMTGrid
gd0, ff = GMTGrid.getFileGeoDict('d:\\out.nc')
grid0 = GMTGrid.load('d:\\out.nc',gd0)
plt.figure()
plt.imshow(grid0.getData())
plt.colorbar()

读取Arcinfo Ascii网格文件。

from geoist.others.gdal import GDALGrid
gd1, ff = GDALGrid.getFileGeoDict('d:\\out-arc.grd')
grid = GDALGrid.load('d:\\out-arc.grd',gd1)
plt.figure()
plt.imshow(grid.getData())
plt.colorbar()
图2 读取后的网格数据

好了,今天就介绍到这里,下一节将继续介绍网格对象的投影变换、内插外插、指定数据提取等扩展功能。

相关文章

  • 10_Geoist之网格数据处理模块1

    内容摘要:网格数据是地球物理数据处理和解释的基础,通常野外测量的离散点也是要先转换为规则的网格数据才能进行进一步的...

  • 11_Geoist之网格数据处理模块2

    内容摘要:在上节课的基础上,我们继续学习网格数据的读取和操作。今天我们结合WGM2012的数据,进一步介绍如何采用...

  • 2018-10-31

    Python 数据处理 1. 导入所需模块或库 导入数据处理pandas、numpy及可视化模块matplotli...

  • LibGDX图形模块之网格

    网格是一组顶点(和可选的索引)的组合,它们描述了用于渲染的几何图形。 顶点以顶点缓冲对象(VBOs)的形式保存在V...

  • UI按钮

    1.网格基数的设置 绘图工具中的网格功能帮助我们约束模块,使模块的比例存在一定的关系。 例如尺寸大小为137x31...

  • RN_0.59.9_SectionList

    注意一:构造函数 注意二:数据处理 demo: 1、 使用 SectionList 的模块方法 2、headVie...

  • AFNetwork - Response模块解析

    主题: 网络返回数据处理模块(输入、输出) 概要: 网络结束后的数据处理。 位置:AFURLResponseSer...

  • 大规模数据处理实战

    大规模数据处理实战 模块一:直通硅谷大规模数据处理技术 1.为什么MapReduce会被硅谷一线公司淘汰? 2. ...

  • Python 入门之 内置模块 -datetime模块

    Python 入门之 内置模块 -- datetime模块 1、datetime模块 (1)datetime.no...

  • Grid网格布局,了解一下?

    1.Grid布局定义 CSS的网格布局模块提供了一个基于网格的布局系统,能够以行和列来进行布局,使其更容易设计网页...

网友评论

      本文标题:10_Geoist之网格数据处理模块1

      本文链接:https://www.haomeiwen.com/subject/xovyphtx.html