Also:
Für ein fotografisches Projekt versuche ich eine Stadtübersicht Aachens zu erstellen, die aber auch wirklich nur aus Aachen besteht. Andere Umgebungen sollen nach Möglichkeit weiß dargestellt werden, plus Begrenzungsrahmen entsprechend der kommunalen Grenze.
Zusätzlich hierzu, möchte ich Marker setzen können, die mit Bilder in einem Layer präsentiert werden (ähnlich Panoramio).
Habe versucht das ganze über Wordpress irgendwie hinzubekommen (möchte nur ungerne auf eine statische Lösung zurückgreifen, da sich in Aachen doch hin und wieder etwas tut und der Datenbestand entsprechend aktuell dargestellt werden sollte), samt OSM Plug In, jedoch erscheint das ganze nicht gerade komfortabel - um es mal so zu sagen.
Hat jemand hier ein paar Tipps für mich, bzw. Lesestoff, wie ich idealerweise an diese Sache rangehen kann?
Stichworte dürften Maperitive und OSM Daten aus Download.geofabrik.de (und da Du nur eine Stadtauszug haben willst, wahrscheinlich auch osmosis) sein, damit Du Dein eigenes Kartenmaterial erstellen kannst. Das WP OSM-Plugin zeigt die Openstreetmap Kacheln an, da ist eine weise Umgebung von Aachen nicht besonders erwünscht .
Mit freundlichen Grüßen Georg V.
P.S.: Willkommen im Forum. edit Tippfehler im Namen korrigiert
Für das Problem mit dem Ausblenden von allen Gebieten außer Aachen fallen mir spontan 3 Lösungen ein:
Die schönste aber auch komplizierteste Variante wäre es einen eigenen Tileserver aufzusetzen. Für einen kleinen Bereich wie Aachen dürfte das eigentlich auch nicht viel Rechenleistung benötigen. Allerdings wäre ein Tileserver dafür etwas übertrieben und der Aufwand nicht gerechtfertigt.
Selber rendern mit Maperitive ist zwar recht leicht, dann müsstest du aber immer wieder neu rendern und hochladen, wenn du die aktuellste Karte haben willst. Bestimmt kann man das auch irgendwie automatisieren, aber damit kenne ich mich garnicht aus.
Ich denke am sinnvollsten wäre es einfach einen Layer über die Karte zu legen, der überall weiß ist und nur bei Aachen durchsichtig. Wie man das macht kann ich dir aber leider auch nicht sagen.
Hatte fast gehofft, dass es eine einfache Lösung über Openlayers gibt. Das ganze sollte schon dynamisch sein, also entsprechend aktueller Datenbestand, zoombar etc. - wird etwas Arbeit, wie ich sehe
Das Prinzip ist, ein Multipolygon (also Polygon mit Loch) als Schablone darüber zu legen. Als outer ein Rechteck außerhalb der Karten-Begrenzung und als inner die Boundary. Leider ist die Performance - zumindest auf meinem alten Rechner - nicht so toll. Dasselbe müsste aber auch mit Mapnik oder Maperitive gehen.
@ikonor:
Darf ich dich fragen wie man zu einem gültigen json-File kommt, das sich nicht in D befindet? Auf welches Koordinatensystem muss ich da umrechnen bzw mit welchem (eventuell perl)-Tool kann man das bewerkstelligen?
Ich finde nämlich diese Darstellung der Karte sensationell gut!
Nominatim liefert auch Polygone als Json. Der Syntax ist zwar minimal anders, aber wenn man dort den ganzen Polygon-Block rauskopiert und in die Beispieldatei einfügt sollte man zum gewünschten Ergebnis kommen.
Da fragst du besser misterboo, wie er die GeoJSON Dateien auf http://ags.misterboo.de erstellt. Es gibt sicher Konverter von OSM zu GeoJSON, da müsste ich jetzt aber auch suchen.
Ich hab mir da ehrlich gesagt nicht viel Gedanken gemacht, sondern bei Grenzen zuerst an diese Karte gedacht und praktischerweise dort auch den Download gefunden.
GeoJSON ist normalerweise wie OSM Daten in WGS84 (EPSG:4326). In diesem Fall ist es aber bereits in Web Mercator (EPSG:3857), das spart die Umrechnung in OpenLayers, siehe die crs Angabe in der json Datei:
Wie Mr. Boo das macht, weiss ich nicht. Wenn die OSM-Daten aber in einer Postgresql-DB mit PostGis liegen, reicht dafür ein einfaches “select ST_AsGeoJSON(border,4326) from …” aus, wenn in der Spalte “border” die gewünschte Geometrie liegt. Ist eine Standardfunktion von PostGIS.
Gruss
walter
p.s. sollte auch mit der beliebten osm2pgsql-DB zum Rendern funktionieren. Nur in welcher Tabelle und welcher Spalte die Daten stehen, ist mir nicht bekannt.
Bin erst davon ausgegangen, das von Nominatim sei auch GeoJSON, ist aber nicht der Fall. Es gibt aber einen Parameter “polygon_geojson=1”, mit dem ist die Geometrie im Feld “geojson” dann als GeoJSON kodiert, Beispiel-URL:
Das hab ich mir vorhin erst überlegt, ob Enklaven/Exklaven wohl funktionieren und beim Test mit der Schweiz festgestellt, dass zumindest Enklaven nicht so ohne weiteres funktionieren. Bei Exklaven müsste man vermutlich statt components[0] alle components zum äußeren Poloygon hinzufügen. Beides müsste ich später mal noch anschauen.
Genau!
weil osm2pgsql beim Import aus Multipolygonen pro inner/outer einen eigenen Datensatz erzeugt. Du hast sogar Glück gehabt, den “richtigen” zu erwischen, da limit=1 einen x-beliebigen passenden Datensatz liefert.
Du könntest dir aus den 3 Datensätzen natürlich wieder ein GIS-Multipolygon machen; dann sollte st_asGeoJson() dieses auch korrekt ausgeben.
Ist aber irgendwie “von hinten durch die Brust ins Auge”.
Gruss
walter
p.s. hier mal “meine” Version erzeugt aus einen PostGIS-DB im Snapshot-Format: 62428.gjson
Dankeschön. Da bleibt erst mal alles weiss… (kleine Änderung wegen EPSG 4326, sonst ist das das gleiche Skript). Muss ich mal suchen, ob OL mit gefüllten Multipolygonen umgehen kann und ob Format.GeoJSON() die richtig einliest (mindestens ein bisschen liest er ja offensichtlich, die bbox stimmt ja).
Da musst du auf jeden Fall meinen Code anpassen. Ich nehme vom GeoJSON nur die Geometrie (Polygon) des ersten Features und daraus nur den ersten LineString. Der wird dann dem äußeren Box-Polygon hinzugefügt. Bei der Polygon Klasse ist die erste component das outer, der Rest sind inner.
Ich hole aus dem Multipolygon die einzelnen Polygone, daraus jeweils den LineString und füge diese dann zum äußeren Polygon hinzu. Weiß nicht, ob das irgenwie eleganter geht. Auf jeden Fall muss man dann noch ne Unterscheidung Multipolygon/Polygon im Geo JSON machen.