6. GRASS项目数据库

[sec:projbase]

在GRASS数据库中,空间数据总是经过地理编码后再进行管理。因此,在开始工作以前,您需要决定项目区域(也被称为Location)的坐标系统(如:高斯-克吕格,UTM等)。 考虑下面的问题:通常,它是选择数据库(GRASS和GIS数据库)结构和组织必需考虑的问题。

*项目区域的范围:* 所有导入的数据,作为项目的一部分,必须包含在区域的空间范围之内。此外,还必须确定项目所要使用的投影。这通常与项目所用的数据一起提供,包括了投影的信息,如投影名称、椭球、基准面和其它参数。

*栅格数据的分辨率:* 通常情况下,计算和存储的需求随着分辨率的增大而成指数级增长。但是,如果分辨率过低,又会造成数据丢失,使GIS达不到要求。因此,将最重要数据图层的分辨率定为标准(默认)分辨率是十分的有用。一旦区域创建后,栅格的分辨率就能够进行调整。在导入数据的时候,原始的分辨率和地图大小会被保存下来。

现在,项目区域的属性和数据的分辨率已经确定了,下一步就是为GRASS数据库创建子目录。这通常也被称为’grassdata’。(请参阅[sec:grassdata])

6.1. 创建GRASS项目

[sec:startgrass]

如果GRASS 的启动脚本在path($PATH)下,那么只要在终端里(X-Terminal),通过命令就能启动GRASS。更为详细的描述在[sec:install]里。

启动画面出现后,需要通过鼠标或键盘输入一些数据。在启动GRASS的时候,可以通过参数-text-gui来选择启动文本或图形界面。(见图[abb:newlocation] 以及 [abb:grasshallo])

grass60 -text   # 文本界面
grass60 -gui    # 图形界面

[H]

image [abb:grasshallo]

在这里,您既可以选择已有的区域和地图集,也可以创建新的区域和地图集。

如果要向已有的区域中添加新的地图集,那么首先选择适当的区域,然后在’Create New mapset’下方输入新的地图集的名称,最后点击按钮’Create ...’。(见图[abb:grasshallo])

