[Talk-de] Abstände zu POIs visualisieren?

Frederik Ramm frederik at remote.org
Mo Nov 9 01:16:10 UTC 2009


Hi,

SB79 wrote:
> vielen Dank, Frederik, für diese Hinweise! Ich bin leider noch 
> unerfahren, was PostGIS anbelangt, daher würde ich mich Alexanders 
> Frage nach einem Pseudocode anschließen - sofern Dir das nicht zu sehr 
> die Zeit stiehlt. :-)

Also ich hab das jetzt nicht im Detail ausprobiert, aber wenn Du eine 
mit osm2pgsql eingelesene Datenbank hast, dann kannst Du erstmal gucken, 
wieviele Briefkaesten Du hast:

select count(*) from planet_osm_point where amenity='post_box';

Dann eine Tabelle herstellen, lauter Kreise von 500m um jeden 
Briefkasten hat (das geht einfach so, weil osm2pgsql ja normalerweise in 
einer sphaerischen Mercator-Projektion importiert, deren Einheit Meter 
sind):

create table postboxareas as select buffer(way, 500) from 
planet_osm_point where amenity='post_box';

Die koennte man jetzt mit einer geeigneten Mapnik-Regel bereits sichtbar 
machen - bei Mapnik hat man ja immer einen "Style" und einen "Layer" 
dazu, das muesste etwa so aussehen:

<Style name="postboxareas">
     <Rule>
       <PolygonSymbolizer>
         <CssParameter name="fill">#ddd</CssParameter>
       </PolygonSymbolizer>
     </Rule>
</Style>
...
<Layer name="postboxarealayer">
    <StyleName>postboxareas</StyleName>
    <Datasource>
    <hier die ganzen PostGIS-Zugangsparameter, Username, Passwrd usw.>
    <Parameter name="table">postboxareas</Parameter>
    </Datasource>
</Layer>

Nun wolltet ihr ja nicht die Briefkastenbereiche, sondern die 
"nicht-Briefkasten-Bereiche". Dazu wuerde ich erstmal ein grosses 
Polygon herstellen, dass den gesamten interessierenden Bereich umfasst, 
das geht so:

select ST_GeomFromText('POLYGON((-20037508 -19929239,-20037508 
19929239,20037508 19929239,20037508 -19929239,-20037508 -19929239))',900913)

Das ist ein Polygon, das die ganze Welt umfasst, die Koordinaten sind in 
der sphaerischen Mercatorprojektion (EPSG:900913) angegeben. Jetzt will 
ich alle Briefkastenpolygone zu einem zusammenfassen, diese "Summe" dann 
von o.g. Polygon abziehen, und das Ergebnis wieder in eine Tabelle 
schreiben:

create table wo_keine_briefkaesten_sind as select 
difference(ST_GeomFromText('POLYGON((-20037508 -19929239,-20037508 
19929239,20037508 19929239,20037508 -19929239,-20037508 
-19929239))',900913), (select geomunion(buffer) from postboxareas));

Das ergibt eine neue Tabelle namens wo_keine_briefkaesten_sind, die nur 
ein einziges Polygon enthaelt, in dem nun die gewuenschte Differenz 
steht. Dieses muesste man wie oben skizziert auch in Mapnik sichtbar 
machen koennen.

Mit dem Open-Source-Programm "Quantum GIS" (qgis) kann man uebrigens 
auch direkt auf PostGIS zugreifen und die Inhalte von Tabellen sichtbar 
machen. Dabei ist manchmal der PostGIS-Befehl "alter table xyz add 
column gid serial unique" nuetzlich (Du merkst dann schon, wann).

Wie gesagt, ich hab das jetzt nicht alles durchprobiert, nur schnell die 
PostGIS-Befehle eingetippt um zu gucken, ob keine Tippfehler drin sind. 
Vermutlich gibt es noch 1000 andre Wege, um das gleiche zu erreichen, 
ich glaube, wir haben hier ein paar Spezialisten, die werden sich dann 
schon melden ,-)

Bye
Frederik

-- 
Frederik Ramm  ##  eMail frederik at remote.org  ##  N49°00'09" E008°23'33"




Mehr Informationen über die Mailingliste Talk-de