../_images/logo_gdal.png ../_images/OSGeo_project.png

GDAL/OGR Quickstart

这个快速入门分为两部分:GDAL(栅格数据)和OGR(矢量数据)。

此快速入门介绍了如何:

GDAL
  • 使用gdalinfo浏览图像数据
  • 使用gdal_translate设置翻译格式
  • 用gdalwarp重新投影数据
  • 用gdal_warp或gdal_merge.py镶嵌数据
  • 使用gdatindex将形状文件构建为栅格tileindex
OGR
  • 使用ogrinfo获取有关数据的信息
  • 使用ogr2ogr将数据转换为其他格式

你只需要一个终端就可以完成这个快速启动。如果您想可视化结果,您可以在OSGeoLive上使用一个桌面GIS软件应用程序 QGIS .

了解GDAL

您可以在以下位置找到演示数据: /usr/local/share/data . 我们想看看 Natural Earth data 在这个快速启动中。我们要使用数据的副本。所以第一步是将数据复制到主目录。

cd /home/user
cp -R /usr/local/share/data/natural_earth2/ ./gdal_natural_earth

然后,您将在以下位置找到NaturalEarth栅格文件和.tfw世界文件:::

ls /home/user/gdal_natural_earth/HYP_50M_SR_W.*

小技巧

使用桌面GIS(如QGIS)打开文件,然后查看。

使用gdalinfo获取有关栅格数据的信息

gdalinfo HYP_50M_SR_W.tif
  Driver: GTiff/GeoTIFF
  Files: HYP_50M_SR_W.tif
         HYP_50M_SR_W.tfw
  Size is 10800, 5400
  Coordinate System is `'
  Origin = (-179.999999999999972,90.000000000000000)
  Pixel Size = (0.033333333333330,-0.033333333333330)
  Metadata:
    TIFFTAG_SOFTWARE=Adobe Photoshop CS3 Macintosh
    TIFFTAG_DATETIME=2009:09:19 10:13:17
    TIFFTAG_XRESOLUTION=342.85699
    TIFFTAG_YRESOLUTION=342.85699
    TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  Image Structure Metadata:
    INTERLEAVE=PIXEL
  Corner Coordinates:
  Upper Left  (-180.0000000,  90.0000000)
  Lower Left  (-180.0000000, -90.0000000)
  Upper Right ( 180.0000000,  90.0000000)
  Lower Right ( 180.0000000, -90.0000000)
  Center      (  -0.0000000,   0.0000000)
  Band 1 Block=10800x1 Type=Byte, ColorInterp=Red
  Band 2 Block=10800x1 Type=Byte, ColorInterp=Green
  Band 3 Block=10800x1 Type=Byte, ColorInterp=Blue
注:
  • 驱动程序为“gtiff/geotiff”
  • 尺寸为10800x5400
  • 字节类型的3个带。
  • 协调
  • 无坐标系

简单格式翻译

首先要了解你的司机。gdal_translate的`--formats`命令行开关可用于查看可用格式驱动程序的列表。

每种格式的报告(如果是)
  • 只读(RO),
  • 读/写(rw)或
  • read/write/update (rw+).
gdal_translate --formats

“--format”命令行开关可用于查询有关特定驱动程序的详细信息,包括创建选项和允许的数据类型。

gdalinfo --format jpeg
gdal_translate --format png

翻译

翻译是通过gdal_translate命令完成的。默认输出格式为geotiff。“-of”标志用于选择输出格式,而-co标志用于指定创建选项:

gdal_translate -of JPEG -co QUALITY=40 HYP_50M_SR_W.tif HYP_50M_SR_W.jpg

“-ot”开关可用于更改输出数据类型。

gdal_translate -ot Int16 HYP_50M_SR_W.tif HYP_50M_SR_W_Int16.tif

使用gdalinfo验证数据类型。

重新缩放

“-extize”开关可用于设置输出文件的大小。

gdal_translate -outsize 50% 50% HYP_50M_SR_W.tif  HYP_50M_SR_W_small.tif

使用gdalinfo验证大小。

“-scale”开关可用于重新缩放数据。还可以对输入和输出范围进行显式控制。gdalinfo`-mm'开关可用于查看像素最小/最大值。

让我们用`-srcwin`将图像分成两部分,它根据像素/线条位置(xoff yoff xsize ysize)制作副本。您还可以使用“-projwin”并在地理参考坐标(ulx-uly-lrx-lry)中定义角点。