有三种方式可以创建新的区域。(A) 用户可以提供投影数据。必要的信息通常可以在数据文件相关的元数据(metadata)中找到。 (B) 通过输入适当的EPSG代码,自动指定投影。(请参阅http://www.epsg.org/) 这会为区域指定标准投影和国家格网系统的参数。 适当的代码可以在菜单(见图[abb:epsg])或元数据中找到。(C) 使用导入模块和将投影信息与数据一并导入。

(A): 为了定义区域的投影,点击按钮’Create New Location’。GRASS自动切换到文本模式下(见图[abb:newlocation])。在此可以输入创建新区域的数据,如[sec:vorgehen]所述。

[H]

image1 [abb:newlocation]

(B): 如果项目区域有EPSG代码,那么它可以用来自动创建新区域。点击按钮’Create Location from EPSG’并输入适当的代码值(见图[abb:epsg])。按钮’EPSG Codes’会列出已有的代码值。

[H]

image2 [abb:epsg]

(C): 有些情况下,数据已经包含了所有必需的投影信息。因此,可以使用数据中的投影信息生成新的区域。 例如,可以用SHAPE或GeoTIFF文件创建一个新的区域,如果它们有’正确的’投影文件(不幸的是这种情况很少)。

示例:SHAPE投影文件的内容(.prj)

PROJCS["Transverse Mercator",GEOGCS["bessel",
DATUM["Deutsches_Hauptdreiecksnetz",
SPHEROID["bessel",6377397.155,299.1528128],
TOWGS84[590.5,69.5,411.6,-0.796,-0.052,-3.601,8.30]],
PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",9],PARAMETER["scale_factor",1],
PARAMETER["false_easting",3500000],PARAMETER["false_northing",0],
UNIT["meter",1]]

示例:栅格地图的投影数据(GeoTiff)

Driver: GTiff/GeoTIFF Size is 3570, 3753 Coordinate System is:
PROJCS["Transverse Mercator",
    GEOGCS["Deutsches_Hauptdreiecksnetz",
        DATUM["Deutsches_Hauptdreiecksnetz",
            SPHEROID["bessel",6377397.155,299.1528128000033],
            TOWGS84[590.5,69.5,411.6,-0.796,-0.052,-3.601,8.3]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",9],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",3500000],
    PARAMETER["false_northing",0],
    UNIT["meters",1]]
Origin = (3368561.280000,5928333.120000)
Pixel Size = (0.32000000,-0.32000000)
Corner Coordinates:
Upper Left  ( 3368561.280, 5928333.120) (  7d 1'12.86"E, 53d28'18.24"N)
Lower Left  ( 3368561.280, 5927132.160) (  7d 1'14.67"E, 53d27'39.41"N)
Upper Right ( 3369703.680, 5928333.120) (  7d 2'14.77"E, 53d28'19.26"N)
Lower Right ( 3369703.680, 5927132.160) (  7d 2'16.56"E, 53d27'40.43"N)
Center      ( 3369132.480, 5927732.640) (  7d 1'44.71"E, 53d27'59.33"N)

这些信息要精确地控制和检查,并且要尽可能的完整,这一点很重要。投影中的小偏差、一个不正确的基准面或椭球都会在数据定位上造成巨大的偏差。

6.2. 投影

[sec:projektionen]

在创建项目区域之前,需要考虑将要使用何种投影。下面的章节将对常见的投影作一个简介,包括它们的属性和参数。

图[abb:projekts]显示了从真实空间到地图投影的步骤。

[H]

image3 [abb:projekts]

6.2.1. 大地水准面

[sec:geoid]

地球形状的更为精确的定义,尤其在通过同一大地水准面测定的高度时。这一相当复杂的物理计算由地球质量造成,地球上从一个区域到另一个区域会有不同的厚度,因此有不同的重力,而这重力影响了地球的形状。所以,大地水准面表现了地球的重力场。如果看一下图 [abb:projekts],我们会发现地球的形状实际上是’扭曲’的。为了避免数学上的复杂性,在GIS中通常将地球的形状显示为椭球。

6.2.2. 椭球

[sec:ellips]

将地球简化为球体,不适合创建比例尺大于1:2 Million的地图。旋转椭球和其它椭球试着调整地球的复杂形状,尽可能准确地满足数学计算。因此,两极到地心的距离小于赤道到地心的距离。(见图[abb:projekts])

椭球模型有一个适用范围,它能够给地球上不同区域以最优的结果。总之,我们是能够得到一个用于局部定位的、足够准确的基础。

[H]

|p3cm|p3cm|p3cm|p4cm|

椭球 & 长半轴 (米) & 短半轴 (米) & 适用区域 Bessel 1841 & 6377397 & 6356079 & 德国,智利,荷兰,瑞典,... Clarke 1880 & 6378249 & 6356515 & 非洲,法国 Hayford 1909 & 6378388 & 6356912 & 比利时,芬兰,意大利,西班牙,... WGS 1984 & 6378137 & 6356752 & 北美,全球

6.2.3. 基准面

[sec:datum]

众多的实测点确定了基准面,它们可以通过高程数据进一步校准。下表包含了一些示例,既有用于全球的基准面,也有用于区域的基准面。GRASS 和都支持基准面转换。(见图[abb:verscomp])

[H]

|c|p4cm|c|c|

基准面 & 区域 & 原点 & 椭球 WGS 84 & 全球 & 地心 & WGS 84 NAD 1983 & 北美,加勒比海 & 地心 & GRS 80 European 1950 & 欧洲,北非 & 波茨坦 & International

6.2.4. 地图投影的类型

[sec:projtypen]

为了将3维的球体映射到2维的平面,我们需要使用投影。

[H]

image4 [abb:projmods]

为了使区域的变形最小,不同的区域需要使用不同的投影模型。(见图[abb:projmods])

*圆柱:*这是最简单的一种。为了形成圆柱,地图平面在赤道处围绕着地球。经线和纬线以矩形格网投射到地图平面上。 此种投影非常适于显示近赤道的区域。横轴方式在其它区域也很常见。

*圆锥:*如果将一个圆锥罩在地球上,然后再拆解为平面,那么就创建了一个圆锥投影。最简单、最常用的方式是圆锥顶点与两极极点在一条直线上,并且在极点附近设置光源。因此,经线以相同的角度向外延伸,纬线形成同心圆与之相交。圆锥与地球的一条或两条交线被称为标准纬线。此种投影适用于中维度地区。

*方位:* 地图平面与地球相切。设想有一个光源在另一面的无穷远处照射地球,将经线和纬线的阴影投射到地图平面上。

这里列出的基本投影也可以通过改变投射的角度而进行变化。有正轴(与地轴夹角为0),斜轴(与地轴夹角为45)或横轴(与地轴夹角为90)。

6.2.5. 投影的选择

[sec:projwahl]

投影的选择依赖于项目的需要。地图投影通常都会带来一个或几个方面的变形(面积、形状、距离、比例、方向或相关的方面),因此在选择投影之前,首先要确定哪个方面在未来的使用中有优先权。

*等角投影:*从一点出发,到所有方向的比例保持一致。经线与纬线正交。局部的比例一致,从而区域的形状保持不变。此外,线间的夹角保持不变。此类地图主要用于导航和测量。

*等积投影:*面积不变,同时面积相关的属性也保持不变。比例、形状和角度发生变形。经线与纬线不以正确的角度相交。但对小区域这无关紧要。这类投影常用于用地类型图、污染图,以及其它一些与特定区域相关的研究。

*等距投影:*地图上两点间的距离保持不变。这对于交通地图十分重要。

6.3. 地图投影的示例

[sec:projbeisp]

这里列出一些投影的示例以及它们的特征,见表[tab:azitab]、[tab:kontab]和[tab:zyltab]。更多信息请参阅和。

6.3.1. 方位投影

[sec:azimuth]

[H]

|c||p3.5cm|p3.5cm|p3.5cm|

类型 & Genomic & Stereographic & Orthographic 光源 & & & 特征 & & & 应用 & & &

6.3.2. 圆锥投影

[sec:konisch]

[H]

|l||p5.5cm|p5.5cm|

类型 & Lambert Conformal Conic & Albers Equal-Area Conic 特征 & & 应用 & &

6.3.3. 圆柱投影

[sec:zylinder]

[H]

|l||p5.5cm|p5.5cm|

类型 & Mercator & Transverse Mercator Projection 投影方式 & & 特征 & & 应用 & &

6.4. 坐标系统

[sec:koordsys]

将整个地表或某一部分投影到平面后,为了在地图上准确地定位,必须使用坐标系统。一般说来,全球、2维(且/或)3维坐标系统是有区别的。

6.4.1. 全球坐标系统

[sec:globsystem]

*经纬度:*最常用的全球坐标系统是经度、维度和高程。(它不涉及投影)参考平面由0经线和赤道确定。因此,地球从格林尼治向东、西各划分180个经度。从赤道起,向南、北也各划分90个纬度。高程从地心开始计算,但不同的定义依然有差别。单位是六十进制(度:分:秒,字母表示方向)或十进制(正/负十进制度)的。

6.4.2. 二维和三维坐标系统

[sec:koordsysteme]

为了在地图上用数字来确定某个位置,我们需要使用笛卡尔坐标,它的y轴正向指向东,x轴正向指向北。原点在各个系统中有不同的定义,GRASS通常在左下角。与地理和地心坐标不同,坐标只在一定的范围内有效(如一个经度带)。众多的坐标系统正在广泛地使用。除了原点和单位的不同,椭球和投影的不同也是很根本的。这就使得坐标转换通常只能通过复杂的运算来完成。

在GRASS中有几个模块能够用来完成这个任务,如。现在,我们简要介绍一下高斯-克吕格和UTM坐标系统。

高斯-克吕格坐标系统

这一经度带系统于1927年在德国确立。贝塞尔椭球被选作大地测量的基准面,投影方式是横轴墨卡托投影,波茨坦(potsdam)为基准面。该坐标系统由经度带组成,常见的有3和6分带。由于每个经度带都独立进行横轴墨卡托投影,所以带内的最大形变可控制在每公里12厘米以内。每带横向跨度向东西各延伸100公里,因此带间重叠约23公里。北向距离从赤道起算。为了避免出现负值,经度带东移500000米,所以已知点到中央经线的距离要增加500000。同时中央经线的经度值除以3,添加到开头作为带号。北向距离总是从赤道起算。

UTM坐标系统

UTM(Universal Transverse Mercator)系统通常基于WGS84椭球。在北纬84与南纬80之间共有60个经度带,它们是6度分带。为了避免边界的经度变形,使用了相交柱面进行投影。所以中央经线不再是等距的,其缩小比率是0.9996。在高斯-克吕格投影中,北向距离从赤道起算。与之相反,为了避免负值,UTM在南半球增加10000公里。距离中央经线的距离,与高斯-克吕格投影一样,要偏移500公里。 相应的坐标以E(东)和N(北)标明。中央经线分别为3,9,15等等。南、北极点间的区域被分成8个维度带,并以字母标示。该系统用于美国和NATO的军用地图。由于UTM坐标系统的全球通用性,德国及欧洲都在使用该坐标系统。

6.5. 在GRASS中创建不同的项目区域

[sec:otherloc]

在简要介绍了投影以后,下面该介绍在GRASS中定义项目区域(Locations)的过程。(请参阅[sec:startgrass])

要创建一个区域,必须知道下面的参数:

  1. 坐标系统 (投影、椭球和基准面)
  2. 目标区域 (工作区域的最大和最小坐标值)
  3. 栅格分辨率 (使用最多的栅格分辨率)

6.5.1. 示例:创建新的项目区域

[sec:vorgehen]

启动GRASS(请参阅[sec:startgrass])以后,点击按钮Create New Location来创建一个新的区域。这时文本模式开启(请参阅[abb:newlocation])。这等同于用 来启动GRASS。当一次会话结束的时候,启动模式会保存,并成为默认的启动模式。启动模式可以用 或来改变。

要定义一个新区域,必须确定三项内容。

*区域(LOCATION):* 将要创建的项目区域的名称。(如 Hanover)

*地图集(MAPSET):* 区域中的工作区的名称。(如 Kronsberg)

*数据库(DATABASE):* GRASS数据库的完整路径,用来存储项目数据。(如 /home/user/grassdata)

*请记住:* 地图集PERMANENT会被GRASS自动创建(请参阅[sec:grassdata]) – 即使您输入了其它的名字。

接着,按<ESC><ENTER>会进入的定义项目区域的界面。创建高斯-克吕格投影的区域在[sec:gkbeispiel]中描述。定义其它坐标系统的过程是相似的。

*建议:* 投影的值总能够通过前面定义的默认值来设置,通过。而会列出当前使用的投影和分辨率值。

6.5.2. 创建高斯-克吕格投影的项目区域

[sec:gkbeispiel]

高斯-克吕格投影是横轴墨卡托投影。即圆柱面旋转90,横向置于贝塞尔椭球上。变形发生在边界区域(最大变形每公里12厘米)。这意味着使用该投影的投影带边界与地图图纸的边界不平行。

第一个任务是从菜单中选择需要的投影系统。然而,高斯-克吕格投影并未列出,所以我们必须选择’other’。接下来的步骤如下:

对于高斯-克吕格投影: - coordinate system for location: other (D)

项目区域的简短描述: - one line description for location: e.g.Hanover

投影的更多信息:

- specify projection name: tmerc (Transverse Mercator) - specify ellipsoid name: bessel (Bessel Ellipsoid) - Do you want to specify a map datum for this location? potsdam - Enter Central Parallel [lat_0] (23N): 0N - Enter Central Meridian [lon] (96W): 9E - Enter Scale Factor at the Central Meridian: 1 - Enter False Easting: 3500000 (3 because 9E is Central Meridian) - Enter plural form of units: meters

在输入参数的过程中,有时可以使用来显示GRASS支持的投影参数。

投影参数输入以后,需要设置项目区域的边界坐标。边界设置为:North = 5801000,South = 5787000,West = 3427000,East = 3445000。地形图上的高斯-克吕格坐标值(以米为单位精确定义)会附加三个0。对于更精确的值,会用小数来表示。(请参阅[abb:projdef]).

东西和南北向分辨率(栅格单元的大小,以米为单位),在同一界面输入。这是所创建区域的标准栅格分辨率(默认值),因此,对于站点(site)和矢量数据来说这并不重要。因为在工作期间,它总能被GRASS改变。建议您仔细考虑栅格数据的分辨率,因为它对于计算和内存的需求有巨大的影响。

[H]

image5 [abb:projdef]

通常情况下,数据输入完以后按<ESC><ENTER>,您会回到开头。用”yes”确认创建地图集,因为地图集的名称早已指定。再次确认所有的数据后会退出该页面。 现在,项目区域已创建并且激活,因为GRASS提示符出现在Shell中。命令可以用来检查区域的数据。

这里是高斯-克吕格的例子:

[htbp]

projection: 99 (Transverse Mercator)
zone: 0
datum: potsdam
ellipsoid: bessel
north: 5801000
south: 5787000
west: 3427000
east: 3445000
nsres: 2.5
ewres: 2.5
rows: 5600
cols: 7200

6.5.3. 创建XY项目区域

[sec:xybeispiel]

创建一个xy区域要简单的多,因为它不需要提供投影的参数。在出现坐标系统的地方输入’A’以后

- coordinate system for location: x,y (A)

会直接出现定义项目区域边界坐标(列或宽度,行或高度)的界面。边界坐标由导入的、未配准的地图的像素范围来确定。这些信息可以用程序xv (Windows -> Image Info)来确定。起点为左下角,北向和东向值根据原始图片的行数和列数来添加。栅格分辨率只会是1。

这一过程会在配准扫描地图(请参阅[sec:geocoding])时再次讨论。

这里是XY项目区域的示例():

[H]

projection: 0 (x,y)
zone: 0
north: 8000
south: 0
west: 0
east: 8000
nsres: 1
ewres: 1
rows: 8000
cols: 8000

6.5.4. 创建UTM投影的项目区域

[sec:utmbeispiel]

UTM(Universal Transverse Mercator)项目区域的创建与高斯-克吕格类似(但使用较小的圆柱面)。这里不使用贝塞尔椭球的”Beruhrzylinder”,而使用WGS 84椭球的”Schnittzylinder”。与高斯-克吕格投影相比,参数也做了改变:

- coordinate system for location: UTM (C) - specify ellipsoid name: z.B.: wgs84 (world geodetic system 1984) - do you want to specify a map datum for this location? z.B.: wgs84 - Enter Zone 32 (UTM zone for Germany) - Is this South Hemisphere? n

接着定义项目区域的坐标。单位为米,北向值为7位数字,东向值为6位数字。

这里是UTM的例子():

[H]

projection: 1 (UTM)
zone: 32
``datum: `` potsdam
ellipsoid: wgs84
north: 6100000
south: 5880000
west: 500000
``east: `` 630000
nsres: 12.5
ewres: 12.5
rows: 17600
cols: 10400

6.5.5. 创建经纬度的项目区域

[sec:latlonbeisp]

经纬度区域包含的数据是经度和维度(南北纬0-90,东西经0-180 ),采用六十进制(度:分:秒,字母表示方向)或十进制(正/负十进制度)系统表达。输入的边界坐标和标准栅格分辨率可以是十进制的,也可以是六十进制的。

- coordinate system for location: latitude - longitude (B)

这里是经纬度的例子():

[H]

projection: 3 (Latitude-Longitude)
zone: 0
datum: unknown (default: WGS84)
ellipsoid: unknown (default: WGS84)
north: 90N
south: 90S
west: 180W
east: 180E
nsres: 0:04:48
ewres: 0:04:48
rows: 2250
cols: 4500

6.6. 删除地图和项目

[sec:loeschen]

为了不破坏GRASS数据库的内部结构,需要使用来删除地图集里的地图!没有足够的了解,不要轻易删除文件。不要在GRASS会话之外或使用Linux命令及程序来删除文件。使用一次可以删除多幅地图。

例外:要删除整个地图集和区域。为了完成这个任务,必须用退出GRASS会话。使用或文件管理器(如)来删除地图集或区域。

*注意:* 各自目录中(区域,地图集...)所有保存的数据(地图,文件...)都会被删除!

例如:会删除名为Hanover的区域及它所包含的所有地图集,不会有更多的询问,删除后也不可恢复。