Gebrauchsfertige Regionalkarte aus OSM Daten

Auf welche Tutorials bist du da gestoßen? Also mit switch2osm sollte man binnen weniger Stunden eigentlich eine TilesServer aufgesetzt haben, dann braucht’s nur noch eine index.html mit drei vier Zeilen Leaflet Code und schon kann man eine Karte betrachten.

Genau darum geht es - ich will keinen eigenen TileServer aufsetzen.
Auf OSM basierende Karten sollten so schlank wie möglich in Webanwendungen eingebunden werden können (auch ohne extra DB-Anbindung) - wie z.B. mit OL3 (oder andere Alternativen?).

Das bei switch2osm angeführte OpenLayers-Tutorial ist genauso eines, wie man es eben nicht brauchen kann: Veraltet und überholt. (OpenLayers2).

Vielleicht habe ich mich auch missverständlich ausgedrückt:
Ich würde gerne einfach nur einen eigenen Layer (Bild-Datei) über einen Standard-Layer (z.B. Mapnik) legen können, damit dieser online nutzbar ist:
→ eine selbst gerenderte Bild-Datei (eingebettet über zutreffende GEO-Koordinaten)
→ falls die Ränder der Bild-Datei erreicht sind (weil außerhalb der Region), soll darunter die Standard-Karte angezeigt werden.

Diese 2 Wochen haben sich auch auf alles Mögliche bei OSM bezogen … in Basics einlesen, Optionen, Möglichkeiten, Hintergründe, “Best-Practice” und “How to …” - in beide Richtungen: Selber mappen und OSM nutzen.
Und irgendwie habe ich bei OSM immer dasselbe Problem: Es ist ein wilder Haufen an Daten und Informationen - vielfach widersprüchlich und mehrdeutig und veraltet - und in weiten Teilen wenig strukturiert.

Aus diesem verstrickten Knäuel an Daten(-Müll?) die relevanten Informationen rauszufischen und auch die sehr versteckte Informations-Struktur zu erkennen, dauert nun einmal eine gewisse Zeit :confused: … und ich befürchte, dass ich da noch länger dran sitzen werde.

Okay. Langsam verstehe ich dich, glaube ich zumindest. Im Normalfall nutzt man als sog. Overlay ja eher GeoJSON. Klar kann man bestimmt auch transparente PNG Grafiken als Overlay nutzen, dann ist es aber eher “statisch”. Grundsätzlich wäre dann in deinem Fall auch die Frage, ob du/ihr nicht gleich was mit VectorTiles machen solltet. Oder ihr nutzt den geoserver, damit hat wambacher seine Karten laufen.
Wie interaktiv soll den die Karte werden, sprich mit anklicken von bestimmten Dingen, oder soll das eher rein statisch nur aus Grafiken bestehen?

Rasterlayer in leaflet: https://github.com/GeoTIFF/georaster-layer-for-leaflet

Leaflet. Die Karten der wirrtuellen Wanderung auf http://einklich.net/coast-to-coast bestehen aus Leaflet selbst und ein paar Zeilen JS in den HTML-Dateien, ohne jeglichen Extraserver oder Datenbank.

–ks

Vielleicht wollt ihr am Anfang auch erst einmal mit einer uMap starten.
Mir ist eines leider immer noch nicht klar: welcher Art von Informationen ihr unbedingt als Grafik als Overlay darstellen wollt?

Nicht unbedingt, bei mir war das immer SVG (Grafik) Dateien, weil ich die noch mit Inkscape weiter bearbeiten wollte.

Wenn schon OL, dann aber OL 4.6.x - wobei OL5 schon in der Pipeline ist.

Mit Leaflet kommst du schnell (Stunden?) zum Ziel und mit OL wohl in Tagen. Ich mache zu 90% Leaflet und versuche die restlichen 10% (Boundaries Map) auf LL umzustellen, komme da aber gerade nicht weiter. OL ist nun mal “mächtiger” als LL und die Umsetzung mancher Funktionalitäten ist nicht “soooo einfach”.