gdalinfo -mm HYP_50M_SR_W.tif
gdal_translate -srcwin 0 0 5400 5400 HYP_50M_SR_W.tif  west.tif
gdal_translate -srcwin 5400 0 5400 5400 HYP_50M_SR_W.tif  east.tif

带gdatindex的栅格tileindex

可以将形状文件构建为栅格tileindex。对于每个图像,都会生成一个多边形,其中包含多边形范围的边界和文件的路径。

gdaltindex index_natural_earth.shp *st.tif

使用qgis和ogrinfo查看输出形状文件(您将在本教程后面了解更多关于ogrinfo的信息)

../_images/gdal_gdaltindex.png
ogrinfo index_natural_earth.shp index_natural_earth
INFO: Open of `index_natural_earth.shp'
    using driver `ESRI Shapefile' successful.

Layer name: index_natural_earth
Geometry: Polygon
Feature Count: 2
Extent: (-180.000000, -90.000000) - (180.000000, 90.000000)
Layer SRS WKT: (unknown)
location: String (255.0)
OGRFeature(index_natural_earth):0
  location (String) = east.tif
  POLYGON ((-0.00000000001796 90.0,179.999999999964047 90.0,179.999999999964047 -89.999999999982009,-0.00000000001796 -89.999999999982009,-0.00000000001796 90.0))

OGRFeature(index_natural_earth):1
  location (String) = west.tif
  POLYGON ((-179.999999999999972 90.0,-0.00000000001796 90.0,-0.00000000001796 -89.999999999982009,-179.999999999999972 -89.999999999982009,-179.999999999999972 90.0))

再投影

对于这个过程,我们假设hyp_50M_sr_w.tif已经用边界正确创建。正如我们以前在gdainfo中看到的,没有设置坐标系。因此,我们在第一步中指定wgs84作为图像的坐标系。

gdal_translate -a_srs WGS84 HYP_50M_SR_W.tif HYP_50M_SR_W_4326.tif

gdalwarp命令可用于重新投影图像。在这里,我们将wgs84地理图像重新投影到墨卡托投影:

gdalwarp -t_srs '+proj=merc +datum=WGS84' HYP_50M_SR_W_4326.tif mercator.tif

使用gdalinfo验证更改并查看图像。

../_images/gdal_mercator.png

这里我们重新投影到正交投影。

gdalwarp -t_srs '+proj=ortho +datum=WGS84' HYP_50M_SR_W_4326.tif ortho.tif
../_images/gdal_ortho.png

注意电线杆是如何被剪断的?这是因为极点的边缘不能被重新投影,gdalwalp并没有读取所有的数据。我们可以强制gdalwalp读取块周围的大量剩余数据,作为解决这个问题的一种方法。在Raster中阅读更多关于此教程的内容https://trac.osgeo.org/gdal/wiki/UserDocs/raserproctutorial。

图像镶嵌

gdal_Merge.py是一个python脚本,可以用于简单的拼接任务。将east.tif和west.tif拼接成一个文件:

gdal_merge.py  east.tif west.tif -o merged.tif

使用gdalwarp可以完成相同的任务。与gdal_合并相比,gdalwarp具有多种优势,但合并许多文件可能会很慢:

gdalwarp east.tif west.tif warpmerged.tif

认识OGR

cd /home/user/gdal_natural_earth/

小技巧

使用桌面GIS(如QGIS)打开形状文件,然后查看。

使用ogrinfo获取有关矢量数据的信息

ogrinfo -ro /home/user/gdal_natural_earth
INFO: Open of `/home/user/gdal_natural_earth'
      using driver `ESRI Shapefile' successful.
  1: ne_10m_populated_places (3D Point)
  2: ne_10m_geography_regions_polys (3D Polygon)
  3: ne_10m_admin_1_states_provinces_shp (3D Polygon)
  4: ne_10m_urban_areas (3D Polygon)
  5: ne_10m_geography_marine_polys (3D Polygon)
  6: ne_10m_land (3D Polygon)
  7: ne_10m_geography_regions_elevation_points (3D Point)
  8: ne_10m_admin_0_countries (3D Polygon)
  9: ne_10m_rivers_lake_centerlines (3D Line String)
  10: ne_10m_lakes (3D Polygon)
  11: ne_10m_geography_regions_points (3D Point)
  12: ne_10m_ocean (3D Polygon)

