7. 数据导入¶
[sec:import]
在开始数据导入之前,有必要提到GRASS的数据结构(请参阅[sec:grassdata])的模型。本节使用的术语在模型中有详细的解释。
互操作性是使用GIS的一个重要条件,例如原始数据的导入或从其它软件的数据转换。GRASS提供了大量的模块来导入矢量数据、栅格数据和站点。特定的命令语法可以用参数或来显示。
v.in.ogr -help
g.manual v.in.ogr &
r.in.gdal -help
7.1. 导入栅格数据¶
[sec:rasterimport]
GRASS支持多种栅格数据的导入,通常被认为是三类。
影像格式: 每个栅格总是有正的、整数值,如PPM,PNG,JPEG和GIF。
ASCII格式: 每个ASCII格式的栅格能包含正值,也能包含负值;可以是整数值,也可以是浮点值。ArcInfo的ASCII-GRID就是一个例子。
二进制格式:在二进制格式的栅格中,每个像素可以是正值,也可以是负值;可以是整型,也可以是浮点。并且它们能以不同的分辨率存储在不同的通道中。(Geo)TIFF和ERDAS/IMG都是很好的例子。
现在,要提到GRASS导入栅格数据的一个特性:栅格地图总是以原始分辨率和边界坐标来导入,但以当前区域的分辨率和边界来导出(请参阅[sec:rasterexport])。
对于未配准的数据分两种情况:
- 如果区域的分辨率已定义,地图必须适应它,那么扫描分辨率必须与所需的分辨(GRID RESOLUTION)率一致。
- 如果区域的参数,尤其是分辨率,与将要导入的地图一致,那么地图就可以毫无改变地导入。
表[tab:imrast]列出了用于导入栅格数据的模块,如其它GIS系统的格式,以及其它遥感影像格式。
[H]
|l|p10.5cm|
*GRASS模块 * & *导入的栅格格式* r.in.ascii & GRASS ASCII r.in.bin & BIL,GMT 二进制文件,LANDSAT TM5 r.in.gdal & ARC/INFO ASCII/Binary GRID, BIL, ERDAS (LAN, IMG), & USGS DOQ, JPEG, SAR CEOS, EOSAT, GeoTIFF, PPM/PNM, SDTS DEM, & GIF, PNG
导入栅格数据最常用的模块是。如表[tab:imrast]所述,它能够读取和写入()多种不同的格式。 以导入一幅配准过的ERDAS IMG地图为例。我们准备了一幅小的、30米分辨率的ASTERDEM地图,基于Osnabrueck的矢量数据。在主页可以找到。 (http://www.gdf-hannover.de/download)
r.in.gdal in=asterdem30m.img out=asterdem30m
Projection of input dataset and current location appear to match.
Proceeding with import...
100%
CREATING SUPPORT FILES FOR asterdem30m
COPYING COLOR TABLE FOR asterdem30m
用标记可以获得定义区域必需的空间范围。
# Adapting the current region to the map:
g.region rast=asterdem30m -p
用显示管理器(Display Manager)或命令,可以显示导入的地图。为了看到地图,我们先要用启动一个GRASS监视器。
# Starting the Display Manager
d.m&
# Displaying the map in the prompt:
d.mon x0
d.rast asterdem30m
7.2. 导入矢量数据¶
[sec:vectimport]
最新的GRASS ,其矢量库进行了彻底的重组。这是很必要的,因为旧版本的 主要着眼于栅格数据和站点数据的分析。本课程将关注GRASS 的新的矢量功能。矢量数据的变化可以在第[sec:vectstruk]章中看到。
要导入矢量数据,需要考虑大量的、不同的格式和标准。与栅格格式相比,矢量数据更加复杂。这就使得矢量数据的导入也更为复杂。 表[tab:vecimp]列出了GRASS支持的格式。可能最常用的格式是ESRI的Shapefile。
矢量数据一旦导入,就变成了GRASS自己的二进制矢量格式。几何形状、拓扑结构和所有的属性都存储在GRASS内部的数据库中。拓扑结构会在地图导入过程中创建。 当前的拓朴状态可以用来显示。矢量相关的更多命令在第[sec:vectstruk]章中描述。
[H]
|l|p10.5cm|
*GRASS模块* & *导入的矢量格式* v.in.ogr & SHAPE file, UK.NTF, SDTS, TIGER, S57, MapInfo-File, & DGN, VRT, AVCBin, REC, Memory, GML, ODBC v.in.ascii & GRASS ASCII v.in.e00 & ArcInfo-E00-format v.in.db & Create vectors from database with x|y[|z] coordinates
将Shapefile导入GRASS需要调用。注意,Shapefile不是拓朴格式,因此各个对象间没有邻近关系。例如,两个区域间的边界线会存储两次。 这可能会带来一些问题,所以在导入过程中GRASS会进行改正。
本练习的数据来自FRIDA,他们维护了大量的、详尽的、Osnabrueck城的矢量数据,由Intevation GmbH 提供。
12323 primitives registered
0 areas built
0 isles built
Number of nodes : 8937
Number of primitives: 12323
Number of points : 0
Number of lines : 12323
Number of boundaries: 0
Number of centroids : 0
Number of areas : 0
Number of isles : 0
导入过程中,一个名为streets的子目录被创建在目录下。在这个目录下存储了拓朴信息(topo),头信息(head),几何形状(coor),历史信息(hist),空间索引(sidx),类别索引(cidx)以及到相关属性数据的链接(dbln)。
根据默认设置,GRASS里的属性数据以DBASE格式存储在目录下。如果需要,您可以使用合适的编辑器来查看刚刚导入的属性数据(streets.dbf)。在GNU/Linux下可以使用OpenOffice、 Gnumeric或Koffice。
基于数据库(PostgreSQL 或 PostGIS)的,导入或生成矢量数据的方法在第[sec:vectstruk]章中可以看到。
如果矢量数据自己包含投影信息,那么在GRASS会话中可以基于这些信息生成一个新的区域。Shapefile的这些信息存储在后缀名为的文件中。用导入的数据创建新区域使用下面的语法:
v.in.ogr dsn=./frida-1.1-shp-joined/streets-joined.shp \
out=streets location=osnabrueck
7.3. 导入站点¶
[sec:punktimport]
在GRASS 中,站点(Site)不再单独存储在目录下,而是存储为矢量点,并用矢量模块来进行分析。以Shapefile格式的站点数据为例,使用来导入,与前面提到的类似:
268 primitives registered
0 areas built
0 isles built
Number of nodes : 268
Number of primitives: 268
Number of points : 268
Number of lines : 0
Number of boundaries: 0
Number of centroids : 0
Number of areas : 0
Number of isles : 0
通常站点以坐标对形式存储在简单的ASCII表中。为了将其导入GIS,GRASS提供了模块。站点应该以X值 Y值的顺序列出,分隔符没有特殊的意义。例如,将要的入的文件(coord.txt),它的列以’|’分隔:
1664619|5103481
1664473|5095782
1664273|5101919
缺少的类别值(IDs)可以使用模块来添加,所以它可以用来添加额外的属性:
v.category in=punkte out=points2 op=add
v.category points2 op=report
站点的信息以GRASS矢量格式存储在当前的区域下,在GRASS数据库的目录里。
如果有第三列包含了高程数据,那么需要在命令中添加参数:
1664619|5103481|101.2
1664473|5095782|102.2
1664273|5101919|101.7
cat coords3d.txt | v.in.ascii -z out=elevation
v.category in=elevation out=elevation2 op=add
v.category elevation2 op=report
如何从已有的数据库中提取站点,将在第[sec:vectstruk]章中介绍。