Re: [FreeGeoCZ] PlPython + Postgis
Martin Chodúr <[email protected]>
| Newsgroups | gmane.comp.gis.grass.cz |
|---|---|
| Message-ID | <[email protected]> |
Přesně tak... potřebuju to volat z jinýho serveru a aby mi to vrátilo sadu polygonů v nejakým PostGIS friendly formátu. To je mi jasný že je to lámaný přes koleno jen mě bohužel zatím nenapadlo lepší řešení. Gdal se dá použít v Pythonu samozřejmě, ale nenašel jsem způsob jak to z něho nahrát do databáze zpátky právě. ---------- Původní zpráva ---------- Od: Leknín Řepánek <[email protected]> Komu: Svobodná geoinformačníinfrastruktura <[email protected]> Datum: 8. 4. 2014 7:05:36 Předmět: Re: [FreeGeoCZ] PlPython + Postgis "Hm volat z postgre pajtn, ve kterym se provede komandlajna, která posílá rourou z gdal na psql. No, to je už trochu ozlomkrk. To přece musí jít udělat jinak. Ta gdalka de dát do pythonu... Nebo ty to posíláš na jinej servr? Je; On Tue, Apr 08, 2014 at 12:57:24AM +0200, Martin Chodúr wrote: > Zdravím, narazil jsem na takový problém. Co se snažím udělat je vytvořit funkci > v PLPythonu, která by načetla rastr z databáze, převedla ho do pole hodnot pro > clustering, převedla nově vygenerovaný rastr na polygony a vrátila je jako > tabulku geometrií. > Načtení dat z databáze (přestože ne zrovna ideálním způsobem) se mi podařilo i > jejich clusterování, pro převod na polygony jsem chtěl ale využít ST_ Polygon, k > tomu ale potřebuji převést výslednou matici zpět na raster a ještě jí nastavit > spatial data jako srs bbox atd. > > Tady sem bohužel narazil. Gdal nemá podle všeho zatím funkční driver pro výstup > do postgis (možná se pletu) a nevím jak tenhle zádrhel obejít zatím. > > Uložení do souboru je z důvodu že imread() nebere vstup string. jeto jen > provizorní řešení. > > Pokud by někdo uměl poradit, nebo měl lepší nápad jak to řešit, budu vděčný. > Podpora práce s rastrem v PostGISu není zatím tak převratná a google neumí > poradit už. > > Předem díky za jakoukoli odpověď > Martin Chodúr > > pro ukázku dosavadní stav funkce: > > CREATE OR REPLACE FUNCTION cluster (raster text) > RETURNS table(geom geometry) > AS $$ > from sklearn.cluster import AffinityPropagation > import matplotlib.pyplot as plt > from scipy import misc > from osgeo import gdal > import os > > out = plpy.execute("select st_aspng(rast) png from "+raster, 1) > f = open('/foo/bin/temp.png','wb') > f.write(out[0]['png']) > f.close() > > im = misc.imread('/foo/bin/temp.png') > im_reshaped = im.reshape((len(im) * len(im[0]), 3)) > > af = AffinityPropagation(damping=0.5, convergence_iter=2).fit(im_reshaped) > labels_reshaped = af.labels_.reshape(len(im), len(im[0])) > > ##### dál už to nefunguje a je to jen představa jak by to mohlo jít > > misc.imsave('/home/fus/out/temp_clustered.png',labels_reshaped) > > plpy.info(os.system('raster2pgsql /home/fus/out/temp_clustered.png > clustering.out | psql -d testovaci -q ')) > > out = plpy.execute("select st_polygon(rast) geom from clustering.out limit > 1") > > return out > $$ LANGUAGE plpythonu; > > > _______________________________________________ > FreeGeoCZ mailing list > [email protected] > http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz_____________________ __________________________ FreeGeoCZ mailing list [email protected] http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz" _______________________________________________ FreeGeoCZ mailing list [email protected] http://mailman.fsv.cvut.cz/mailman/listinfo/freegeocz