Rendering begrenzen auf Grenzen, z.B. admin_level

Nachdem ich in den letzten zwei Jahren datentechnisch ein bisschen was in meiner Umgebung beigetragen habe, wollte ich jetzt mal mit dem Rendering beginnen und scheitere gleich beim Versuch, das Rendering (im Moment maperitive, gerne später dann aber auch mapnik, tiles und Co) auf eine bestimmte Grenze, in dem Fall admin_level=8 zu begrenzen.

Was ich bisher getan und (teilweise auch mit Hilfe von wambacher) geschafft habe:


osmconvert thueringen-latest.osm.pbf >thueringen-latest.osm
osmosis --read-xml file=thueringen-latest.osm --bp file=Schleusegrund/al8/Schleusegrund.poly completeWays=yes completeRelations=yes --write-xml file=schleusegrund.osm

Ich habe es auch mal mit nur osmconvert versucht, aber da funktioniert das mit den Flächen, die über amin_level hinausreichen nicht wirklich, da funktioniert osmosis schon besser, ist aber auch zuviel, weil die kompletten Flächen mitgeladen werden.

Wie bringe ich es jetzt hin, dass eines der Tools nun Flächen mit Hilfe des al8-poly “abschneitet” (Schnittmenge), so dass ich zum Schluß alles an Daten habe, aber eben nur bis und innerhalb der al8 Grenze?!

Oder stell ich mir das jetzt als Softwareentwickler aber leider nicht Kartograf oder PostGIS Experte zu einfach vor Schnittmengen-Flächen zu bilden wenn man schon --bounding-polygon nutzt?

Die Tools, die Du einsetzt, filtern OSM-Daten, aber sie erzeugen keine neuen Daten. Um das, was Du erreichen möchtest, zu erreichen, müsste man aber neue Daten erzeugen - die Relationen, die die über die Grenze hinausgehenden Polygone beschreiben, müssten verändert werden, und es müssten neue Nodes und Ways entlang der Grenze erzeugt und in das Polygon eingebaut werden. Das ist zwar kein Hexenwerk, aber was dabei herauskäme, wäre halt ein “OSM plus selbst gebasteltes Zeugs”-Datensatz, und sowas erzeugen diese Programme halt nicht.

Soweit ich weiss, geht das, was Du willst, nur auf Geometrie- und nicht auf OSM-Daten-Ebene. Wenn Du Deine OSM-Daten in Shapefiles konvertierst (mit ogr2ogr o.ä.) oder in eine PostGIS einliest, kannst Du dann - mit PostGIS-Bordmitteln oder mit ogr2ogr an der Commandline oder mit QGis - solche Polygonschnittmengen ausrechnen.

Wenn Du mittelfristig eh auf die Mapnik-Schiene willst, dann gibt es da auch noch einen anderen Trick, der ganz ohne Schnittberechnungen auskommt: Du zeichnest erst die Flächenfüllungen und dann obendrauf ein Shapefile, das für die ganze Welt weiß ist und nur in Schleusengrund ein “Loch” hat. Die Texte und Icons kommen erst danach (so dass die nicht abgeschnitten werden, wenn sie am Rand liegen).

Bye
Frederik

An so einen “dirty” Workaround hatte ich zwar auch schon gedacht, es ist und bleibt aber ein Workaround. Und ich hatte auch noch einen noch dreckigeren Workaround im Kopf: in OSM einfach die Flächen mit Hilfe der al8 zu splitten … aber das habe ich wieder verworfen, da ich von dem Aufschrei aus der Community nicht taub werden wollte :smiley:

Aber ich sehe schon, ich werde wohl doch nicht herumkommen gleich den PostGIS-Hammer rauszuholen.

Letztendlich ist die Idee “einfach” nur folgende: eine ziemlich gecleante (ohne POIs) Darstellung des Gebietes um dann z.B. mit Leaflet verschiedene POIs nur als Overlay drüberzublenden … aber eben ohne gleich die ganz großen Hämmer (PostGIS, mapnik, eigener tiles-server) zu nehmen, dafür ist das Gebiet mit 58km² einfach zu überschaubar und rechtfertigt nicht wirklich die Zeit und Kosten dafür.