Gruss
walter

@wambacher: magst du vielleicht noch kurz etwas dazu sagen, wie warum du den geoserver einsetzt?

Harmlose Frage - schwierige Antwort :wink:

Ich setze den GeoServer als “Interface” zwischen meinen in Leaflet geschriebene Anwendungen und meiner PostgreSQL/PostGIS-Datenbank ein.

Dadurch erreiche ich eine Trennung zwischen der Anwendung (z.B. Emergency Map), den Daten (Datenbank) und dem Styling. (*)

In der Anwendung “sage” ich nur “gib mir das Layer für die Feuerwehren (osm:Fire_Stations) in dem angezeigten Gebiet als WMS (Tiles)”:


      var L_Firestations = L.tileLayer.wms(geosWMS, merge_options(globalOverlayOptions, 
                   { name:          "Firestations"
                    ,layers:        "osm:Fire_Stations"
                   }));

oder für die Hydranten:



      var L_Hydrants = L.markerClusterGroup(merge_options(globalOverlayOptions, {
                     name:          "Hydrants"
                    ,type:          "WFS"
                    ,typeName:      "osm:Hydrants"
                    ,allMarkers:    []
                    ,disableClusteringAtZoom: 17
                    ,iconCreateFunction: function(cluster) {
                       return getClusterIcon(baseUrl+"/webcommon/images/svg/emergency_fire_hydrant.svg",cluster.getChildCount());
	                 }
                   }
                )
      );

Hydranten sind komplexer, da ich hier Clustering verwende. Dort verwende ich WFS (Web Feature Service), damit ich die Hydranten nachher mit Leaflet clustern kann.

Für die Sirenen wird nun ein WMS-Call zum GeoServer geschickt.
Der Geoserver schaut in dem Sirens-Layer nach, besorgt sich die Daten per SQL


select 'emergency=siren'::text "query",
       'n' || osm_id as osm_id,
       wno_AsOsmLink('n',osm_id::bigint) osm_link,
       wno_GetTagsAsJson(tags) tags,
       way
  from planet_osm_point 
 where tags->'emergency'='siren'

und den Style, der definiert, wie die Sirenen dargestellt werden sollen:


<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc"
                       xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>

    <Name>Emergency Sirens</Name>

    <UserStyle>
      <Name>emergency sirens</Name>
      <Title>Emergency sirens</Title>
      <Abstract></Abstract>
      <FeatureTypeStyle>
        <Rule>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource
                                xlink:type="simple"
                                xlink:href="http://localhost:8080/geoserver/styles/images/other/emergency_siren.svg" />
                <Format>image/svg+xml</Format>
              </ExternalGraphic>
              <Size>24</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Hier nur ein Icon (emergency_siren.svg), bei anderen Styles aber auch Tag-abhängige Strichstärken oder Farben)

Der GeoServer besitzt ein Web-Interface, wo der Admin alles einstellen kann - und muß :wink:

Als Knackpunt für eure Projekte: Er trennt die Datendarstellung von den Datenquellen.

An Services bietet er mindestens WMF, WMS, WCS und WMS an und als Datenquellen kann er - in der Standardinstallation -

GS ist in Java geschrieben, aber das sollte für Profis (Josm!) kein Problem sein.

Gruss
walter

(*) sorry, bin kein Informatiker, da gibt es bestimmt bessere Begriffe für.

Hi Walter, gibts Deine wno_* PSQL-Funktionen eigentlich irgendwo, oder sind die Betriebsgeheimnis?

Hast du ein unmodifiziertes osm2pgsql benutzt (mit welchem Stil?), oder irgendwas schlaues zusammengehackt?

