Skip to Content.
Sympa Menu

freegeocz - [FreeGeoCZ] PlPython + Postgis

freegeocz AT fsv.cvut.cz

Předmět: Svobodná geoinformační infrastruktura

List archive

[FreeGeoCZ] PlPython + Postgis


Chronological Podle vláken 
  • From: Martin Chodúr <M.Chodur AT seznam.cz>
  • To: <freegeocz AT fsv.cvut.cz>
  • Subject: [FreeGeoCZ] PlPython + Postgis
  • Date: Tue, 08 Apr 2014 00:57:24 +0200 (CEST)
  • List-archive: <http://mailman.fsv.cvut.cz/pipermail/freegeocz>
  • List-id: Svobodná geoinformační infrastruktura <freegeocz.fsv.cvut.cz>

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;


=


Archivace běží na MHonArc 2.6.19+.

Top of Page