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 [email protected] ## N49°00'09" E008°23'33"
_______________________________________________
Talk-de mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/talk-de