Ah, als Tipp was sonst noch geht: Ich hab mein Rasterlayer in QGIS geladen, dann mit dem leaflet-Export-Plugin (Name entfallen, aber der ändertsich auch öfter, ich meine es war qgis2leaf) daraus die Tiles im z/x/y-Dateiformat/Ordnerstruktur erzeugen lassen, die dann in meiner Karte über die Grundkarte als zusätzliche basemap gelegt.

Vorteil: keine weitere JS-Abhängigkeit
Nachteil: muss man immer neu machen, wenn sich das Raster ändert.

Ein Geheimnis sind die nicht. Hab nur nie drüber nachgedacht, die zu publizieren.

Ich habe osm2pgsql ein wenig modifiziert, aber das Original ist auch ok. Und dann nutze ich ein leicht erweitertes Schema.


...
node,way   addr:postcode                   text  linear # wno
way        de:amtlicher_gemeindeschluessel text  linear # wno
way        de:regionalschluessel           text  linear # wno
way        ISO3166-1:alpha3                text  linear # wno
node,way   maxspeed                        text  linear # wno
node,way   maxspeed:forward                text  linear # wno
node,way   maxspeed:backward               text  linear # wno
node,way   name:de                         text  linear # wno
node,way   note                            text  linear # wno
way        postal_code                     text  linear # wno
node       traffic_sign                    text  linear # wno
node       vending_machine                 text  linear # wno
...

Hier werden einige Tags in eigene Collums gelegt, da somit der Zugriff auf den Hstore (z.B. tags->‘addr:postcode’) nicht notwendig ist. Geht halt schneller so. Nagelt mich aber nicht auf jedes Feld fest - das ist “histerisch” in den letzten Jahren gewachsen.

Steh halt mit “gitten” auf dem Kriegsfuß.

Gruss
walter

Ich bin nicht überrascht von der Komplexität des Gesamtthemas, sondern von der Unstrukturiertheit der OSM-Community.
Als “Daten(bank)-Logistiker” kann ich oftmals nur den Kopf schütteln, seit ich mich intensiver mit OSM beschäftige. OSM selbst ist ein suptertolles Projekt, die praktische Umsetzung (bei speziellen Teilen) hingegen ähnelt eher einem Flickwerk, bei dem offensichtliche Schwächen nicht grundlegend korrigiert, sondern Risse in der Wand mit Kleister und Reste-Tapeten überklebt werden.

Genau DAS mache ich durchaus!
Anstatt OSM dazu zu bringen, die Daten-Struktur zu ändern, kostet es mich wohl weniger Zeit und Nerven, die OSM-Basisdaten mit eigenen regionalen/lokalen Spezial-Daten zu ergänzen, diese selbst zu rendern und online zu stellen.
Mir fehlt momentan echt die Zeit, hier als Don Quijote gegen Windmühlen zu kämpfen - und wie ich hier im Forum gelesen habe, versuchten das schon andere.

Absolut korrekt!
Die meisten Einsteiger geben wohl entnervt auf und nutzen dann doch lieber eine Google-Map - ist doch viel einfacher :roll_eyes:

Aber Sinn der Sache sollte sein, die Einstiegshürden beim Gebrauch von OSM soweit zu senken, dass es nicht Tage/Wochen braucht, um sich in die Thematik einzuarbeiten, sondern vielleicht nur Stunden.
Dass ein Projekt wie OSM sehr komplex ist, war mir von vornherein klar. Aber nicht die Komplexität ist das Problem, sondern die mangelhaften (und nicht vorhandenen oder auffindbaren) Erklärungen dazu - die Einstiegshürden sind nicht zu hoch, sondern zu “zeitaufwändig”.

OSM selbst sollte sich Gedanken machen, welchen Aufwand End-User betreiben wollen bzw. praktisch werden, um OSM überhaupt zu nutzen - einerseits als aktiver Mapper, andererseits als Anwender (z.B. einfache Einbindung einer “Anfahrts”-Karte für eine Unternehmens-Webseite).