Add: Und ich dachte ich komme halt eben mit maperitive, was ja tiles erzeugen kann und leaflet aus…

Ich hab sowas mal gemacht und erinnere mich noch vage dran:

Du musst dir ein MP erstellen, das als “Outer” eine BBOX hat, die grösser ist als die Fläche, die du darstellen willst. Und als “Inner” bekommt sie das MP der Fläche, die du sehen willst.

Wenn du das MP hast, renderst du das als Letztes mit einem neutralen Hintergrund (Weiss?) über alle anderen Daten. Ist ja dann ein Rechteck mit einem “Loch” - und nur das sieht man dann.

Gruss
walter

ps: wenn das nicht reicht, muss ich mal suchen.

Nachtrag: Deckt sich ja in etwa mit Frederiks Vorschlag; nur mit den Shapes ist das ja noch einfacher. Und wenn du dir das gewünschte Gebiet mit einem Buffer von ca 100 Metern bei mir herunterlädst, sieht der Rand sogar noch besser aus.

Hmm, dass könnte man ja sogar mit JSOM hinbekommen: einfach zeichnen, lokal als osm speichern und in die schleusegrund.osm einschleusen.

Jo, ginge auch. Nur bei mir bekommst du den Buffer (erweiterter Rand) geliefert. Nur nicht als XML, müsste man halt als BPoly exportieren und dann in Josm einlesen.

Gruss
walter

Hast du eigentlich schon das “<osm version=‘0.6’ upload=‘false’ generator=‘JOSM’>” in deiner lokalen Kopie drin?

Besser:


osmconvert thueringen-latest.osm.pbf --complete-ways --complex-ways -o=thueringen-latest.osm

Probiere ich gleich mal aus … das hatte ich schon aber ohne --complex-ways … vielleicht war das der Grund warum damals eine Waldfläche diagonalquer durch das Gebiet ging.

ADD: @nakaner: ähm moment mal, da fehlt doch das bounding poly argument?! Oder wolltest du mir etwas anderes damit sagen?

@wambacher: und nein, das upload=false habe ich nicht bei mir drin, da ich bin jetzt gar nicht wusste, dass es das gibt :smiley:

Warum beginnst du gleich mit super speziellen Anforderungen? Fang doch erstmal damit an überhaupt etwas zu rendern. Möglicherweise stellst du ja dabei fest, dass die Spezialanforderung doch nicht so essentiell ist …

Gruß Klaus

osmconvert thueringen-latest.osm.pbf -B=Schleusegrund/al8/Schleusegrund.poly --complete-ways --complex-ways -o=schleusegrund.osm 

doch, ja, schaut auch ganz gut aus. und dann noch mit dem oben genannten Workaround sieht es dann auf den ersten Wurf schlicht und einfach so aus:
http://osm.haraldhartmann.de/pois/ (Upload der Tiles ist aber noch in progress)

@toc-rox: was ist daran super speziell, wenn man nur “sein” kleines Gebiet und nicht gleich die GANZE Welt rendern möchte? :wink:

“Super speziell” ist die Anforderung (wenn ich es denn richtig verstanden haben) die Objekte, die auf der gewünschten Grenze liegen, zu teilen. Das können die Tools nicht. Ansonsten ist es mit osmosis ja kein Problem ein Rechteck oder ein Polygon aus einem Datenextrakt auszuschneiden.

Gruß Klaus

Das ist wohl subjektive Auslegungssache des Wortes “filtern” … woodpeck hat ja durchaus recht … für mich gehört aber zu filtern (entspricht ja mehr oder weniger auch dem wort “eingrenzen”) eben auch schnittmengen bilden zu können. aber so wie es jetzt ist, wird es wohl tun was es soll.

ADD: und die osm-daten sind für mich ja eigentlich nichts anderes als “geometrie”-daten (punkte, linien, bzw. vektoren und flächen) …