[OSM-Devserver] pgsql/hstore für POI-Karten!

Sven Geggus lists at fuchsschwanzdomain.de
Fr Mär 19 19:45:31 CET 2010


Hallo zusammen,

Peter Körner (mazdermind) hat auf dem devserver mit osm2pgsql und
meinem hstore patch experimentiert.

Die Ergebnisse sehen so weit vielversprechend aus und der
inkrementelle update der Datenbank klappt anscheinend auch.

Nun hab ich mir gedacht dass ich mal schaue wie gut das Ganze für
POI-Abfragen geeignet ist.  Ziel dabei ist es keine zusätzlichen
Spezialtabellen zu verwenden, die aufwendig erzeugt werden müssen.

Wir haben derzeit abweichend vond er osm2pgsql Ausgabe lediglich
einen gin-index auf den hstore gelegt.

Nun habe ich einen view gebastelt aus dem man über einen einzigen
select alle POI mit bestimmten tags selektieren kann:

CREATE VIEW germany_osm_hstore_poi AS
  SELECT osm_id,tags,st_transform(way,4326) as way
  FROM germany_osm_hstore_point
  UNION ALL
  SELECT osm_id,tags,st_transform(Centroid(way),4326) as way
  from germany_osm_hstore_line;

Ob man das st_transform wirklich in der view haben will ist natürlich
diskutabel.

Danach geht dann jedenfalls folgendes:

select osm_id,tags->'name',astext(way) from germany_osm_hstore_poi
where (tags ? 'club-mate') and (tags->'club-mate') = 'yes';

Die Abfrage ist etwas merkwürdig aufgebaut, damit der index verwendet
wird.  Die folgende einfachere Abfrage würde eine lineare Suche
benötigen, das liegt wohl am internen Aufbau des hstore systems:

select osm_id,tags->'name',astext(way) from germany_osm_hstore_poi
where (tags->'club-mate') = 'yes';

Auf jeden Fall braucht man auf diese Weise keine getrennten POI
Tabellen mehr wenn man den Rechenaufwand für Centroid(way) bei jeder
Abfrage aktzeptiert.

Gruss

Sven

-- 
Trotz der zunehmenden Verbreitung von Linux erfreut sich der Bär,
und - dank Knut - insbesondere der Eisbär, deutlich größerer
Beliebtheit als der Pinguin. (Gefunden bei http://telepolis.de/)
/me is giggls at ircnet, http://sven.gegg.us/ on the Web