Transcript
Page 1: CLI Geoprocessing GDAL/OGR

GIS na GNU/Linux-u

Darko BotoAPIS IT d.o.o.

GIS analitičar

CLI Geoproccesing

GDAL/OGR

Page 2: CLI Geoprocessing 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

Page 3: CLI Geoprocessing GDAL/OGR

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 isključivo pod pokroviteljstvom OSGeo fondacije o (http://www.osgeo.org)

Page 4: CLI Geoprocessing GDAL/OGR

• WEB arhitekture?• Desktop alati?• Osnove GIS-a?• CLI Geoprocesiranje – u duhu konferencije• Biblioteke u pozadini UI• Demistifikacija geoprocessing-a• Anatomija FLOSS GIS stack-a

Page 5: CLI Geoprocessing GDAL/OGR

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

Page 6: CLI Geoprocessing GDAL/OGR
Page 7: CLI Geoprocessing GDAL/OGR

Što je GIS?Što je pored standardne radne okoline potrebno da bi bi sustav bio geografski tj. da bi nam omogućio podršku za prostorne analize?Tri funkcionalna zahtjeva za prostorne analize (tj.GIS-a):

• Data driver (GDAL - Geospatial Data Abstraction Library)o GDAL/OGR = upravljački program za rasterske/vektorske GIS formate

podataka tj. omogućava da se pristupi raznim rasterskim/vektorskim zapisima prostornih podataka.

o PostGIS (PostgreSQL extenzija za "geometry" tip podataka u  bazi - Simple Feature Specification for SQL)

• Geometry engine (GEOS - Geometry Engine - Open Source)o GEOS = C++ port od JTS-ao Omogućava operacije nad vektorima tj. logiku operacija nad skupovima te 

osnovne topološke analize.o Uključuje prostorne operatore i Simple Features for SQL funkcije.

• Projection engine (PROJ4 - Cartographic Projections library)o PROJ4 = Podrška za geografske datume, projekcije i transformacije među

njima.

Page 8: CLI Geoprocessing GDAL/OGR

Projekcijehttp://spatialreference.org/

Page 9: CLI Geoprocessing GDAL/OGR

Prostorni podaciVektorski 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

Page 10: CLI Geoprocessing GDAL/OGR

GDAL = GDAL+OGR

GDAL Raster (Geospatial Data Abstraction Library) Omogućava 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 vlasničkog 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.

Page 11: CLI Geoprocessing GDAL/OGR

GDAL Utilities

• gdalinfo - Iscrpan pregled metapodaka• gdal_translate -Transformacija između različitih 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) osjenčavanje, izračun 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.

Page 12: CLI Geoprocessing GDAL/OGR

gdalinfo$gdalinfo ASTGTM_N44E015_dem.tif

