Die Bilder sind nicht als shape gespeichert, sondern nur deren Position. Dazu der Pfad zur Datei. Was im Feld geom ist, kannst du mit
select st_astext(geom) from tabelle
anschauen. Das ist zwar ein Binärfeld, enthält aber nur die Geometrie in WKB.
Ein Tutorial oder so hab ich nicht. Ich nutze dafür ein Pythonscript, dass mir das Bild verkleinert und samt allen anderen Informationen, die ich haben will, in die Datenbank schreibt. Dafür nutze ich die Bilbliothek PIL, die das zur Verfügung stellt (siehe Code unten). Im Skript werden verkleinerte Bilder erzeugt, wenn du ganze Bilder speichern willst musst du das entsprechend anpassen.
Für die base64-codierte Ausgabe nutze ich die Postgres-Funktionen (encode(t1.thumbnail, ‘base64’::text) AS thumbnail,) in einem View, der vom Geoserver als Layer eingebunden wird. Damit wird wird ein String erzeugt, der im HTML als Bild interpretiert werden kann.
Das funktioniert in etwa so (aus dem GetFeatureInfo-HTML):
Die ${}-Ausdrücke sind die Variablen im HTML, die die Daten enthalten. Wie das konkret aussieht, hängt von deinem Layer und der Template/Script-Engine ab, hier ist es das, was der Geoserver verwendet.
Grüße
Uwe
#! /usr/bin/env python
import os
from io import BytesIO
import datetime
import psycopg2 as p
from PIL import Image
db = p.connect(database='db', host='server', port=5432, user='me',
password='pwd')
def make_thumb(path, sizex=200, sizey=200):
stream = BytesIO()
size = sizex, sizey
try:
img = Image.open(path)
thumb = img.copy()
except:
print path
exit
thumb.thumbnail(size, Image.ANTIALIAS)
thumb.save(stream, 'PNG')
return stream.getvalue()
if __name__ == '__main__':
directory = '/irgend/ein/directory/mit/bildern/'
files = [os.path.join(directory, f) for f in os.listdir(directory)]
i = 0
for f in files:
path, filename = os.path.split(f)
prf = os.path.splitext(filename)[0].split('_')
values = {'prjid': prf[0],
'locid': prf[1],
'recid': prf[2],
'type': 'png',
'shortname': prf[4],
'longname': filename,
'scheme': 'file://',
'path': f,
'thumb': p.Binary(make_thumb(f)),
'src_id': 1
}
ins = '''
insert into sep3.resources(prjid, locid, recid, type, longname, shortname, scheme, path, thumbnail, src_id)
values (%(prjid)s, %(locid)s, %(recid)s, '%(type)s', '%(longname)s', '%(shortname)s', '%(scheme)s', '%(path)s', %(thumb)s, %(src_id)s);
'''
cur1 = db.cursor()
cur1.execute(ins%values)
db.commit()
print datetime.datetime.now().isoformat(), i, f
i += 1