Tutorial: Introductie GDAL
Site: | OpenCourseWare for GIS |
Cursus: | Introductie GDAL & Python |
Boek: | Tutorial: Introductie GDAL |
Afgedrukt door: | Guest user |
Datum: | vrijdag, 27 december 2024, 05:44 |
1. Introductie
Wat is GDAL?
De Geospatial Data Abstraction Library (GDAL) is een open source computersoftwarebibliotheek voor het lezen en schrijven van raster- en vector gegevensformaten. Het is nuttig voor conversies van bestandsformaten en projecties. Er zijn ook tools voor GIS analyses en ruimtelijke queries. Zie voor meer info: https://gdal.org/.
Leerdoelen
- Informatie op te vragen uit geografische data
- Geografische data te herprojecteren
- Rastereigenschappen te wijzigen
- Rasterformaten te converteren
- Vectorformaten te converteren
-
Ruimtelijke queries toe te passen op vectoren
-
Bestanden met door komma's gescheiden waarden (CSV bestanden) te converteren
- Batchconversie uit te voeren
Software
Voor deze oefeningen moet GDAL worden geïnstalleerd, bij voorkeur met behulp van het OSGeo4W-distributiepakket. Als je QGIS hebt geïnstalleerd, is de OSGEO4W-distributie er al. In de video kun je zien hoe je de LTR-versie van QGIS installeert.
Data voor de oefeningen
roads.shp
: wegen van OpenStreetMap (http://openstreetmap.org)
srtm_37_02.tif
: hoogtemodel van de Shuttle Radar
Topography Mission (SRTM) (http://www2.jpl.nasa.gov/srtm/)
gem_2011_gn1.shp
: grenzen van Nederlandse gemeented, open data van CBS en
Kadaster (http://www.cbs.nl).
Locations.csv
: tabel met lokaties van objecten.
landuse.zip
: tijdserie van landgebruiksrasters in IDRISI formaat.
2. Informatie opvragen uit GISdata
In dit hoofdstuk leer je hoe je:
- Informatie kan opvragen uit rasterdata
- Informatie kan opvragen uit vectordata
gdalinfo
en ogrinfo
commando's introduceren.2.1. Informatie opvragen uit rasterdata
Een van de gemakkelijkste en meest bruikbare commando's in GDAL is gdalinfo. Wanneer een raster als argument wordt gegeven, wordt alle relevante informatie die bekend is over het bestand opgehaald en afgedrukt. Dit is vooral handig als het rasterbestand extra taggegevens bevat, zoals het geval is bij TIF-bestanden. Bij het werken met satellietbeelden is dit een uiterst handige manier om de locatie van de beelden in lat/lon coördinaten bij te houden, evenals de projectie informatie.
1. Open de opdrachtregelinterface waar je GDAL hebt geconfigureerd. Als je QGIS hebt geïnstalleerd kan je de OSGeo4W Shell gebruiken.
2. Ga met de opdrachtprompt naar de directory waar u de trainingsgegevens hebt opgeslagen, bijvoorbeeld Z:\gdal_exercises
gdalinfo srtm_37_02.tif <ENTER>
- Wat is de grootte van het rasterbestand?
- Wat is het coördinaatsysteem?
- Wat is de EPSG code?
- Wat zijn de minimum en maximum waarden?
2.2. Informatie opvragen van vectordata
Om informatie van vectordata op te vragen gebruiken we het ogrinfo commando.
1. Voer het volgende commando uit:ogrinfo
-al roads.shp | more <ENTER>
ogrinfo
-al gem_2011_gn1.shp | more <ENTER>
2. Beantwoord de volgende vragen:
- Wat zijn de projecties van deze twee shapefiles?
- Wat zijn de EPSG codes?
roads.shp
is EPSG: 4326, wat betekent dat het in het Geografisch Coordinaat Systeem (GCS) is met coordinaten in lengte- en breedtegraden.gem_2011_gn1.shp
is de projectie EPSG: 28992. Dat is de Nederlandse projectie (Amersfoort RD/Nieuw).Meer over het ogrinfo commando kan hier gevonden worden.
3. Herprojecteren van GIS data
In dit hoofdstuk leer je hoe je:
- Rasterdata kan herprojecteren
- Vectordata kan herprojecteren
3.1. Herprojecteer rasterdata
GDAL heeft de mogelijkheid om een rastercoördinatensysteem te wijzigen met behulp van de volgende syntaxis:
gdalwarp
-t_srs EPSG:... <input> <output>
Het -t_srs
argument specificeert het doelcoördinatensysteem. Als het broncoördinatensysteem onbekend is, moet het worden opgegeven met het -s_srs
argument. EPSG:...
specificeert de EPSG-code van de projectie. <input>
and <output>
zijn respectievelijk de invoer- en uitvoergegevens.
We gaan nu een digitaal hoogtemodel van de Shuttle Radar Topography Mission (SRTM) herprojecteren. Je kan hoogtemodellen voor je eigen gebied downloaden van USGS Earth Explorer. Hier gebruiken we de data behorende bij deze cursus.
Om het hoogtemodel te herprojecteren van WGS-84 lat/lon naar Amersfoort/RD Nieuw gebruiken we dit commando:
gdalwarp -t_srs EPSG:XXXXX srtm_37_02.tif dem_rd.tif
XXXXX
met de EPSG code voor Amersfoort/RD Nieuw
(zie een van je eerdere antwoorden met ogrinfo).2. Voer dit commando uit:
gdalwarp -t_srs EPSG:28992 srtm_37_02.tif dem_rd.tif <ENTER>
3. Visualiseer het resultaat in QGIS.
Meer informatie over het gdalwarp-commando is hier te vinden.
3.2. Herprojecteer vectordata
Voor vectordata wordt het ogr2ogr commando gebruikt. De syntax is:
ogr2ogr
-t_srs EPSG:XXXXX <output> <input>
Merk op dat <output>
en <input>
in omgekeerde volgorde zijn dan bij gdalwarp! Dit verschil is algemeen bij gdal en ogr commando's.
Hier gaan we wegendata van OpenStreetMap converteren naar de Amersfoort/RD Nieuw projectie.
1. Voer het volgende commando uit:ogr2ogr
-t_srs EPSG:28992 roadsreprojected.shp roads.shp
Het commando wordt uitgevoerd (geef het wat tijd, het is een grote dataset), maar geeft een waarschuwing.
2. Wat betekent de waarschuwing?
Meer informatie over het ogr2ogr commando kan je hier vinden.
4. Converteren van GIS formaten
In dit hoofdstuk leer je hoe je:
- rasterformaten kan converteren
- vectorformaten kan converteren
4.1. Converteer rasterformaten
gdal_translate wordt gebruikt om rasterformaten te converteren. De algemene syntax is:
gdal_translate -of FORMAAT inputBestand outputBestand
We gaan nu het hoogtemodel van GeoTIFF formaat naar SAGA formaat converteren. SAGA is een GIS met z'n eigen, door GDAL ondersteunde, binaire formaat met de .sdat entensie.
1. Voer het volgende commando uit:gdal_translate -of SAGA dem_rd.tif dem_rd.sdat
Sommige formaten hebben meer argumenten nodig. PCRaster bijvoorbeeld heeft een specificatie van het datatype nodig (boolean, nominal, scalar, etc.). Laten we dezelfde data naar PCRaster formaat converteren.
2. Voer het volgende commando uit:gdal_translate -of PCRaster -ot Float32 -mo "VS_SCALAR" dem_rd.tif dem_rd.map
Om naar het PCRaster formaat the converteren moet je het datatype van het raster weten. In bovenstaand voorbeeld is het hoogtemodel een continu raster en heeft daarom het "scalar" datatype. Bij een discreet raster met klassen zou het datatype "nominal" zijn. Deze informatie is te vinden onder het rasterformaat op de GDAL website.
Data Type |
-of | -mo |
---|---|---|
Boolean | Byte | "VS_BOOLEAN" |
Nominal | Int32 | "VS_NOMINAL" |
Ordinal | Int32 | "VS_ORDINAL" |
Scalar | Float32 or Float64 |
"VS_SCALAR" |
Direction | Float32 or Float64 |
"VS_DIRECTION" |
LDD | Int32 | "VS_LDD" |
4.2. Converteer vectorformaten
Met het ogr2ogr commando kan je ook vectorformaten converteren.ogr2ogr -f <"Formaat"> <output> <input>
gem_2011_gn1.shp
converteren naar een Google KML bestand dat geopend kan worden in Google Earth.ogr2ogr -f "KML" gem.kml gem_2011_gn1.shp
-t_srs
. Je kan nog veel meer met dit commando, maar dat kunnen we helaas niet behandelen in deze beginnerscursus.4.3. Ruimtelijke queries met vectordata
Voor onze kaart van Delft willen we de volgende GIS analyses doen:- Selecteer de gemeente Delft van de gemeentenkaart en sla het op in een nieuwe shapefile;
- Gebruik de gemeentegrens van Delft om de wegen uit te knippen, zodat we alleen de wegen van Delft hebben.
ogr2ogr
-f "ESRI Shapefile" -where GM_NAAM='Delft'
-a_srs EPSG:28992 delft.shp gem_2011_gn1.shp
GM_NAAM
Delft op in een bestand met de naam delft.shp
. Het argument -a_srs EPSG:28992
gebruiken we om -f
definiëren we het uitvoerformaat.roadsreprojected.shp
vector nu knippen, zodat we alleen de wegen in de gemeente Delft over houden. We gebruiken hiervoor het -clipsrc
argument:ogr2ogr -clipsrc delft.shp roadsdelft.shp
roadsreprojected.shp
dem_rd.tif
), de geknipte wegenkaart (roadsdelft.shp
) en de gemeentegrens van Delft (
delft.shp
).
4.4. Converteer Comma Separated Values (CSV) bestanden
Soms wil je de coordinaten in een tekstbestand converteren. Bijvoordbeeld een ASCII bestand uit een spreadsheet programma. Hier gaan we de coordinaten in het CSV bestand locations.csv
herprojecteren en opslaan in een nieuw ASCII bestand met de naam locations_reprojected.csv
.
Het is goed gebruik om eerst de inhoud van een CSV bestand in een tekst editor (zoals Kladblok) te bekijken en uit te vinden waar de coordinaten staan en welk teken gebruikt wordt om de kolommen te scheiden. Dat is namelijk niet altijd een komma en hangt soms af van de taalinstellingen die het spreadsheetprogramma gebruikt tijdens het exporteren naar CSV formaat.
1. Bekijk de inhoud van locations.csv
. Je kan het type commando gebruiken, zoals je hebt geleerd in de tutorial over de opdrachtregelinterface.
<OGRVRTDataSource>
<OGRVRTLayer name="locations">
<SrcDataSource>locations.csv</SrcDataSource>
<GeometryType>wkbPoint</GeometryType>
<LayerSRS>EPSG:4326</LayerSRS>
<GeometryField encoding="PointFromColumns" x="lon" y="lat"/>
</OGRVRTLayer>
</OGRVRTDataSource>
locations.vrt
in de gdal_exercises map
.Laten we het XML bestand nader bekijken:
<OGRVRTLayer name="locations">
moet overeenkomen met<SrcDataSource>locations.csv</SrcDataSource>
<LayerSRS>EPSG:4326</LayerSRS>
moet overeenkomen met de EPSG code van de coördinaten in het CSV bestand
<GeometryField encoding="PointFromColumns" x="lon" y="lat"/>
geeft aan welke kolommen de coördinaten bevatten.
ogr2ogr
-t_srs EPSG:28992 -f "CSV" locations_reprojected.csv locations.vrt -lco
GEOMETRY=AS_XY
locations.csv
naar Amersfoort/RD Nieuw coordinaten en het resultaat wordt opgeslagen in locations_projected.csv
.ogr2ogr
-f "ESRI Shapefile" -t_srs
EPSG:28992 locations.shp locations.vrt
5. Batch conversie
Desktop GISprogramma's zijn nuttig voor GISbewerkingen, maar minder bruikbaar als we dezelfde taken moeten herhalen voor veel data. In dat geval kan je veel tijd winnen door een script te maken.
.rst
) , met voor elk jaar tussen 1990 en 2030 een rasterbestand. Onze taak is om alle rasters te converteren naar GeoTIFF (.tif
) formaat.landuse.zip
in een nieuwe directory.gdal_translate -of GTiff 01_State19900101.rst 01_State19900101.tif
for %%f in (*.rst) do (
echo %%~nf
gdal_translate -of GTiff %%f %%~nf.tif
)
rst2tif.bat
in de map met de landgebruiksrasters (vergeet niet om de bestandsextensie te veranderen als je Kladblok gebruikt, dat is een klassieke fout!).*.rst
files in de directory. %%f
is de variabele met de bestandsnaam voor ieder bestand in de directory. Met echo
tonen we iets op het scherm. Hier laten we %%~nf
zien, wat het deel van de bestandsnaam voor de punt is. Vervolgens gebruiken we het gdal_translate
commando met als uitvoerformaat GeoTIFF. Aan het eind van de regel voegen we .tif
toe als bestandsextensie.rst2tif <ENTER>
6. Conclusie
- Informatie op te vragen uit geografische data
- Geografische data te herprojecteren
- Rastereigenschappen te wijzigen
- Rasterformaten te converteren
- Vectorformaten te converteren
-
Ruimtelijke queries toe te passen op vectoren
-
Bestanden met door komma's gescheiden waarden (CSV bestanden) te converteren
- Batchconversie uit te voeren