Driver: GTiff/GeoTIFFFiles: ASTGTM_N44E015_dem.tifSize is 3601, 3601Coordinate System is:GEOGCS["WGS 84",    DATUM["WGS_1984",        SPHEROID["WGS 84",6378137,298.2572235629972,            AUTHORITY["EPSG","7030"]],        AUTHORITY["EPSG","6326"]],    PRIMEM["Greenwich",0],    UNIT["degree",0.0174532925199433],    AUTHORITY["EPSG","4326"]]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=BANDCorner Coordinates:Upper Left  (  14.9998611,  45.0001389) ( 14d59'59.50"E, 45d 0'0.50"N)Lower Left  (  14.9998611,  43.9998611) ( 14d59'59.50"E, 43d59'59.50"N)Upper Right (  16.0001389,  45.0001389) ( 16d 0'0.50"E, 45d 0'0.50"N)Lower Right (  16.0001389,  43.9998611) ( 16d 0'0.50"E, 43d59'59.50"N)Center      (  15.5000000,  44.5000000) ( 15d30'0.00"E, 44d30'0.00"N)Band 1 Block=3601x1 Type=Int16, ColorInterp=Gray

 < format zapisa  < veličina <projekcija

<EPSG kod - $ less /usr/share/proj/epsg | grep 4326

< metapodaci        < koordinate extenta

< type Int16

Page 13: CLI Geoprocessing GDAL/OGR

gdal_translate$gdal_translate --formats  - mogućnost konverzije između 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 veličine 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 mogućnosti pogledati:$man gdal_translate

Page 14: CLI Geoprocessing GDAL/OGR

gdalwarp

Omogućava izradu mozaika, reprojiciranje i prilagođavanje slike  koordinatnom sustavu sa kontrolom outputa.

$gdalwarp -of GTiff -co "TILED=YES" -srcnodata 32767 -dstnodata 32767 -t_srs "+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" -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 - gustoća uzimanja uzoraka

Primjer resempliranjagdalwarp -ts 3601 3601 -r cubicspline ASTGTM_N44E015_dem.tif gdalwarp_output2.tif

Primjer isijecanja dijela rastera korištenjem poligona (gdalwarp + gdal_translate)#!/bin/bashSHPFILE=$1BASE=`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 " " $4 " " $3 " " $2}'`echo "Clipping to $EXTENT"RASTERFILE=$2gdal_translate -projwin $EXTENT -of GTiff $RASTERFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tifgdalwarp -co COMPRESS=DEFLATE -co TILED=YES -of GTiff -r lanczos -cutline $SHPFILE /tmp/`basename $RASTERFILE .tif`_bbclip.tif /tmp/`basename $RASTERFILE .tif`_shpclip.tif

Page 15: CLI Geoprocessing GDAL/OGR

kolorizacija rastera#! /usr/bin/env python

from osgeo import gdalimport sysimport numpyimport os.pathgdal.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 infoprint "Creating %s" % (dst_file)

# Open source filesrc_ds = gdal.Open( src_file )src_band = src_ds.GetRasterBand(1)

# create destination filedst_driver = gdal.GetDriverByName('GTiff')dst_ds = dst_driver.Create(dst_file, src_ds.RasterXSize, src_ds.RasterYSize, out_bands, gdal.GDT_Byte)

# create output bandsband1 = 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 infodst_ds.SetProjection( src_ds.GetProjection() )dst_ds.SetGeoTransform( src_ds.GetGeoTransform() )

# read the source filegdal.TermProgress( 0.0 )for iY in range(src_ds.RasterYSize):  src_data = 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 outdst_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 white2500 235:220:17550% 190 185 135700 240 250 1500 50 180 50nv 0 0 0 0

100%  255 255 25575%   235 220 17550%   190 185 13525%   240 250 1500%    50  180  50nv    0   0   0

Page 16: CLI Geoprocessing GDAL/OGR

gdal_contour

Omogućava 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.txtcat srtmhr_list.txt | sed 's!^!ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/Eurasia/!' | xargs -i wget -nc {}# apsolutna putanja do direktorija sa podacimaDATA_PATH=""# ulazi u direktorij sa podacimacd $DATA_PATH# za  svaki *hgt.zip izvrsava srtm_generate_hdr.sh http://mpa.itc.it/rs/srtm/srtm_generate_hdr.shfor X in *.hgt.zipdo# 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 $Xdone# generiranje izohipsi iz pripremljenih tifovafor X in $DATA_PATH/*.tifdo    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.shpdone

Page 17: CLI Geoprocessing GDAL/OGR

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 (sjenčanje

visina hillshadeing)

Page 18: CLI Geoprocessing GDAL/OGR

Zadatak - primjer analize

Koristeći GDAL i digitalni model reljefa izračunajte područje udara plimnog vala visine 30 m na području Starigrada. Kao rezultat proizvesti vektorski poligonski sloj ugroženog područja.

podaci: ASTGTM_N44E015_dem.tif

?

Page 19: CLI Geoprocessing GDAL/OGR

RješenjePrvo napraviti color schemu za bojanje visina između 1m i 30 m i pohraniti kao colors.txt:1 255,0,030 0,0,0nakon toga sa gdaldem pobojati ciljano područje :$gdaldem color-relief ASTGTM_N44E015_dem.tif colors.txt crveno_podrucje.tif

sa gdal_polygonize napraviti vektorizaciju ugroženog područja:$gdal_polygonize.py crveno_podrucje.tif -b 1 -f "ESRI Shapefile" 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 područja koja nisu ugrožena.

Zadaća: sa ogrinfo pogledajte atribute i njihove vrijednosti te sa OGR-om izdvojite samo ugroženo područje 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.

Page 20: CLI Geoprocessing GDAL/OGR
Page 21: CLI Geoprocessing GDAL/OGR

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 mogućnosti manipulacije nad podacima (Load u Postgis, SQL query-ji, append, update i sl.) te mogućnost geoprocessing-a nad vektorima.

• ogrinfo - Pregled informacija o podržanim vektorskim podacima• ogr2ogr - Konverzije između formata sa kontrolom izlaza • ogrtindex - Izrada indeksa

  

Page 22: CLI Geoprocessing GDAL/OGR

ogrinfo$ogrinfo -al region_borders.shp | less$ogrinfo -ro region_borders.shp -sql "SELECT * FROM \ region_borders WHERE CNTRYNAME='Croatia'" | lessINFO: Open of `region_borders.shp'      using driver `ESRI Shapefile' successful.

Layer name: region_bordersGeometry: PolygonFeature Count: 7Extent: (6.625400, 35.491300) - (23.006200, 49.020300)Layer SRS WKT:GEOGCS["GCS_WGS_1984",    DATUM["WGS_1984",        SPHEROID["WGS_1984",6378137.0,298.257223563]],    PRIMEM["Greenwich",0.0],    UNIT["Degree",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

Page 23: CLI Geoprocessing GDAL/OGR

ogr2ogr$ogr2ogr --help (Mala pomoć za pregled mogućnosti alata)

$ogr2ogr -f "KML" region_borders.kml region_borders.shp (Konverzija .shp datoteke u google .kml) $ogr2ogr -f "PostgreSQL" PG:"host=localhost user=user dbname=user password=user" region_borders.kml -nln region_borders (Punjenje .kml datoteke u PostGIS baz)

$ogr2ogr -f "ESRI Shapefile" pg_export.shp PG:"host=localhost user=user dbname=user password=user" "region_borders" (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)

Page 24: CLI Geoprocessing GDAL/OGR

ogr2ogr - merge (sh vs py)Merge shp datoteka - Shell

#!/bin/bashmkdir mergedfind . -name 'contours*' -exec mv '{}' merged \;for i in $(ls *.shp);     do ogr2ogr -f 'ESRI Shapefile' -update -append merged $i -nln contours_mergedone Merge shp datoteka - Python import sysimport globfrom osgeo import ogroutfile = "merge.shp"file_list = glob.glob("*.shp")

# CREATE OUTPUT FILEout_driver = ogr.GetDriverByName( 'ESRI Shapefile' )out_ds = out_driver.CreateDataSource(outfile)out_srs = Noneout_layer = out_ds.CreateLayer("trans", 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 FILEfor 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 + "_" + `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 += 1out_ds.Destroy()

Page 25: CLI Geoprocessing GDAL/OGR
Page 26: CLI Geoprocessing GDAL/OGR

PostGIS• Podrška za prostorne podatke u relacijskoj PostgreSQL bazi,• Pod GPL licencom od 2001. - Refractions Research,• Implementacija OGC Simple Feature For SQL standarda,• Mogućnost 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 točaka, linija, poligona, multitočaka, multilinija, multipoligona i geometrijskih kolekcija• prostorne operatore za određivanje 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 sučelje 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

Page 27: CLI Geoprocessing GDAL/OGR

Podešavanje bazeKreiranje baze i template-a (preporučujem)$ 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 "SELECT postgis_full_version();"

Ulazimo u bazu $ psql postgres=#

Kreiranje grupe, dodjela role i grantpostgres=# CREATE ROLE gisgroup NOSUPERUSER NOINHERIT CREATEDB NOCREATEROLE;postgres=# CREATE ROLE gis LOGIN PASSWORD 'gisuser' NOINHERIT;postgres=# GRANT gisgroup TO gis;

postgres=# \q

Page 28: CLI Geoprocessing GDAL/OGR

Dodjela ovlasti na prostorne tablice gis user-u i kreiranje sheme$ psql -d gistemplategistemplate=# 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 postgisINSERT into spatial_ref_sys (srid, auth_name, auth_srid, srtext, proj4text) values (900913 ,'EPSG',900913,'GEOGCS["WGS 84", DATUM["World Geodetic System 1984", SPHEROID["WGS 84", 6378137.0, 298.257223563,AUTHORITY["EPSG","7030"]], AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], NIT["degree",0.017453292519943295], AXIS["Longitude", EAST], AXIS["Latitude", NORTH],AUTHORITY["EPSG","4326"]], PROJECTION["Mercator_1SP"],PARAMETER["semi_minor", 6378137.0], PARAMETER["latitude_of_origin",0.0], PARAMETER["central_meridian", 0.0], PARAMETER["scale_factor",1.0], PARAMETER["false_easting", 0.0], PARAMETER["false_northing", 0.0],UNIT["m", 1.0], AXIS["x", EAST], AXIS["y", NORTH],AUTHORITY["EPSG","900913"]] |','+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 MapServerCREATE VIEW gradovi AS SELECT * FROM mjesta WHERE type LIKE 'Small' ORDER BY gid;

Page 29: CLI Geoprocessing GDAL/OGR

Loadshp2pgsql - data loader (može se koristiti i OGR sa podrškom za veći broj formata)$shp2pgsql –s <epsgcode> <ShapeFileName> <TableName> <dbName> > <filename>$psql -d <dbname> -f <filename> $pgsql2shp -f croatia -h localhot -u user -P user gis "SELECT name, wkb_geometry FROM region_borders WHERE name = 'CROATIA'"

Primjer$shp2pgsql -W "ISO-8859-1" -I -s 4326 region_borders gis_schema.region_borders | psql -d gisNapomena: Za naše dijakritičke znakove -W "WINDOWS-1250"

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 bazepgsql2shp -f imefilea imebaze gis_schema.region_borders

Prostorni upit za extentSELECT 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;

Page 30: CLI Geoprocessing GDAL/OGR

Primjeri:  Kreiranje prostorne kolone - AddGeometryColumnSELECT AddGeometryColumn('public', 'region_borders', 'geom', 4326, 'POINT', 2);

Kreiranje prostornog indeksa - GISTCREATE INDEX idx_region_borders_geom ON region_borders USING gist(geom);

Izračunavanje površine - ST_AreaSELECT neigh_name, ST_Area(geom) FROM region_borders ORDER BY ST_Area(geom) limit 1; Pronađi sve objekte 100 meters od točke POINT(1000 1000) - ST_DWithinSELECT * 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_LengthSELECT sum(ST_Length(the_geom))/1000 AS km_roads FROM roads;

Selecija poligona koje se nalaze unutar drugog poligona ST_WithinCREATE 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_SimplifyCREATE TABLE gis_schema.border_genSimplify AS SELECT ST_SIMPLIFY(gis_schema.border_gen.the_geom,2) FROM gis_schema.border_gen;

ST funkcije

Page 31: CLI Geoprocessing GDAL/OGR

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 specifičnim zahtjevima. Jump ima više FOSS forkova ovisno o području 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 većina formata zapisa GIS podataka.

Page 32: CLI Geoprocessing GDAL/OGR

WEB GIS

Map rendereri:• MapServer• GeoServer• Mapnik• MapGuide OS

Četiri jako dobra renderera karata. Većinom podržavaju osnovne OGC standarde. Definitivno najjači dio FOSS GIS stack-a.

Web klijenti:• OpenLayers• pMapper• GeoMayas• MapFish

Svi osim pMapper-a iz nove generacije web klijenata. Najčešće se koriste kao framewok za razvoj web aplikacija.

Page 33: CLI Geoprocessing GDAL/OGR
Page 34: CLI Geoprocessing GDAL/OGR

PITANJA?kontakt:

[email protected]@gmail.com


Top Related