際際滷

際際滷Share a Scribd company logo
GIS na GNU/Linux-u Darko Boto APIS IT d.o.o . GIS analitiar   CLI Geoproccesing GDAL/OGR
Sadr転aj : Uvod O radionici Povijest FLOSS GIS-a Anatomija FLOSS GIS-a to je GIS?油 Projekcije Prostorni podaci CLI geoprocesiranje - GDAL/OGR sa primjerima油 Pode邸avanje PostGIS baze  PostGIS SQL upiti sa primjerima i skriptama  Pregled alata  WEB GIS
O radionici OSGeo VM - Linux distribucija bazirana na Ubuntu-u http://wiki.osgeo.org/wiki/Live_GIS_Disc Arramagong - http://www.arramagong.com/Arramagong Predinstaliran SW iskljuivo pod pokroviteljstvom OSGeo油fondacije  (http://www.osgeo.org)
WEB arhitekture? Desktop alati? Osnove GIS-a? CLI Geoprocesiranje    u duhu konferencije Biblioteke u pozadini UI Demistifikacija geoprocessing-a Anatomija FLOSS GIS stack-a
Povijest FLOSS GIS-a   1978 - MOSS 1983 - Proj4 1995 - UMN Mapserver 1998 - GDAL/OGR 1999 - GRASS GIS 2000 - JTS Topology suite 2001 - PostGIS 2002 - Quantum GIS 2002 - GEOS  2006 - OSGEO
油
to je GIS? to je pored standardne radne okoline potrebno da bi bi sustav bio geografski tj. da bi nam omoguio podr邸ku za prostorne analize? Tri funkcionalna zahtjeva za prostorne analize (tj.GIS-a): Data driver  (GDAL - Geospatial Data Abstraction Library) GDAL/OGR = u pravljaki program za rasterske/vektorske GIS formate podataka tj. omoguava da se pristupi raznim rasterskim/vektorskim zapisima prostornih podataka. PostGIS (PostgreSQL extenzija za "geometry" tip podataka u油 bazi - Simple Feature Specification for SQL) Geometry engine  (GEOS - Geometry Engine - Open Source) GEOS  = C++ port od JTS-a Omoguava operacije nad vektorima tj. logiku operacija nad skupovima te油 osnovne topolo邸ke analize. Ukljuuje prostorne operatore i Simple Features for SQL funkcije.  Projection engine  (PROJ4 - Cartographic Projections library) PROJ4  = Podr邸ka za geografske datume, projekcije i transformacije meu njima.
Projekcije http://spatialreference.org/
Prostorni podaci Vektorski podaci: 油 Arc/Info Binary Coverage, Arc/Info .E00 (ASCII) Coverage, Atlas BNA, AutoCAD DXF, CSV, ESRI Personal GeoDatabase, ESRI Shapefile, GeoJSON, GeoRSS, GML, GMT, GPX.... Simple features (OGC- http://www.opengeospatial.org/standards/sfa)  POINT(6 10) LINESTRING(3 4,10 50,20 25) POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)) MULTIPOINT(3.5 5.6, 4.8 10.5) MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3))) GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) POINT ZM (1 1 5 60) POINT M (1 1 80) Rasterski Podaci:  Arc/Info ASCII Grid, Arc/Info Binary Grid, Bathymetry Attributed Grid, ESRI .hdr, Erdas Imagine Raw, Generic Binary (.hdr), Oracle Spatial GeoRaster,Graphics Interchange Format (.gif), GMT Compatible netCDF, GRASS Rasters, TIFF/BigTIFF/GeoTIFF (.tif), JPEG JFIF, JPEG2000, NetCDF, PNG, Netpbm (.ppm,.pgm), Rasterlite - Rasters in SQLite DB, SRTM HGT Format, Terralib, USGS ASCII DEM, OGC Web Coverage Server, WKTRaster, OGC Web Map Server.... $wget  http://slobodniatlas.mapnix.org/~dboto/DORS_workshop.tar.gz  && tar -xvzf DORS_workshop.tar.gz
GDAL = GDAL+OGR GDAL Raster  (Geospatial Data Abstraction Library) 油 Omoguava manipulaciju rasterskim podacima Frank Warmerdam 1998, Veliki broj podr転anih formata (http://www.gdal.org/formats_list.html)  Koristi ga veliki broj i FLOSS i vlasnikog SW-a油  (3D DEM Viewer, ESRI ArcGIS 9.2+, Feature Data Objects (FDO), FME, GeoServer, Google Earth, GRASS GIS, gvSIG, IDRISI, ILWIS, MapGuide, Mapnik, MapServer, MapWindow, QGIS...) Vrlo dobar programski interface - API (SWIG):油Python, Perl, Java, C#, Ruby Dobro dokumentiran.
GDAL Utilities gdalinfo  - Iscrpan pregled metapodaka gdal_translate  -Transformacija izmeu razliitih rasterskih formata sa kontrolom output-a gdalwarp  - Transformacija slike prema koordinatnom sistemu,  gdaltindex   -Izrada tile indexa za optimizaciju MapServer-a, gdal_contour  - Generiranje izolinija iz visinskih modela, gdaldem  - PerryGeo alati (1.7.0) osjenavanje, izraun nagiba i koloriziranje visinskih modela, gdal_merge.py  - Izrada mozaika od kolekcije georeferenciranih rastera, gdal2tiles.py  -Izrada TMS strukture i preglednika (OL), gdal_rasterize  - Rasterizacija vektora, gdaltransform  - Transformacija koordinata, gdal_retile.py  -Izrada piramida i retile-anje,  gdal_polygonize.py  -Generiranje poligona iz rastera, gdal_fillnodata.py  - Punjenje "nodata" regiona.
gdalinfo $gdalinfo ASTGTM_N44E015_dem.tif Driver: GTiff/GeoTIFF Files: ASTGTM_N44E015_dem.tif Size is 3601, 3601 Coordinate System is: GEOGCS[&quot;WGS 84&quot;, 油油油 DATUM[&quot;WGS_1984&quot;, 油油油油油油油 SPHEROID[&quot;WGS 84&quot;,6378137,298.2572235629972, 油油油油油油油油油油油 AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]], 油油油油油油油 AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]], 油油油 PRIMEM[&quot;Greenwich&quot;,0], 油油油 UNIT[&quot;degree&quot;,0.0174532925199433], 油油油 AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]] Origin = (14.999861111111111,45.000138888888891) Pixel Size = (0.000277777777778,-0.000277777777778) Metadata: 油 AREA_OR_POINT=Area 油 TIFFTAG_DOCUMENTNAME=created at 油 TIFFTAG_IMAGEDESCRIPTION=SILC TIFF 油 TIFFTAG_SOFTWARE=IDL 6.3, Research Systems, Inc. 油 TIFFTAG_DATETIME=2008:10:27 20:50:05 油 TIFFTAG_XRESOLUTION=100 油 TIFFTAG_YRESOLUTION=100 油 TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) Image Structure Metadata: 油 INTERLEAVE=BAND Corner Coordinates: Upper Left油 (油 14.9998611,油 45.0001389) ( 14d59'59.50&quot;E, 45d 0'0.50&quot;N) Lower Left油 (油 14.9998611,油 43.9998611) ( 14d59'59.50&quot;E, 43d59'59.50&quot;N) Upper Right (油 16.0001389,油 45.0001389) ( 16d 0'0.50&quot;E, 45d 0'0.50&quot;N) Lower Right (油 16.0001389,油 43.9998611) ( 16d 0'0.50&quot;E, 43d59'59.50&quot;N) Center油油油油油 (油 15.5000000,油 44.5000000) ( 15d30'0.00&quot;E, 44d30'0.00&quot;N) Band 1 Block=3601x1 Type=Int16, ColorInterp=Gray 油 < format zapisa  油 < veliina 油 <projekcija <EPSG kod - $ less /usr/share/proj/epsg | grep 4326 < metapodaci 油 油 油 油 油 油 油 油 < koordinate extenta < type Int16
gdal_translate $gdal_translate --formats 油 - mogunost konverzije izmeu 88 rasterskih formata sa kontrolom izlaznog formata (GeoTiff - defaultni izlazni format). ***Ukoliko fromat ne podr転ava pohranu metapodataka u samom formatu, metapodatke pohranjuje u xml datoteku. Konverzija TIFF-a u DEM $gdal_translate -of USGSDEM ASTGTM_N44E015_dem.tif translate_output1.dem 油 Konverzija sa kontrolom veliine outputa (resize) $gdal_translate -of USGSDEM -outsize 50% 50% ASTGTM_N44E015_dem.tif translate_output2.dem 油 Konverzija u 16bit-ni raster $gdal_translate -of PNG ot UInt16 ASTGTM_N44E015_dem.tif translate_output3.png 油 Konverzija u JPG + worldfile  $gdal_translate -of JPEG -scale -co worldfile=yes ASTGTM_N44E015_dem.tif translate_output3.jpg 油 Konverzija u tekstualnu xyz datoteku  $gdal2xyz.py ASTGTM_N44E015_dem.tif translate_output4.xyz 油 Jako velike mogunosti pogledati: $man gdal_translate
gdalwarp Omoguava izradu mozaika, reprojiciranje i prilagoavanje slike油 koordinatnom sustavu sa kontrolom outputa . $gdalwarp -of GTiff -co &quot;TILED=YES&quot; -srcnodata 32767 -dstnodata 32767 -t_srs &quot;+proj=tmerc +ellps=bessel +k_o=0.9999 +x_0=5500000 +lon_0=15 +units=m +towgs84=519.729316,72.371421,492.743986,5.63370593,-3.33002924,-3.10746598,10.07015476&quot; -rcs -order 3 -tr 15 15 -wt Float32 -ot Float32 -wo SAMPLE_STEPS=100 ASTGTM_N44E015_dem.tif gdalwarp_output1.tif -t_srs - ciljani prostorno referentni sustav, -tr - rezolucija, -wo SAMPLE_STEPS - gustoa uzimanja uzoraka Primjer resempliranja gdalwarp -ts 3601 3601 -r cubicspline ASTGTM_N44E015_dem.tif gdalwarp_output2.tif Primjer isijecanja dijela rastera kori邸tenjem poligona (gdalwarp + gdal_translate) #!/bin/bash SHPFILE=$1 BASE=`basename $SHPFILE .shp` EXTENT=`ogrinfo -so $SHPFILE $BASE | grep Extent | sed 's/Extent: //g' | sed 's/(//g' | sed 's/)//g' | sed 's/ - /, /g'` EXTENT=`echo $EXTENT | awk -F ',' '{print $1 &quot; &quot; $4 &quot; &quot; $3 &quot; &quot; $2}'` echo &quot;Clipping to $EXTENT&quot; RASTERFILE=$2 gdal_translate  -projwin $EXTENT -of GTiff $RASTERFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tif gdalwarp  -co COMPRESS=DEFLATE -co TILED=YES -of GTiff -r lanczos -cutline $SHPFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tif /tmp/`basename $RASTERFILE .tif`_shpclip.tif
kolorizacija rastera #! /usr/bin/env python from osgeo import gdal import sys import numpy import os.path gdal.TermProgress = gdal.TermProgress_nocb src_file = sys.argv[1] dst_file = sys.argv[2] out_bands = 3 def MakeColor(z_value): 油  '''LUT for color ramp. Keys are pixel values, hash values are RGB triplets.''' 油 color_dict = { 油油油 0:[102,0,255], 油油 25:[20,82,255], 油油 50:[0,194,224], 油油 75:[0,255,122], 油 100:[41,255,0], 油 125:[204,255,0], 油 150:[245,194,0], 油 175:[224,118,0], 油 200:[168,46,0], 油 225:[105,0,0], 油 250:[64,0,0], 油 255:[0,0,0]} 油 key_list = color_dict.keys() 油 key_list.sort() 油 while len(key_list) > 0: 油油油 last_val = key_list[-1] 油油油 if z_value >= last_val: 油油油油油 return color_dict[last_val] 油油油 else: 油油油油油 key_list.remove(last_val) # Print some info print &quot;Creating %s&quot; % (dst_file) # Open source file src_ds = gdal.Open( src_file ) src_band = src_ds.GetRasterBand(1) # create destination file dst_driver = gdal.GetDriverByName('GTiff') dst_ds = dst_driver.Create(dst_file, src_ds.RasterXSize, src_ds.RasterYSize, out_bands, gdal.GDT_Byte) # create output bands band1 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) band2 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) band3 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) # set the projection and georeferencing info dst_ds.SetProjection( src_ds.GetProjection() ) dst_ds.SetGeoTransform( src_ds.GetGeoTransform() ) # read the source file gdal.TermProgress( 0.0 ) for iY in range(src_ds.RasterYSize): 油 src_data = /slideshow/gdalprocessing/6125950/src_band.ReadAsArray(0,iY,src_ds.RasterXSize,1) 油 col_values = src_data[0]油油油油油油油油油油油油油油油油油油油油油油油油  # array of z_values, one per row in source data 油 for iX in range(src_ds.RasterXSize): 油油油 z_value = col_values[iX] 油油油 # print z_value油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油  # uncomment to see what value breaks color ramp 油油油 [R,G,B] = MakeColor(z_value) 油油油 band1[iY][iX] = R 油油油 band2[iY][iX] = G 油油油 band3[iY][iX] = B 油 gdal.TermProgress( (iY+1.0) / src_ds.RasterYSize ) # write each band out dst_ds.GetRasterBand(1).WriteArray(band1) dst_ds.GetRasterBand(2).WriteArray(band2) dst_ds.GetRasterBand(3).WriteArray(band3) dst_ds = None 油 #END script  Ili jednostavnije: 油 $gdaldem color-relief ASTGTM_N44E015_dem.tif ramp.txt color.tif 油 gdje je ramp.txt  3500 white 2500 235:220:175 50% 190 185 135 700 240 250 150 0 50 180 50 nv 0 0 0 0  100%油 255 255 255 75%油油 235 220 175 50%油油 190 185 135 25%油油 240 250 150 0%油油油 50油 180油 50 nv油油油 0油油 0油油 0
gdal_contour Omoguava generiranje izo linija iz rastera sa visinskim podacima (SRTM, ASTER) 油 $gdal_contour -i 10 -snodata 32767 -a height ASTGTM_N44E015_dem.tif gdalwarp_output1.tif Primjer generiranja izo linija iz SRTM .hgt podataka shell skriptom: # povlacenje SRTM podataka (.hgt binary grid) sa NASA ftp servera. Lista za HR je u srtmhr_list.txt cat srtmhr_list.txt | sed 's!^!ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/!' | xargs -i wget -nc {} # apsolutna putanja do direktorija sa podacima DATA_PATH=&quot;&quot; # ulazi u direktorij sa podacima cd $DATA_PATH # za油 svaki *hgt.zip izvrsava srtm_generate_hdr.sh  http://mpa.itc.it/rs/srtm/srtm_generate_hdr.sh for X in *.hgt.zip do # skripta od .hgt fileova generira BIL headere i priprema podatke za GDAL 油油油油油油油  # GDAL nakon toga radi konverziju u GeoTIFF te napravi .prj za shp 油油油 yes | $DATA_PATH/srtm_generate_hdr.sh $X done # generiranje izohipsi iz pripremljenih tifova for X in $DATA_PATH/*.tif do 油油油 echo $X # izvlacenje izohipsi po visinskim podacima za 10, 50 i 100 m i spremanje u ESRI shape file (.shp) 油油油  gdal_contour -i 10 -snodata 32767 -a height $X ${X%%.tif}c10.shp 油油油 gdal_contour -i 50 -snodata 32767 -a height $X ${X%%.tif}c50.shp 油油油 gdal_contour -i 100 -snodata 32767 -a height $X ${X%%.tif}c100.shp done
Jo邸 primjera kori邸tenja GDAL utilitija $gdaltindex index_tiled.shp *_tiled.tif  (izrada indeksa za mapserver) $geotifcp n40e015.tif test_dboto.tif  (kopiranje metapodataka)  $gdalbuildvrt mosaic.vrt *hgt油  (izgradnja mozaika) $gdal_translate mosaic.vrt mosaic.tif  (kreiranje slike iz virtualnog kataloga) $gdal_translate -srcwin 0 0 700 700 -of jpeg p2.tif out.jpg  (Rezanje) gdal_rasterize -b 1 -i -burn -32678 -l croatia croatia.shp ASTGTM_N44E015_dem.tif  (rezanje rastera koti邸tenjem vektora) gdaldem color-relief clip.tif ramp.txt colored.tif油  (kolorizacija visinskog modela) gdaldem slope clip slope.tif -s 111120  (vizualizacija nagiba) gdaldem hillshade clip.tif hillshade.tif -z 5 -s 111120  (sjenanje visina hillshadeing)
Zadatak - primjer analize  Koristei GDAL i digitalni model reljefa izraunajte podruje udara plimnog vala visine 30 m na podruju Starigrada. Kao rezultat proizvesti vektorski poligonski sloj ugro転enog podruja. podaci: ASTGTM_N44E015_dem.tif ?
Rje邸enje Prvo napraviti color schemu za bojanje visina izmeu 1m i 30 m i pohraniti kao colors.txt: 1 255,0,0 30 0,0,0 nakon toga sa gdaldem pobojati ciljano podruje : $gdaldem color-relief ASTGTM_N44E015_dem.tif colors.txt crveno_podrucje.tif sa gdal_polygonize napraviti vektorizaciju ugro転enog podruja: $gdal_polygonize.py crveno_podrucje.tif -b 1 -f &quot;ESRI Shapefile&quot; odsjecak.shp gdje je kao band argument postavljena vrijednost 1 (tj. red od r,g,b) ta daaaa... i dobili smo poligone u shapefileu ali nisu isfiltrirani poligoni ostalih podruja koja nisu ugro転ena. Zadaa:  sa ogrinfo pogledajte atribute i njihove vrijednosti te sa OGR-om izdvojite samo ugro転eno podruje u novi shapefile. Primjetiti kako analiza nije u obzir uzela postojanje otoka i njihov utjecaj na ubla転avanje plimnog vala... Razmisliti o tome kako uzeti u obzir utjecaj otoka.
油
OGR to je GDAL za rastere to je OGR za vektore 油 Veliki broj podr転anih formata (http://www.gdal.org/ogr/ogr_formats.html) 油 Velike mogunosti manipulacije nad podacima (Load u Postgis, SQL query-ji, append, update i sl.) te mogunost geoprocessing-a nad vektorima.  ogrinfo  - Pregled informacija o podr転anim vektorskim podacima ogr2ogr  - Konverzije izmeu formata sa kontrolom izlaza  ogrtindex  - Izrada indeksa 油 油
ogrinfo $ogrinfo -al region_borders.shp | less $ogrinfo -ro region_borders.shp -sql &quot;SELECT * FROM \ region_borders WHERE CNTRYNAME='Croatia'&quot; | less INFO: Open of `region_borders.shp' 油油油油油 using driver `ESRI Shapefile' successful. Layer name: region_borders Geometry: Polygon Feature Count: 7 Extent: (6.625400, 35.491300) - (23.006200, 49.020300) Layer SRS WKT: GEOGCS[&quot;GCS_WGS_1984&quot;, 油油油 DATUM[&quot;WGS_1984&quot;, 油油油油油油油 SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]], 油油油 PRIMEM[&quot;Greenwich&quot;,0.0], 油油油 UNIT[&quot;Degree&quot;,0.0174532925199433]] ObjectID: Integer (9.0) NATION: String (3.0) CNTRYNAME: String (25.0) CNTRYABB: String (3.0) SQKM: Real (19.5) COLORMAP: Real (11.0) OGRFeature(region_borders):0  < ime datoteke <tip geometrije < broj featurea < prostroni kvadrat (extent)  < projekcija < ime/tip atribunog polja
ogr2ogr $ogr2ogr --help   (Mala pomo za pregled mogunosti alata)   $ogr2ogr -f &quot;KML&quot; region_borders.kml region_borders.shp   (Konverzija .shp datoteke u google .kml) 油 $ogr2ogr -f &quot;PostgreSQL&quot; PG:&quot;host=localhost user=user dbname=user password=user&quot; region_borders.kml -nln region_borders   (Punjenje .kml datoteke u PostGIS baz)  $ogr2ogr -f &quot;ESRI Shapefile&quot; pg_export.shp PG:&quot;host=localhost user=user dbname=user password=user&quot; &quot;region_borders&quot;   (Export prostorne tablice u .shp datoteku) 油  $ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:31275 rb_31275.shp region_borders.shp  (Konverzija prostornog referentnog sustava) 油 $ogr2ogr -update -append -f PostgreSQL PG:dbname=user region_borders.shp  (Update i append iz .shp datoteke u PostGIS bazu)
ogr2ogr - merge (sh vs py) Merge shp datoteka - Shell  #!/bin/bash mkdir merged find . -name 'contours*' -exec mv '{}' merged \; for i in $(ls *.shp);油 油油 油 do ogr2ogr -f 'ESRI Shapefile' -update -append merged $i -nln contours_merge done 油 Merge shp datoteka - Python 油 import sys import glob from osgeo import ogr outfile = &quot;merge.shp&quot; file_list = glob.glob(&quot;*.shp&quot;) # CREATE OUTPUT FILE out_driver = ogr.GetDriverByName( 'ESRI Shapefile' ) out_ds = out_driver.CreateDataSource(outfile) out_srs = None out_layer = out_ds.CreateLayer(&quot;trans&quot;, out_srs, ogr.wkbLineString) fd = ogr.FieldDefn('name', ogr.OFTString) out_layer.CreateField(fd) fd = ogr.FieldDefn('height', ogr.OFTInteger) out_layer.CreateField(fd) # READ EACH INPUT FILE AND WRITE FIELDS TO NEW FILE for shapefile in file_list: 油 print shapefile 油 [filename, extension] = shapefile.split('.') 油 in_drv = ogr.GetDriverByName( 'ESRI Shapefile' ) 油 in_ds = in_drv.Open(shapefile) 油 in_layer = in_ds.GetLayer(0) 油 in_feature = in_layer.GetNextFeature() 油 height_field = in_feature.GetFieldIndex('height') 油 counter = 1 油 print height_field while in_feature is not None and (height_field != -1): 油油油 name = filename + &quot;_&quot; + `counter` 油油油 #print kV_field 油油油 #print in_feature.GetField 油油油 height = in_feature.GetField(height_field) 油油油 out_feat = ogr.Feature(out_layer.GetLayerDefn()) 油油油 out_feat.SetField('name', name) 油油油 out_feat.SetField('height', height) 油油油 out_feat.SetGeometry(in_feature.GetGeometryRef().Clone()) 油油油 out_layer.CreateFeature(out_feat) 油油油 out_layer.SyncToDisk() 油油油 out_feat.Destroy() 油油油 in_feature.Destroy() 油油油 in_feature = in_layer.GetNextFeature() 油油油 counter += 1 out_ds.Destroy()
油
PostGIS Podr邸ka za prostorne podatke u relacijskoj PostgreSQL bazi, Pod GPL licencom od 2001. - Refractions Research, Implementacija OGC Simple Feature For SQL standarda, Mogunost R/W preko svih FOSS GIS desktop alata (QGIS, UDIG, JUMP), itanje podataka od strane svih renderera (MapServer, GeoServer, Mapnik) Testiran sa 600 000 000 featurea sa brzinom itanja 14 000 feature-a u sekundi Izvrstan vector geoprocessing alat sa vi邸e od 350 funkcija  (koristi GEOS za topolo邸ke analize)油 0 (nula) KN  Podr転ava:  geometrijske tipove toaka, linija, poligona, multitoaka, multilinija, multipoligona i geometrijskih kolekcija prostorne operatore za odreivanje prostornih mjera kao 邸to su povr邸ina, du転ina i opseg prostorno indeksiranje podataka (R-stablo + GiST) koji ubrzavaju upite nad prostornim podacima油 油 Dodatni Alati: psql (CLI suelje prema PostgreSQLPostGIS bazi) shp2pgsql - loader pgsql2shp - exporter 油 Instalacija: $sudo apt-get install postgresql postgresql-client postgresql-contrib pgadmin3 $sudo apt-get install postgresql-8.4-postgis postgis Instalacija ostalih alata i biblioteka $ sudo apt-get install gdal-bin proj libgeos2c2a油 grass qgis qgis-plugin-grass mapserver-bin cgi-mapserver python-qt4 python-sip4 python-gdal python-mapscript gmt gmt-coastline-dat
Pode邸avanje baze Kreiranje baze i template-a (preporuujem) $ sudo su postgres $ createdb gistemplate Kreiranje PL/PSQL $ createlang plpgsql gistemplate Load funkcija i SRS tablice $ psql -d gistemplate -f /usr/share/postgresql-8.4-postgis/lwpostgis.sql $ psql -d gistemplate -f /usr/share/postgresql-8.4-postgis/spatial_ref_sys.sql Provjera $psql -d gistemplate -c &quot;SELECT postgis_full_version();&quot; Ulazimo u bazu油 $ psql  postgres=# Kreiranje grupe, dodjela role i grant postgres=# CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE; postgres=# CREATE ROLE gis LOGIN PASSWORD 'gisuser' NOINHERIT; postgres=# GRANT gisgroup TO gis; postgres=# \q
Dodjela ovlasti na prostorne tablice gis user-u i kreiranje sheme $ psql -d gistemplate gistemplate=# ALTER TABLE geometry_columns OWNER TO gis; gistemplate=# ALTER TABLE spatial_ref_sys OWNER TO gis; gistemplate=# CREATE SCHEMA gis_schema AUTHORIZATION gis; gistemplate=# \q Kreiranje baze rv_gis i priprema za load podataka $ createdb -T gistemplate -O gis rv_gis Dodavanje google projekcije u postgis INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS[&quot;WGS 84&quot;, DATUM[&quot;World Geodetic System  1984&quot;, SPHEROID[&quot;WGS 84&quot;, 6378137.0, 298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]], AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]], NIT[&quot;degree&quot;,0.017453292519943295], AXIS[&quot;Longitude&quot;, EAST], AXIS[&quot;Latitude&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]], PROJECTION[&quot;Mercator_1SP&quot;],PARAMETER[&quot;semi_minor&quot;, 6378137.0],  PARAMETER[&quot;latitude_of_origin&quot;,0.0], PARAMETER[&quot;central_meridian&quot;, 0.0], PARAMETER[&quot;scale_factor&quot;,1.0], PARAMETER[&quot;false_easting&quot;, 0.0], PARAMETER[&quot;false_northing&quot;, 0.0],UNIT[&quot;m&quot;, 1.0], AXIS[&quot;x&quot;, EAST], AXIS[&quot;y&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;900913&quot;]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m  +nadgrids=@null +no_defs'); Primjer kreiranja view-a za MapServer CREATE VIEW gradovi AS SELECT * FROM mjesta WHERE type LIKE 'Small' ORDER BY gid;
Load shp2pgsql - data loader (mo転e se koristiti i OGR sa podr邸kom za vei broj formata) $shp2pgsql   s <epsgcode> <ShapeFileName> <TableName> <dbName> > <filename> $psql -d <dbname> -f <filename> 油 $pgsql2shp -f croatia -h localhot -u user -P user gis &quot;SELECT name, wkb_geometry FROM region_borders WHERE name = 'CROATIA'&quot; Primjer $shp2pgsql -W &quot;ISO-8859-1&quot; -I -s 4326 region_borders gis_schema.region_borders | psql -d gis Napomena: Za na邸e dijakritike znakove -W &quot;WINDOWS-1250&quot; EPSG referenca: $ less /usr/share/proj/epsg | grep 31275 <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs油 <> Export podataka iz baze pgsql2shp -f imefilea imebaze gis_schema.region_borders Prostorni upit za extent SELECT EXTENT(the_geom) FROM region_borders; Kreiranje prostorog indexa GIST (auto vacum i analyze) CREATE INDEX <indexname> ON <tablename> USING GIST ( <geometrycolumn> GIST_GEOMETRY_OPS ); Promjena tipa podatka na stupcu  alter TABLE gis_schema.contours50 ALTER COLUMN height TYPE integer;
Primjeri:  油 Kreiranje prostorne kolone - AddGeometryColumn SELECT AddGeometryColumn('public', 'region_borders', 'geom', 4326, 'POINT', 2); Kreiranje prostornog indeksa - GIST CREATE INDEX idx_region_borders_geom ON region_borders USING gist(geom);  Izraunavanje povr邸ine - ST_Area SELECT neigh_name, ST_Area(geom) FROM region_borders ORDER BY ST_Area(geom) limit 1; 油 Pronai sve objekte 100 meters od toke POINT(1000 1000) - ST_DWithin SELECT * FROM geotable WHERE ST_DWithin(geocolumn,   POINT(1000 1000)  , 100.0); select zup_naziv from gis_schema.zupanija where ST_DWithin(the_geom, 'POINT(5538942 5007927)',100.0); Ukupna du転ina ceste izra転ena u kilometrima - ST_Length SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM roads; Selecija poligona koje se nalaze unutar drugog poligona ST_Within CREATE TABLE gis_schema.corine_cro AS SELECT gis_schema.corine.* FROM gis_schema.corine, gis_schema.granice WHERE ST_WITHIN (gis_schema.corine.the_geom, gis_schema.granice.the_geom) AND gis_schema.granice.CNTRYNAME = 'Croatia';  Simplifikacija - ST_Simplify CREATE TABLE gis_schema.border_genSimplify AS SELECT ST_SIMPLIFY(gis_schema.border_gen.the_geom,2) FROM gis_schema.border_gen; ST funkcije
Pregled alata Desktop: QGIS (C++/Python) UDIG (Java) JUMP (Java) MapWindow (C#) TatukGIS,ILWIS, gvSIG Vrlo esto ali i uspje邸no se koriste kao framework za razvoj alata prema specifinim zahtjevima. Jump ima vi邸e FOSS forkova ovisno o podruju namjene. Pokriva 80% GIS korisnika. Upravljanje podacima: PostGIS MySQL Spatial SpatialLite GDAL/OGR FDO Vrlo solidno pokriven sloj. Spatial implementacije u skladu sa standardima na svim esto kori邸tenim slobodnim bazama i pokrivena veina formata zapisa GIS podataka.
WEB GIS Map rendereri: MapServer GeoServer Mapnik MapGuide OS etiri jako dobra renderera karata. Veinom podr転avaju osnovne OGC standarde. Definitivno najjai dio FOSS GIS stack-a.  Web klijenti: OpenLayers pMapper GeoMayas MapFish Svi osim pMapper-a iz nove generacije web klijenata. Naje邸e se koriste kao framewok za razvoj web aplikacija.
油
PITANJA? kontakt: [email_address] [email_address]

More Related Content

Viewers also liked (7)

GeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management SystemGeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management System
MinPa Lee
螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
 螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ 螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
HaNJiN Lee
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
MinPa Lee
ろGIS襯 覯蠍磯 螻糾覿螻 螳
ろGIS襯  覯蠍磯 螻糾覿螻 螳ろGIS襯  覯蠍磯 螻糾覿螻 螳
ろGIS襯 覯蠍磯 螻糾覿螻 螳
MinPa Lee
Java 蠍磯 ろ GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
Java 蠍磯 ろ  GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦Java 蠍磯 ろ  GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
Java 蠍磯 ろ GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
MinPa Lee
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
MinPa Lee
ろGIS 螳襦 螻殊 - OpenLayers 蠍一
ろGIS 螳襦 螻殊 - OpenLayers 蠍一ろGIS 螳襦 螻殊 - OpenLayers 蠍一
ろGIS 螳襦 螻殊 - OpenLayers 蠍一
HaNJiN Lee
GeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management SystemGeoNode - Open Source Geospatial Content Management System
GeoNode - Open Source Geospatial Content Management System
MinPa Lee
螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
 螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ 螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
螻糾覲 蟇一 - OpenLayers 螻蠍 蠍磯 危 覦 れ
HaNJiN Lee
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer[FOSS4G Korea 2016] Workshop - Advanced GeoServer
[FOSS4G Korea 2016] Workshop - Advanced GeoServer
MinPa Lee
ろGIS襯 覯蠍磯 螻糾覿螻 螳
ろGIS襯  覯蠍磯 螻糾覿螻 螳ろGIS襯  覯蠍磯 螻糾覿螻 螳
ろGIS襯 覯蠍磯 螻糾覿螻 螳
MinPa Lee
Java 蠍磯 ろ GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
Java 蠍磯 ろ  GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦Java 蠍磯 ろ  GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
Java 蠍磯 ろ GIS襯 讌 蟲 螻糾 DBMS 殊企 螳覦
MinPa Lee
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
[86 Open Technet]OGC 譴 蠍磯 螻糾襭 覿螻 螳 蠍一 螳覦
MinPa Lee
ろGIS 螳襦 螻殊 - OpenLayers 蠍一
ろGIS 螳襦 螻殊 - OpenLayers 蠍一ろGIS 螳襦 螻殊 - OpenLayers 蠍一
ろGIS 螳襦 螻殊 - OpenLayers 蠍一
HaNJiN Lee

CLI Geoprocessing GDAL/OGR

  • 1. GIS na GNU/Linux-u Darko Boto APIS IT d.o.o . GIS analitiar CLI Geoproccesing GDAL/OGR
  • 2. Sadr転aj : Uvod O radionici Povijest FLOSS GIS-a Anatomija FLOSS GIS-a to je GIS?油 Projekcije Prostorni podaci CLI geoprocesiranje - GDAL/OGR sa primjerima油 Pode邸avanje PostGIS baze PostGIS SQL upiti sa primjerima i skriptama Pregled alata WEB GIS
  • 3. O radionici OSGeo VM - Linux distribucija bazirana na Ubuntu-u http://wiki.osgeo.org/wiki/Live_GIS_Disc Arramagong - http://www.arramagong.com/Arramagong Predinstaliran SW iskljuivo pod pokroviteljstvom OSGeo油fondacije (http://www.osgeo.org)
  • 4. WEB arhitekture? Desktop alati? Osnove GIS-a? CLI Geoprocesiranje u duhu konferencije Biblioteke u pozadini UI Demistifikacija geoprocessing-a Anatomija FLOSS GIS stack-a
  • 5. Povijest FLOSS GIS-a 1978 - MOSS 1983 - Proj4 1995 - UMN Mapserver 1998 - GDAL/OGR 1999 - GRASS GIS 2000 - JTS Topology suite 2001 - PostGIS 2002 - Quantum GIS 2002 - GEOS 2006 - OSGEO
  • 6.
  • 7. to je GIS? to je pored standardne radne okoline potrebno da bi bi sustav bio geografski tj. da bi nam omoguio podr邸ku za prostorne analize? Tri funkcionalna zahtjeva za prostorne analize (tj.GIS-a): Data driver (GDAL - Geospatial Data Abstraction Library) GDAL/OGR = u pravljaki program za rasterske/vektorske GIS formate podataka tj. omoguava da se pristupi raznim rasterskim/vektorskim zapisima prostornih podataka. PostGIS (PostgreSQL extenzija za &quot;geometry&quot; tip podataka u油 bazi - Simple Feature Specification for SQL) Geometry engine (GEOS - Geometry Engine - Open Source) GEOS = C++ port od JTS-a Omoguava operacije nad vektorima tj. logiku operacija nad skupovima te油 osnovne topolo邸ke analize. Ukljuuje prostorne operatore i Simple Features for SQL funkcije. Projection engine (PROJ4 - Cartographic Projections library) PROJ4 = Podr邸ka za geografske datume, projekcije i transformacije meu njima.
  • 9. Prostorni podaci Vektorski podaci: 油 Arc/Info Binary Coverage, Arc/Info .E00 (ASCII) Coverage, Atlas BNA, AutoCAD DXF, CSV, ESRI Personal GeoDatabase, ESRI Shapefile, GeoJSON, GeoRSS, GML, GMT, GPX.... Simple features (OGC- http://www.opengeospatial.org/standards/sfa) POINT(6 10) LINESTRING(3 4,10 50,20 25) POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)) MULTIPOINT(3.5 5.6, 4.8 10.5) MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3))) GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) POINT ZM (1 1 5 60) POINT M (1 1 80) Rasterski Podaci: Arc/Info ASCII Grid, Arc/Info Binary Grid, Bathymetry Attributed Grid, ESRI .hdr, Erdas Imagine Raw, Generic Binary (.hdr), Oracle Spatial GeoRaster,Graphics Interchange Format (.gif), GMT Compatible netCDF, GRASS Rasters, TIFF/BigTIFF/GeoTIFF (.tif), JPEG JFIF, JPEG2000, NetCDF, PNG, Netpbm (.ppm,.pgm), Rasterlite - Rasters in SQLite DB, SRTM HGT Format, Terralib, USGS ASCII DEM, OGC Web Coverage Server, WKTRaster, OGC Web Map Server.... $wget http://slobodniatlas.mapnix.org/~dboto/DORS_workshop.tar.gz && tar -xvzf DORS_workshop.tar.gz
  • 10. GDAL = GDAL+OGR GDAL Raster (Geospatial Data Abstraction Library) 油 Omoguava manipulaciju rasterskim podacima Frank Warmerdam 1998, Veliki broj podr転anih formata (http://www.gdal.org/formats_list.html) Koristi ga veliki broj i FLOSS i vlasnikog SW-a油 (3D DEM Viewer, ESRI ArcGIS 9.2+, Feature Data Objects (FDO), FME, GeoServer, Google Earth, GRASS GIS, gvSIG, IDRISI, ILWIS, MapGuide, Mapnik, MapServer, MapWindow, QGIS...) Vrlo dobar programski interface - API (SWIG):油Python, Perl, Java, C#, Ruby Dobro dokumentiran.
  • 11. GDAL Utilities gdalinfo - Iscrpan pregled metapodaka gdal_translate -Transformacija izmeu razliitih rasterskih formata sa kontrolom output-a gdalwarp - Transformacija slike prema koordinatnom sistemu, gdaltindex -Izrada tile indexa za optimizaciju MapServer-a, gdal_contour - Generiranje izolinija iz visinskih modela, gdaldem - PerryGeo alati (1.7.0) osjenavanje, izraun nagiba i koloriziranje visinskih modela, gdal_merge.py - Izrada mozaika od kolekcije georeferenciranih rastera, gdal2tiles.py -Izrada TMS strukture i preglednika (OL), gdal_rasterize - Rasterizacija vektora, gdaltransform - Transformacija koordinata, gdal_retile.py -Izrada piramida i retile-anje, gdal_polygonize.py -Generiranje poligona iz rastera, gdal_fillnodata.py - Punjenje &quot;nodata&quot; regiona.
  • 12. gdalinfo $gdalinfo ASTGTM_N44E015_dem.tif Driver: GTiff/GeoTIFF Files: ASTGTM_N44E015_dem.tif Size is 3601, 3601 Coordinate System is: GEOGCS[&quot;WGS 84&quot;, 油油油 DATUM[&quot;WGS_1984&quot;, 油油油油油油油 SPHEROID[&quot;WGS 84&quot;,6378137,298.2572235629972, 油油油油油油油油油油油 AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]], 油油油油油油油 AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]], 油油油 PRIMEM[&quot;Greenwich&quot;,0], 油油油 UNIT[&quot;degree&quot;,0.0174532925199433], 油油油 AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]] Origin = (14.999861111111111,45.000138888888891) Pixel Size = (0.000277777777778,-0.000277777777778) Metadata: 油 AREA_OR_POINT=Area 油 TIFFTAG_DOCUMENTNAME=created at 油 TIFFTAG_IMAGEDESCRIPTION=SILC TIFF 油 TIFFTAG_SOFTWARE=IDL 6.3, Research Systems, Inc. 油 TIFFTAG_DATETIME=2008:10:27 20:50:05 油 TIFFTAG_XRESOLUTION=100 油 TIFFTAG_YRESOLUTION=100 油 TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch) Image Structure Metadata: 油 INTERLEAVE=BAND Corner Coordinates: Upper Left油 (油 14.9998611,油 45.0001389) ( 14d59'59.50&quot;E, 45d 0'0.50&quot;N) Lower Left油 (油 14.9998611,油 43.9998611) ( 14d59'59.50&quot;E, 43d59'59.50&quot;N) Upper Right (油 16.0001389,油 45.0001389) ( 16d 0'0.50&quot;E, 45d 0'0.50&quot;N) Lower Right (油 16.0001389,油 43.9998611) ( 16d 0'0.50&quot;E, 43d59'59.50&quot;N) Center油油油油油 (油 15.5000000,油 44.5000000) ( 15d30'0.00&quot;E, 44d30'0.00&quot;N) Band 1 Block=3601x1 Type=Int16, ColorInterp=Gray 油 < format zapisa 油 < veliina 油 <projekcija <EPSG kod - $ less /usr/share/proj/epsg | grep 4326 < metapodaci 油 油 油 油 油 油 油 油 < koordinate extenta < type Int16
  • 13. gdal_translate $gdal_translate --formats 油 - mogunost konverzije izmeu 88 rasterskih formata sa kontrolom izlaznog formata (GeoTiff - defaultni izlazni format). ***Ukoliko fromat ne podr転ava pohranu metapodataka u samom formatu, metapodatke pohranjuje u xml datoteku. Konverzija TIFF-a u DEM $gdal_translate -of USGSDEM ASTGTM_N44E015_dem.tif translate_output1.dem 油 Konverzija sa kontrolom veliine outputa (resize) $gdal_translate -of USGSDEM -outsize 50% 50% ASTGTM_N44E015_dem.tif translate_output2.dem 油 Konverzija u 16bit-ni raster $gdal_translate -of PNG ot UInt16 ASTGTM_N44E015_dem.tif translate_output3.png 油 Konverzija u JPG + worldfile $gdal_translate -of JPEG -scale -co worldfile=yes ASTGTM_N44E015_dem.tif translate_output3.jpg 油 Konverzija u tekstualnu xyz datoteku $gdal2xyz.py ASTGTM_N44E015_dem.tif translate_output4.xyz 油 Jako velike mogunosti pogledati: $man gdal_translate
  • 14. gdalwarp Omoguava izradu mozaika, reprojiciranje i prilagoavanje slike油 koordinatnom sustavu sa kontrolom outputa . $gdalwarp -of GTiff -co &quot;TILED=YES&quot; -srcnodata 32767 -dstnodata 32767 -t_srs &quot;+proj=tmerc +ellps=bessel +k_o=0.9999 +x_0=5500000 +lon_0=15 +units=m +towgs84=519.729316,72.371421,492.743986,5.63370593,-3.33002924,-3.10746598,10.07015476&quot; -rcs -order 3 -tr 15 15 -wt Float32 -ot Float32 -wo SAMPLE_STEPS=100 ASTGTM_N44E015_dem.tif gdalwarp_output1.tif -t_srs - ciljani prostorno referentni sustav, -tr - rezolucija, -wo SAMPLE_STEPS - gustoa uzimanja uzoraka Primjer resempliranja gdalwarp -ts 3601 3601 -r cubicspline ASTGTM_N44E015_dem.tif gdalwarp_output2.tif Primjer isijecanja dijela rastera kori邸tenjem poligona (gdalwarp + gdal_translate) #!/bin/bash SHPFILE=$1 BASE=`basename $SHPFILE .shp` EXTENT=`ogrinfo -so $SHPFILE $BASE | grep Extent | sed 's/Extent: //g' | sed 's/(//g' | sed 's/)//g' | sed 's/ - /, /g'` EXTENT=`echo $EXTENT | awk -F ',' '{print $1 &quot; &quot; $4 &quot; &quot; $3 &quot; &quot; $2}'` echo &quot;Clipping to $EXTENT&quot; RASTERFILE=$2 gdal_translate -projwin $EXTENT -of GTiff $RASTERFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tif gdalwarp -co COMPRESS=DEFLATE -co TILED=YES -of GTiff -r lanczos -cutline $SHPFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tif /tmp/`basename $RASTERFILE .tif`_shpclip.tif
  • 15. kolorizacija rastera #! /usr/bin/env python from osgeo import gdal import sys import numpy import os.path gdal.TermProgress = gdal.TermProgress_nocb src_file = sys.argv[1] dst_file = sys.argv[2] out_bands = 3 def MakeColor(z_value): 油 '''LUT for color ramp. Keys are pixel values, hash values are RGB triplets.''' 油 color_dict = { 油油油 0:[102,0,255], 油油 25:[20,82,255], 油油 50:[0,194,224], 油油 75:[0,255,122], 油 100:[41,255,0], 油 125:[204,255,0], 油 150:[245,194,0], 油 175:[224,118,0], 油 200:[168,46,0], 油 225:[105,0,0], 油 250:[64,0,0], 油 255:[0,0,0]} 油 key_list = color_dict.keys() 油 key_list.sort() 油 while len(key_list) > 0: 油油油 last_val = key_list[-1] 油油油 if z_value >= last_val: 油油油油油 return color_dict[last_val] 油油油 else: 油油油油油 key_list.remove(last_val) # Print some info print &quot;Creating %s&quot; % (dst_file) # Open source file src_ds = gdal.Open( src_file ) src_band = src_ds.GetRasterBand(1) # create destination file dst_driver = gdal.GetDriverByName('GTiff') dst_ds = dst_driver.Create(dst_file, src_ds.RasterXSize, src_ds.RasterYSize, out_bands, gdal.GDT_Byte) # create output bands band1 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) band2 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) band3 = numpy.zeros([src_ds.RasterYSize, src_ds.RasterXSize]) # set the projection and georeferencing info dst_ds.SetProjection( src_ds.GetProjection() ) dst_ds.SetGeoTransform( src_ds.GetGeoTransform() ) # read the source file gdal.TermProgress( 0.0 ) for iY in range(src_ds.RasterYSize): 油 src_data = /slideshow/gdalprocessing/6125950/src_band.ReadAsArray(0,iY,src_ds.RasterXSize,1) 油 col_values = src_data[0]油油油油油油油油油油油油油油油油油油油油油油油油 # array of z_values, one per row in source data 油 for iX in range(src_ds.RasterXSize): 油油油 z_value = col_values[iX] 油油油 # print z_value油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油油 # uncomment to see what value breaks color ramp 油油油 [R,G,B] = MakeColor(z_value) 油油油 band1[iY][iX] = R 油油油 band2[iY][iX] = G 油油油 band3[iY][iX] = B 油 gdal.TermProgress( (iY+1.0) / src_ds.RasterYSize ) # write each band out dst_ds.GetRasterBand(1).WriteArray(band1) dst_ds.GetRasterBand(2).WriteArray(band2) dst_ds.GetRasterBand(3).WriteArray(band3) dst_ds = None 油 #END script Ili jednostavnije: 油 $gdaldem color-relief ASTGTM_N44E015_dem.tif ramp.txt color.tif 油 gdje je ramp.txt 3500 white 2500 235:220:175 50% 190 185 135 700 240 250 150 0 50 180 50 nv 0 0 0 0 100%油 255 255 255 75%油油 235 220 175 50%油油 190 185 135 25%油油 240 250 150 0%油油油 50油 180油 50 nv油油油 0油油 0油油 0
  • 16. gdal_contour Omoguava generiranje izo linija iz rastera sa visinskim podacima (SRTM, ASTER) 油 $gdal_contour -i 10 -snodata 32767 -a height ASTGTM_N44E015_dem.tif gdalwarp_output1.tif Primjer generiranja izo linija iz SRTM .hgt podataka shell skriptom: # povlacenje SRTM podataka (.hgt binary grid) sa NASA ftp servera. Lista za HR je u srtmhr_list.txt cat srtmhr_list.txt | sed 's!^!ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/!' | xargs -i wget -nc {} # apsolutna putanja do direktorija sa podacima DATA_PATH=&quot;&quot; # ulazi u direktorij sa podacima cd $DATA_PATH # za油 svaki *hgt.zip izvrsava srtm_generate_hdr.sh http://mpa.itc.it/rs/srtm/srtm_generate_hdr.sh for X in *.hgt.zip do # skripta od .hgt fileova generira BIL headere i priprema podatke za GDAL 油油油油油油油 # GDAL nakon toga radi konverziju u GeoTIFF te napravi .prj za shp 油油油 yes | $DATA_PATH/srtm_generate_hdr.sh $X done # generiranje izohipsi iz pripremljenih tifova for X in $DATA_PATH/*.tif do 油油油 echo $X # izvlacenje izohipsi po visinskim podacima za 10, 50 i 100 m i spremanje u ESRI shape file (.shp) 油油油 gdal_contour -i 10 -snodata 32767 -a height $X ${X%%.tif}c10.shp 油油油 gdal_contour -i 50 -snodata 32767 -a height $X ${X%%.tif}c50.shp 油油油 gdal_contour -i 100 -snodata 32767 -a height $X ${X%%.tif}c100.shp done
  • 17. Jo邸 primjera kori邸tenja GDAL utilitija $gdaltindex index_tiled.shp *_tiled.tif (izrada indeksa za mapserver) $geotifcp n40e015.tif test_dboto.tif (kopiranje metapodataka) $gdalbuildvrt mosaic.vrt *hgt油 (izgradnja mozaika) $gdal_translate mosaic.vrt mosaic.tif (kreiranje slike iz virtualnog kataloga) $gdal_translate -srcwin 0 0 700 700 -of jpeg p2.tif out.jpg (Rezanje) gdal_rasterize -b 1 -i -burn -32678 -l croatia croatia.shp ASTGTM_N44E015_dem.tif (rezanje rastera koti邸tenjem vektora) gdaldem color-relief clip.tif ramp.txt colored.tif油 (kolorizacija visinskog modela) gdaldem slope clip slope.tif -s 111120 (vizualizacija nagiba) gdaldem hillshade clip.tif hillshade.tif -z 5 -s 111120 (sjenanje visina hillshadeing)
  • 18. Zadatak - primjer analize Koristei GDAL i digitalni model reljefa izraunajte podruje udara plimnog vala visine 30 m na podruju Starigrada. Kao rezultat proizvesti vektorski poligonski sloj ugro転enog podruja. podaci: ASTGTM_N44E015_dem.tif ?
  • 19. Rje邸enje Prvo napraviti color schemu za bojanje visina izmeu 1m i 30 m i pohraniti kao colors.txt: 1 255,0,0 30 0,0,0 nakon toga sa gdaldem pobojati ciljano podruje : $gdaldem color-relief ASTGTM_N44E015_dem.tif colors.txt crveno_podrucje.tif sa gdal_polygonize napraviti vektorizaciju ugro転enog podruja: $gdal_polygonize.py crveno_podrucje.tif -b 1 -f &quot;ESRI Shapefile&quot; odsjecak.shp gdje je kao band argument postavljena vrijednost 1 (tj. red od r,g,b) ta daaaa... i dobili smo poligone u shapefileu ali nisu isfiltrirani poligoni ostalih podruja koja nisu ugro転ena. Zadaa: sa ogrinfo pogledajte atribute i njihove vrijednosti te sa OGR-om izdvojite samo ugro転eno podruje u novi shapefile. Primjetiti kako analiza nije u obzir uzela postojanje otoka i njihov utjecaj na ubla転avanje plimnog vala... Razmisliti o tome kako uzeti u obzir utjecaj otoka.
  • 20.
  • 21. OGR to je GDAL za rastere to je OGR za vektore 油 Veliki broj podr転anih formata (http://www.gdal.org/ogr/ogr_formats.html) 油 Velike mogunosti manipulacije nad podacima (Load u Postgis, SQL query-ji, append, update i sl.) te mogunost geoprocessing-a nad vektorima. ogrinfo - Pregled informacija o podr転anim vektorskim podacima ogr2ogr - Konverzije izmeu formata sa kontrolom izlaza ogrtindex - Izrada indeksa 油 油
  • 22. ogrinfo $ogrinfo -al region_borders.shp | less $ogrinfo -ro region_borders.shp -sql &quot;SELECT * FROM \ region_borders WHERE CNTRYNAME='Croatia'&quot; | less INFO: Open of `region_borders.shp' 油油油油油 using driver `ESRI Shapefile' successful. Layer name: region_borders Geometry: Polygon Feature Count: 7 Extent: (6.625400, 35.491300) - (23.006200, 49.020300) Layer SRS WKT: GEOGCS[&quot;GCS_WGS_1984&quot;, 油油油 DATUM[&quot;WGS_1984&quot;, 油油油油油油油 SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]], 油油油 PRIMEM[&quot;Greenwich&quot;,0.0], 油油油 UNIT[&quot;Degree&quot;,0.0174532925199433]] ObjectID: Integer (9.0) NATION: String (3.0) CNTRYNAME: String (25.0) CNTRYABB: String (3.0) SQKM: Real (19.5) COLORMAP: Real (11.0) OGRFeature(region_borders):0 < ime datoteke <tip geometrije < broj featurea < prostroni kvadrat (extent) < projekcija < ime/tip atribunog polja
  • 23. ogr2ogr $ogr2ogr --help (Mala pomo za pregled mogunosti alata) $ogr2ogr -f &quot;KML&quot; region_borders.kml region_borders.shp (Konverzija .shp datoteke u google .kml) 油 $ogr2ogr -f &quot;PostgreSQL&quot; PG:&quot;host=localhost user=user dbname=user password=user&quot; region_borders.kml -nln region_borders (Punjenje .kml datoteke u PostGIS baz) $ogr2ogr -f &quot;ESRI Shapefile&quot; pg_export.shp PG:&quot;host=localhost user=user dbname=user password=user&quot; &quot;region_borders&quot; (Export prostorne tablice u .shp datoteku) 油 $ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:31275 rb_31275.shp region_borders.shp (Konverzija prostornog referentnog sustava) 油 $ogr2ogr -update -append -f PostgreSQL PG:dbname=user region_borders.shp (Update i append iz .shp datoteke u PostGIS bazu)
  • 24. ogr2ogr - merge (sh vs py) Merge shp datoteka - Shell #!/bin/bash mkdir merged find . -name 'contours*' -exec mv '{}' merged \; for i in $(ls *.shp);油 油油 油 do ogr2ogr -f 'ESRI Shapefile' -update -append merged $i -nln contours_merge done 油 Merge shp datoteka - Python 油 import sys import glob from osgeo import ogr outfile = &quot;merge.shp&quot; file_list = glob.glob(&quot;*.shp&quot;) # CREATE OUTPUT FILE out_driver = ogr.GetDriverByName( 'ESRI Shapefile' ) out_ds = out_driver.CreateDataSource(outfile) out_srs = None out_layer = out_ds.CreateLayer(&quot;trans&quot;, out_srs, ogr.wkbLineString) fd = ogr.FieldDefn('name', ogr.OFTString) out_layer.CreateField(fd) fd = ogr.FieldDefn('height', ogr.OFTInteger) out_layer.CreateField(fd) # READ EACH INPUT FILE AND WRITE FIELDS TO NEW FILE for shapefile in file_list: 油 print shapefile 油 [filename, extension] = shapefile.split('.') 油 in_drv = ogr.GetDriverByName( 'ESRI Shapefile' ) 油 in_ds = in_drv.Open(shapefile) 油 in_layer = in_ds.GetLayer(0) 油 in_feature = in_layer.GetNextFeature() 油 height_field = in_feature.GetFieldIndex('height') 油 counter = 1 油 print height_field while in_feature is not None and (height_field != -1): 油油油 name = filename + &quot;_&quot; + `counter` 油油油 #print kV_field 油油油 #print in_feature.GetField 油油油 height = in_feature.GetField(height_field) 油油油 out_feat = ogr.Feature(out_layer.GetLayerDefn()) 油油油 out_feat.SetField('name', name) 油油油 out_feat.SetField('height', height) 油油油 out_feat.SetGeometry(in_feature.GetGeometryRef().Clone()) 油油油 out_layer.CreateFeature(out_feat) 油油油 out_layer.SyncToDisk() 油油油 out_feat.Destroy() 油油油 in_feature.Destroy() 油油油 in_feature = in_layer.GetNextFeature() 油油油 counter += 1 out_ds.Destroy()
  • 25.
  • 26. PostGIS Podr邸ka za prostorne podatke u relacijskoj PostgreSQL bazi, Pod GPL licencom od 2001. - Refractions Research, Implementacija OGC Simple Feature For SQL standarda, Mogunost R/W preko svih FOSS GIS desktop alata (QGIS, UDIG, JUMP), itanje podataka od strane svih renderera (MapServer, GeoServer, Mapnik) Testiran sa 600 000 000 featurea sa brzinom itanja 14 000 feature-a u sekundi Izvrstan vector geoprocessing alat sa vi邸e od 350 funkcija (koristi GEOS za topolo邸ke analize)油 0 (nula) KN Podr転ava: geometrijske tipove toaka, linija, poligona, multitoaka, multilinija, multipoligona i geometrijskih kolekcija prostorne operatore za odreivanje prostornih mjera kao 邸to su povr邸ina, du転ina i opseg prostorno indeksiranje podataka (R-stablo + GiST) koji ubrzavaju upite nad prostornim podacima油 油 Dodatni Alati: psql (CLI suelje prema PostgreSQLPostGIS bazi) shp2pgsql - loader pgsql2shp - exporter 油 Instalacija: $sudo apt-get install postgresql postgresql-client postgresql-contrib pgadmin3 $sudo apt-get install postgresql-8.4-postgis postgis Instalacija ostalih alata i biblioteka $ sudo apt-get install gdal-bin proj libgeos2c2a油 grass qgis qgis-plugin-grass mapserver-bin cgi-mapserver python-qt4 python-sip4 python-gdal python-mapscript gmt gmt-coastline-dat
  • 27. Pode邸avanje baze Kreiranje baze i template-a (preporuujem) $ sudo su postgres $ createdb gistemplate Kreiranje PL/PSQL $ createlang plpgsql gistemplate Load funkcija i SRS tablice $ psql -d gistemplate -f /usr/share/postgresql-8.4-postgis/lwpostgis.sql $ psql -d gistemplate -f /usr/share/postgresql-8.4-postgis/spatial_ref_sys.sql Provjera $psql -d gistemplate -c &quot;SELECT postgis_full_version();&quot; Ulazimo u bazu油 $ psql postgres=# Kreiranje grupe, dodjela role i grant postgres=# CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE; postgres=# CREATE ROLE gis LOGIN PASSWORD 'gisuser' NOINHERIT; postgres=# GRANT gisgroup TO gis; postgres=# \q
  • 28. Dodjela ovlasti na prostorne tablice gis user-u i kreiranje sheme $ psql -d gistemplate gistemplate=# ALTER TABLE geometry_columns OWNER TO gis; gistemplate=# ALTER TABLE spatial_ref_sys OWNER TO gis; gistemplate=# CREATE SCHEMA gis_schema AUTHORIZATION gis; gistemplate=# \q Kreiranje baze rv_gis i priprema za load podataka $ createdb -T gistemplate -O gis rv_gis Dodavanje google projekcije u postgis INSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS[&quot;WGS 84&quot;, DATUM[&quot;World Geodetic System 1984&quot;, SPHEROID[&quot;WGS 84&quot;, 6378137.0, 298.257223563,AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]], AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],PRIMEM[&quot;Greenwich&quot;, 0.0, AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]], NIT[&quot;degree&quot;,0.017453292519943295], AXIS[&quot;Longitude&quot;, EAST], AXIS[&quot;Latitude&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]], PROJECTION[&quot;Mercator_1SP&quot;],PARAMETER[&quot;semi_minor&quot;, 6378137.0], PARAMETER[&quot;latitude_of_origin&quot;,0.0], PARAMETER[&quot;central_meridian&quot;, 0.0], PARAMETER[&quot;scale_factor&quot;,1.0], PARAMETER[&quot;false_easting&quot;, 0.0], PARAMETER[&quot;false_northing&quot;, 0.0],UNIT[&quot;m&quot;, 1.0], AXIS[&quot;x&quot;, EAST], AXIS[&quot;y&quot;, NORTH],AUTHORITY[&quot;EPSG&quot;,&quot;900913&quot;]] |','+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs'); Primjer kreiranja view-a za MapServer CREATE VIEW gradovi AS SELECT * FROM mjesta WHERE type LIKE 'Small' ORDER BY gid;
  • 29. Load shp2pgsql - data loader (mo転e se koristiti i OGR sa podr邸kom za vei broj formata) $shp2pgsql s <epsgcode> <ShapeFileName> <TableName> <dbName> > <filename> $psql -d <dbname> -f <filename> 油 $pgsql2shp -f croatia -h localhot -u user -P user gis &quot;SELECT name, wkb_geometry FROM region_borders WHERE name = 'CROATIA'&quot; Primjer $shp2pgsql -W &quot;ISO-8859-1&quot; -I -s 4326 region_borders gis_schema.region_borders | psql -d gis Napomena: Za na邸e dijakritike znakove -W &quot;WINDOWS-1250&quot; EPSG referenca: $ less /usr/share/proj/epsg | grep 31275 <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs油 <> Export podataka iz baze pgsql2shp -f imefilea imebaze gis_schema.region_borders Prostorni upit za extent SELECT EXTENT(the_geom) FROM region_borders; Kreiranje prostorog indexa GIST (auto vacum i analyze) CREATE INDEX <indexname> ON <tablename> USING GIST ( <geometrycolumn> GIST_GEOMETRY_OPS ); Promjena tipa podatka na stupcu alter TABLE gis_schema.contours50 ALTER COLUMN height TYPE integer;
  • 30. Primjeri: 油 Kreiranje prostorne kolone - AddGeometryColumn SELECT AddGeometryColumn('public', 'region_borders', 'geom', 4326, 'POINT', 2); Kreiranje prostornog indeksa - GIST CREATE INDEX idx_region_borders_geom ON region_borders USING gist(geom); Izraunavanje povr邸ine - ST_Area SELECT neigh_name, ST_Area(geom) FROM region_borders ORDER BY ST_Area(geom) limit 1; 油 Pronai sve objekte 100 meters od toke POINT(1000 1000) - ST_DWithin SELECT * FROM geotable WHERE ST_DWithin(geocolumn, POINT(1000 1000) , 100.0); select zup_naziv from gis_schema.zupanija where ST_DWithin(the_geom, 'POINT(5538942 5007927)',100.0); Ukupna du転ina ceste izra転ena u kilometrima - ST_Length SELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM roads; Selecija poligona koje se nalaze unutar drugog poligona ST_Within CREATE TABLE gis_schema.corine_cro AS SELECT gis_schema.corine.* FROM gis_schema.corine, gis_schema.granice WHERE ST_WITHIN (gis_schema.corine.the_geom, gis_schema.granice.the_geom) AND gis_schema.granice.CNTRYNAME = 'Croatia'; Simplifikacija - ST_Simplify CREATE TABLE gis_schema.border_genSimplify AS SELECT ST_SIMPLIFY(gis_schema.border_gen.the_geom,2) FROM gis_schema.border_gen; ST funkcije
  • 31. Pregled alata Desktop: QGIS (C++/Python) UDIG (Java) JUMP (Java) MapWindow (C#) TatukGIS,ILWIS, gvSIG Vrlo esto ali i uspje邸no se koriste kao framework za razvoj alata prema specifinim zahtjevima. Jump ima vi邸e FOSS forkova ovisno o podruju namjene. Pokriva 80% GIS korisnika. Upravljanje podacima: PostGIS MySQL Spatial SpatialLite GDAL/OGR FDO Vrlo solidno pokriven sloj. Spatial implementacije u skladu sa standardima na svim esto kori邸tenim slobodnim bazama i pokrivena veina formata zapisa GIS podataka.
  • 32. WEB GIS Map rendereri: MapServer GeoServer Mapnik MapGuide OS etiri jako dobra renderera karata. Veinom podr転avaju osnovne OGC standarde. Definitivno najjai dio FOSS GIS stack-a. Web klijenti: OpenLayers pMapper GeoMayas MapFish Svi osim pMapper-a iz nove generacije web klijenata. Naje邸e se koriste kao framewok za razvoj web aplikacija.
  • 33.