使用ogrinfo和`-so`,获取有关数据的摘要。

ogrinfo -ro -so ne_10m_admin_0_countries.shp ne_10m_admin_0_countries
INFO: Open of `ne_10m_admin_0_countries.shp'
      using driver `ESRI Shapefile' successful.

Layer name: ne_10m_admin_0_countries
Geometry: 3D Polygon
Feature Count: 254
Extent: (-180.000000, -90.000000) - (180.000000, 83.634101)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_84",6378137.0,298.257223563]],
    PRIMEM["Greenwich",0.0],
    UNIT["Degree",0.0174532925199433]]
scalerank: Integer (4.0)
featurecla: String (30.0)
labelrank: Real (16.6)
sovereignt: String (254.0)
sov_a3: String (254.0)
adm0_dif: Real (16.6)
level: Real (16.6)
type: String (254.0)
admin: String (254.0)
adm0_a3: String (254.0)
geou_dif: Real (16.6)
geounit: String (254.0)
gu_a3: String (254.0)
su_dif: Real (16.6)
subunit: String (254.0)
su_a3: String (254.0)
brk_diff: Real (16.6)
name: String (254.0)
name_long: String (254.0)
brk_a3: String (254.0)
brk_name: String (254.0)
brk_group: String (254.0)
abbrev: String (254.0)
postal: String (254.0)
formal_en: String (254.0)
formal_fr: String (254.0)
note_adm0: String (254.0)
note_brk: String (254.0)
name_sort: String (254.0)
name_alt: String (254.0)
mapcolor7: Real (16.6)
mapcolor8: Real (16.6)
mapcolor9: Real (16.6)
mapcolor13: Real (16.6)
pop_est: Real (16.6)
gdp_md_est: Real (16.6)
pop_year: Real (16.6)
lastcensus: Real (16.6)
gdp_year: Real (16.6)
economy: String (254.0)
income_grp: String (254.0)
wikipedia: Real (16.6)
fips_10: String (254.0)
iso_a2: String (254.0)
iso_a3: String (254.0)
iso_n3: String (254.0)
un_a3: String (254.0)
wb_a2: String (254.0)
wb_a3: String (254.0)
woe_id: Real (16.6)
adm0_a3_is: String (254.0)
adm0_a3_us: String (254.0)
adm0_a3_un: Real (16.6)
adm0_a3_wb: Real (16.6)
continent: String (254.0)
region_un: String (254.0)
subregion: String (254.0)
region_wb: String (254.0)
name_len: Real (16.6)
long_len: Real (16.6)
abbrev_len: Real (16.6)
tiny: Real (16.6)
homepart: Real (16.6)

如果在没有参数的情况下运行ogrinfo,您将得到关于数据的摘要,然后得到每个数据集的一个部分。

ogrinfo -ro ne_10m_admin_0_countries.shp ne_10m_admin_0_countries

您可以将结果从ogrinfo转发到grep以进行筛选,并仅获取属性country。

ogrinfo ne_10m_admin_0_countries.shp ne_10m_admin_0_countries | grep 'admin '

  admin (String) = Aruba
  admin (String) = Afghanistan
  admin (String) = Angola
  admin (String) = Anguilla
  admin (String) = Albania
  admin (String) = Aland
  admin (String) = Andorra
etc.

您可以将数据转换为其他格式。使用`--formats`获取支持的格式列表。

使用ogr2ogr在文件格式之间转换数据

可以使用ogr2ogr在文件格式之间转换简单功能数据。您可以使用`--formats`获取具有读/写信息的支持格式列表。

将国家转换为GML。

ogr2ogr --formats
ogr2ogr -f GML countries.xml ne_10m_admin_0_countries.shp

尝试的东西

以下是您要尝试的其他一些挑战:

  • 尝试gdalwarp或gdal_merge.py镶嵌数据
  • 尝试gdaladdo构建内部概述
  • qgis也使用GDAL/OGR来支持许多格式。它还提供了gdaltools插件来处理栅格数据。这个插件将gdal工具集成到qgis中。
  • 尝试ogr2ogr将矢量数据导入/导出到其他格式,如postgis。请看一下ogr2ogr提供的选项。
  • 尝试qgis插件ogr层konverter。

接下来呢?

这只是使用gdal和ogr的第一步。您可以尝试更多的功能。

GDAL项目主页

GDAL栅格教程

GDAL车间