[FreeGeoCZ] PlPython + Postgis

Martin Chodúr <[email protected]>
Newsgroups gmane.comp.gis.grass.cz
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.