So - nun bin ich fertig mit meinen Don-Quijote-Erläuterungen - die Zeit rennt :smiley:zurück zum eigentlichen Thema:

Alleine die Worte “statisch”/“dynamisch” brauchen hier wohl einer Beschreibung, weil ich vermute, dass wir darunter verschiedene Dinge verstehen.

VectorTiles und GeoJSON sind kein Problem.

“Wie interaktiv …?” - tja, das ist wohl die Preisfrage.
Die Karte soll sehr flexibel sein - je nach Bedarf/Zielgruppe andere Inhalte, anklickbar (touchbar) mit weiteren Weblinks(online)/Infos(statisch?).
Icons, Tracks und POI hinzuzufügen ist auch kein Problem.

Aber die “sichtbare Basiskarte” zu gestalten, habe ich bisher noch nicht geschafft.

Das grundlegende Problem ist auch, dass hier eine Fülle von Faktoren beachtet werden sollten.
Jeder Teilbereich kocht irgendwie sein eigenes Süppchen … einen (brauchbaren!) Vergleich von OL3, Leaflet und Alternativen habe ich bisher auch noch nicht gefunden, leider - geschweige denn aufbauende Tutorials. Das alles muss ich dann wohl selber mal zusammenfassen und schreiben :smiley:

So stelle ich mal ein Beispiel zur Diskussion bzw. zur Erklärung:
Eine eigene lokale Karte wurde mit Maperitive gestylt/gerendert und als “Bild”-Datei exportiert (Beispiel ca. 10 km²). Nun könnte man tagelang diskutieren, ob SVG auch eine Bild- oder doch eine Grafikdatei ist. Grundsätzlich sind beides reine Textdateien … aber das ist ein anderes Thema.

Nun ganz einfach (und hoffentlich verständlich) ausgedrückt:
Ich will diese statische Bilddatei als interaktive Karte online stellen, mit der Option, einen 2. Layer darüber legen zu können, natürlich auch mit unterschiedlichen Zoom-Stufen.
Wie womit machen? (bzgl. OL3, Leaflet & andere Alternativen)

Erweiterte Frage:
→ Basis-Layer Grundkarte (z.B. Mapnik Standard)
(falls die Grenzen der eigenen 10 km² erreicht werden, soll zumindest eine weitere Karte angezeigt werden)
→ 2. Layer: Eigene Bild-Datei (nicht transparent; die eigenen 10 km² sollen die Grundkarte überdecken)
→ 3. Layer: Eigene Datei (transparent; für “Weiß-der-Kuckuck-was-alles-noch:smiley: )

Ob die Layer nun Tiles oder Layer oder Ebenen genannt werden, ist eigentlich egal - ob dies mit OL3, Leaflet oder XY gemacht wird, ebenso.

Keine Sorge - parallel probiere ich natürlich weiter, und suche auch online nach den gewünschten Informationen, um das vielleicht auch selbst zu schaffen - aber das ist ja das Problem, wenn man gerne OSM-Daten nutzen würde: Man findet den Wald vor lauter Bäumen nicht.
:confused:

Vielleicht können wir anhand dieses Beispiel ja mal einen kleinen Leitfaden für Einsteiger schreiben, für jene, die ansonsten frustriert schon das Handtuch werfen würden :wink:

Besten Dank im Voraus für eure Hilfe.
Grüße

Natürlich ist das einfacher. Weil Google-Maps ein Kartendienst ist, und OSM nicht. Äpfel und Birnen. Das ist, als würdest du einen Brief schreiben wollen und vergleichen, wie leicht das a) mit einer Office-Software und b) mit einem Lehrbuch zur Anwendungsprogrammierung geht.

