UPDATE mytable SET the_geom = st_polygonfromtext(st_astext(the_geom)) WHERE st_astext(the_geom) NOT LIKE 'POLYGON%';
Tuesday, 30 June 2009
Convert MULTIPOLYGON to POLYGON in PostGIS
One way how to convert features from MULTIPOLYGON to POLYGON type in PostGIS. This approach can be used when geometries certainly are simple polygons and not multi-polygons.
Timer function for PostgreSQL
This function will return execution time for any SELECT statement given as a parameter. It is useful for queries in psql.
EXAMPLE:
DROP FUNCTION IF EXISTS timer(VARCHAR);
CREATE FUNCTION timer(VARCHAR)
RETURNS INTERVAL AS'
DECLARE
t1 TIMESTAMP;
t2 TIMESTAMP;
BEGIN
t1 = timeofday();
EXECUTE $1;
t2 = timeofday();
RETURN (t2 - t1);
END;'
language 'plpgsql';
EXAMPLE:
=> SELECT timer('SELECT foo FROM bar LIMIT 100');
-[ RECORD 1 ]----------
timer | 00:00:00.012927
Convert integers to base36 in PostgreSQL
This is PostgreSQL function for converting integers to base36 numbering system:
EXAMPLE:
CREATE OR REPLACE FUNCTION dec2base36(bigint)
RETURNS character varying AS'
DECLARE
inparam alias FOR $1;
invalue bigint;
CLIST char ARRAY[35] :='{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,
F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}';
rv varchar :=''; -- rv = resulting value
BEGIN
invalue = inparam;
WHILE invalue != 0 LOOP
rv = (CLIST[((invalue % 36)+1)]) || rv;
invalue = (invalue/36);
END LOOP;
RETURN(rv);
END;'
language 'plpgsql';
EXAMPLE:
=> SELECT dec2base36(123456789);
-[ RECORD 1 ]------
dec2base36 | 21I3V9
Sunday, 21 June 2009
PostGIS špikeri
Konvertēt MULTIPOLYGON uz POLYGON ģeometrijas veidu:
Validēt ģeometriju:
Uzzināt objekta ģeometrijas izmēru megabaitos:
Ģenerēt 'bounding box' ģeometriju no koordinātēm:
Shapefile dump from PostGIS database:
CREATE TABLE gislatvija.mezi_simple AS SELECT gid, shape_leng, shape_area, (public.st_dump(the_geom)).geom AS the_geom FROM gislatvija.mezi_multi;
Validēt ģeometriju:
SELECT st_isvalid(the_geom) FROM foo WHERE gid = 40;
st_isvalid
------------
t
(1 row)
Uzzināt objekta ģeometrijas izmēru megabaitos:
SELECT st_mem_size(the_geom)/131072 as size_in_mb FROM foo WHERE gid = 40;
size_in_mb
---------
2
(1 row)
Ģenerēt 'bounding box' ģeometriju no koordinātēm:
UPDATE mytable SET the_geom = st_geomfromtext('POLYGON((' || minx || ' ' || maxy || ',' ||
maxx || ' ' || maxy || ',' || maxx || ' ' || miny || ',' || minx || ' ' || miny || ',' || minx ||
' ' || maxy || '))', 27700);
Shapefile dump from PostGIS database:
pgsql2shp -u lasma -h localhost -f myfile mydatabase "select id, ('/home/lasma/' || tif_path) as location from myschema.mytable where name = 'Worcester'"
Saturday, 20 June 2009
Taisam savas kartes uz Garmin GPSmap 60CSx GPS
Aprakstītās darbības norisinās uz Kubuntu ar sekojošiem rīkiem:
- GPSMapEdit (uz Wine emulatora)
- cGPSmapper
- ogr2ogr
Programmu un rīku instalēšanas process
ogr2ogr (daļa no GDAL/OGR)
Daram konsolē:
$ sudo apt-get install gdal-bin
GPSMapEdit un Wine
Wine ir MS Windows emulators uz GNU/Linux. Ar tā palīdzību var palaist *.exe failus. Uzinstalējam Wine paciņas:
$ sudo apt-get install wine wine-gecko
Lejuplādējam GPSMapEdit:
$ wget http://www.geopainting.com/download/mapedit1-0-57-3.zip
$ mkdir ~/mapedit
$ unzip mapedit1-0-57-3.zip -d ~/mapedit
cGPSmapper
Lejuplādējam bezmaksas Linux versiju (1), atzipojam (2), iekopējam kaut kur, kur bash var palaist gpsmapper kā komandu (3):
$ wget http://www.cgpsmapper.com/download/cgpsmapper-static.gz
$ gunzip cgpsmapper-static.gz
$ sudo mv cgpsmapper-static /usr/bin/cgpsmapper
Ja negribas piedraņķēt bin direktoriju, tad var uztaisīt symlinku:
$ sudo ln -s cgpsmapper-static /usr/bin/cgpsmapper
Datu apstrāde
Pirmkārt, salasam kaut kādus šeipfailus (*.shp), ko gribam ielādēt savā Garmin GPS uztvērējā. Pirmais, pārprojicējam visu uz WGS 84 (Lat/Lon) koordinātu sistēmu ar ogr2ogr, piemēram:
$ ogr2ogr -t_srs EPSG:4326 mezi_EPSG4326.shp mezi_LKS92.shp
Talāk varam startēt GPSMapEdit:
$ wine ~/mapedit/mapedit.exe
Importējam pārprojicētos šeipus caur File -> Import un sekojam programmas instrukcijām.
Saglabājam visu padarīto kā gmapsupp.mp failu (šis faila nosaukums ir obligāts!).
Tagad gmapsupp.mp fails ir jākonvertē Garmin saprotamā *.img formātā. To daram ar cgpsmapper.
$ cgpsmapper -q gmapsupp.mp
Izsaukts bez argumentiem, cgpsmapper izdos lietošanas pamācību:
$ cgpsmapper
*************************************************************
cGPSmapper a GIS converter into GARMIN compatible format maps
............
............
Šī konvertācija aizņems ieverojamu laika posmu, pacietība būs vajadzīga.
Visbeidzot izveidojam USB savienojumu ar savu Garmin ierīci un iekopējam gmapsupp.img failu mapē "Garmin" uz GPS uztverēja atmiņas kartes. Ja šī mape neeksiste, tad tā ir jāizveido. Startējam GPSmap 60CSx uztverēja režīmā un jaunizveidotajai kartei vajadzētu parādīties automātiski.
Te līdzīgs stāsts:
http://reidster.net/garmin/
"Kreisā" LKS92 koordinātu sistēma
"Kreisās" LKS92 specifikācija proj4 formātā:
Pārprojicējam uz WGS 84 (EPSG:4326) izmantojot GDAL/OGR šādi:
Lasīt vairāk par "6 miljonu operu" un LKS92 te:
http://www.gisnet.lv/gisnet/2007/04/sesu-miljonu-opera/
+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=
GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs
Kas ir līdzvērtīga EPSG:2100 (Grieķu koordinātu sistēma).Pārprojicējam uz WGS 84 (EPSG:4326) izmantojot GDAL/OGR šādi:
$ ogr2ogr -t_srs EPSG:4326 mezi_EPSG4326.shp mezi_LKS92.shp
Lasīt vairāk par "6 miljonu operu" un LKS92 te:
http://www.gisnet.lv/gisnet/2007/04/sesu-miljonu-opera/
Klusumā tapa ideja
Tā, jau gads kā pagājis klusumā...
Vajadzēs kaut ko mainīt. Kapēc gan neizmantot šo blogu, kā vērtīgu piezīmju krātuvi sev, kas aizsniedzma no jebkuras vietas?
Vajadzēs kaut ko mainīt. Kapēc gan neizmantot šo blogu, kā vērtīgu piezīmju krātuvi sev, kas aizsniedzma no jebkuras vietas?
Subscribe to:
Posts (Atom)