OSM hat einen vollkommen anderen Ansatz als GM. GM stellt fertige Kartenwerke zur Verfügung, die immer direkt von deren Server abgerufen werden müssen, weil GM damit Daten über seine Nutzer sammelt (wer wann wie oft wohin will, wieviele wann wie oft ein bestimmtes Ziel anfahren etc.pp.). Natürlich ist das auf Einfachheit getrimmt, damit möglichst viele es nutzen, sonst geht das Geschäftsmodell nicht auf. OSM dagegen stellt Rohdaten zur Verfügung, die vor allem auf Detailliertheit, Aktualität und Exaktheit optimiert sind. Aus diesen Daten lassen sich unterschiedlichste Karten erstellen, wobei dem Ersteller vollkommen freisteht, was darauf wie dargestellt wird. Das macht natürlich deutlich mehr Arbeit. Deshalb haben sich schon viele diese Arbeit gemacht und bieten vorgerenderte OSM-basierte Karten an, die sich relativ einfach einbinden lassen – aber auch diese Dienste verfolgen keine kommerziellen Interessen und können es sich daher leisten, nicht auf absolute Einfachheit hin getrimmt zu sein. Und vor allem sind sie nicht OSM und auch nicht Teil des OSM-Projekts, sondern lediglich Nutzer davon.

Etwas überspitzt ausgedrückt: OSM setzt auf Spielkinder, denen es Spaß macht, aus den (zugegebenermaßen etwas wilden) Daten grafische Karten zu erstellen :slight_smile:

Wenn schon vergleichen, dann GM mit Kartendiensten wie umap oder so.

–ks

Du hast OSM nicht verstanden. Das ist jetzt nicht bös gemeint. OSM hat weder den Anspruch noch irgendwo versprochen, Dir bei diesem Problem zu helfen. Hier tummelt sich viel Know-How in diesem Bereich, da er zur Präsentation dazu gehört, aber Du wirst weiter gegen Windmühlen kämpfen, wenn Du mit dieser Erwartungshaltung hier auftrittst.

Hallo tshe70.

Deine Schwierigkeiten Hilfe zu finden, tutorial usf kann ich schon verstehen. Mir war jedoch schon rasch klar, dass die Hilfen jemand aktuell halten muss. Ich geh jetzt mal davon aus, dass das unbezahlte Leute machen. Die meisten ziehen eben irgendwann weiter.

Bei meinem Kartenprojekt habe ich zuerst OL in Erwägung gezogen, dann für leaflet mehr Hilfe gefunden. So bin ich dabei geblieben. Bei stackoverflow bin ich oft fündig geworden. Auch dort sind die Diskussionen oft alt. Im Forum sind einige Leute, die gerne Fragen beantworten und sich mit leaflet auskennen, sag ich jetzt mal.

Mein Kartenprojekt zieht sich bereits über ein Jahr hin. Erst Ende Mai habe ich es online stellen können. Man sieht gleich, dass ich ein Laie bin und noch viel tun muss. Fast meine ganze Restfreizeit geht dafür drauf, da ich es nun doch erweitern möchte. Ich habe es unterschätzt und wollte noch was anderes machen. Das stelle ich jetzt zurück. Gleichzeitig macht es mir viel Freude.

Guck mal hier , da gibt es zwei interessant klingende Verlinkungen auf zwei Leaflet Plugins. Zauberwort: fallback

Und nein, es ist nicht egal ob Tiles oder Layer, das sind definitiv zwei paar Schuhe: Tiles sind die Grafiken, die unterste Ebene (und da gibt es eigentlich nur eine davon), da on top kommen dann die Layer(s).

Ganz einfach, auch für Normalanwender : umap als iframe einbinden (Beispiel: http://auto-hartmann.de/standort/))

Hab’s gerade mal auf die Schnelle ausprobiert und auf die Schnelle kein brauchbares Ergebnis bekommen :confused:

Es gäbe aber noch folgende Möglichkeit: einfach das Gebiet ein bisschen größer mit maperative rendern und dann einfach per Leaflet die Scrollmöglichkeit auf bestimmte Grenzen zu limitieren, siehe z.B. meine Testseite (da ist auch noch der Zoom auf einen Zoomlevel begrenzt)