Layer mit Wohnorten

Liebe Community,

ich nutze OSM schon länger auf dem iPAd, bin jetzt aber neu hier und habe mich zunächst mal so ein kleines bisschen über OSM informiert (und dabei ein paar updates in meiner Umgebung vorgenommen…).
Ich habe folgendes Projekt vor:
Wir Eltern wollen eine Internetseite für die Schulklasse unserer Kinder machen. Dort sollen auch die Adressen aller Mitschüler erfasst und auch auf einer Karte die genauen Wohnorte angezeigt werden (POI & Sprechblase mit Namen). Wie das prinzipiell gehen könnte (Layer) habe ich mir an einigen Beispielen schon angelesen - aber:

  • Kann man das auch so machen, das die reine Adresse den POI setzt, oder muss man immer eine Koordinate haben?
  • Wie kommt man zu der genauen Koordinate?
  • Gibt es bereits eine Lösung, wie man Adressen aus einer Baseportal-Datenbank zur Anzeige nutzen kann (also eine Direktverlinkung bp-DB → OSM)?

Vielleicht hat jemand sowas schonmal realisiert und kann das Ergebnis seiner erfolgreichen Arbeit hier posten.

Mit Google Maps liesse sich so eine Karte ziemlich einfach realisieren, aber inzwischen sind ja alle so NSA-hysterisch, das das nicht in Frage kommt. Wir sind gefordert, die Adressdaten in der eigenen HTML-Datei halten, resp. in einer bp-DB.

Vielen Dank!

Dafür braucht man irgendeine Art von Geocoding, bei OSM üblicherweise mit Nominatim, was man auch bei sich selbst installieren kann, wenn man die Adressen nicht an andere übermitteln möchte (was leider immernoch viel zu selten ist…).

OT: Denkt bitte auch an eine gescheite Zugangssicherung der Webseite.

Willkommen im Forum,

Schau Dir mal umap.openstreetmap.fr an.

Besteht m.A.n. Den G… Vergleich.

Wie man einen Schwung Adressen auf einmal geocodiert (mit Koordinaten versieht) hab ich aber leider nicht parat.

Christoph

siehe hier: http://www.gpsvisualizer.com/geocoder/
in Klassenstärke sollte das gehen.

Vielen Dank für den Hinweis, aber Zugriff wird ausschließlich für angemeldete User möglich sein (Eltern und Kinder). Deshalb wollen wir ja auch die Wohnorte/Adressen lokal halten und nicht Google schenken … :slight_smile:

Hier ist die Lösung mit openlayer : http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example

Mit http://www.gpsvisualizer.com/geocoder/ lassen sich jetzt nur noch 5 Adressen auf einmal geokodieren,
aber trotzdem recht einfach: oben ins Fenster Adresse rein, im unteren Fenster Koordinaten im CSV Format raus.

Aber nicht mit Google, das darf man nur, wenn man die Ergebnisse auf einer Google-Karte anzeigt. Siehe https://developers.google.com/maps/documentation/geocoding/?hl=de#Limits .

Mit Nominatim darf man es: http://wiki.openstreetmap.org/wiki/Nominatim_usage_policy .

Also: Für jede Adresse


http://nominatim.openstreetmap.org/search?q=Unter%20den%20Linden%2042,%20Berlin&format=xml&polygon=0&addressdetails=0
--------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----...

anpassen, aus dem Ergebnis das lat=“52.517102” lon=“13.3859461” raussuchen, und das in den Marker schreiben.

Bei 30-40 Kindern ist das ja manuell machbar.

Es gibt auch noch weitere OSM-basierte Geocoding-Dienste:

http://wiki.openstreetmap.org/wiki/Search_engines

einfach mal ausprobieren …

Das ist eben das Problem: Wenn sich mal eine Adresse ändert, dann muss man immer händisch den Geocode ermitteln und alles wieder ändern. Wäre doch viel einfacher, wenn man die Adresse direkt benutzt, um den/die Wohnort(e) anzeigen zu lassen.

Idealer Weise könnte das ganze so funktionieren:

Bei einer Adressänderung (macht nur der Admin) generiert der Admin eine .csv Textdatei mit Name, Strasse, Wohnort etc. - dabei lässt sich durchaus ein Header einbauen. Beim Aufruf wird diese Datei von OSM referenziert und die Adressen als POI’s dargestellt mit den Namen+Adresse etc. in einer Sprechblase.

träum:roll_eyes:

Wenn sich eine ADresse ändert, muss der Admin auf jeden Fall etwas manuell tun. Die neue Adresse in einen Geocoder stecken und die Koordinaten koopieren, dauert max. 40 Sek.
Alles andere gibt es in dem obigen Beispiel.

Bei >100 Adressen würde ich auch automatisch lan und lot auf dem Nomatim Ergebnis filtern.

Das hört sich in der Theorie alles ganz gut an, aber ich hab schon mehrere solche Sachen gemacht und da läuft es immer ähnlich: ein paar Jahre ist ruhe und auf einmal muss man doch was ändern. Dann geht wieder die Überlegerei los: Wie hab ich das damals gemacht? Hab ich mir das nicht irgendwo aufgeschrieben? Wo ist dieser blöde Zettel resp. die blöde Datei? Und dann gibt es den einstmals genutzten Service nicht mehr oder das Passwort ist weg, oder wie war nochmal der Link … Also fängt man alle Jahre wieder von vorne an. Nene, es muss einfach sein - so einfach, das man auf Anhieb sieht wie es geht - darin liegt die große Kunst! Kompliziert kann jeder.

Mal 'ne kleine Frage zu deinem Projekt: Stehen alle Adressen bereits in OSM und/oder sollen eventuelle fehlende Adressen in OSM erfaßt werden? Natürlich ohne Namen der Bewohner und ähnlichen Daten. Das ist mMn die Mindestvoraussetzung um mit Nominatim vernünftige Geolocations zu erhalten.

Gruss
walter

ps: wenn nicht gerade Ferien wäre, hätten das die Schüler ja machen können - aber die sind ja jetzt wohl schwer zu erreichen.

Hab die Adressliste bei dir lokal liegen
schreib dir ein Skript/Programm/“Äpp” :roll_eyes: , das alle Adressen aus deiner Liste per Nominatim geocodiert, und die Adressen mit lat/lon in eine <liste_geocodiert.csv> schreibt
Spiele diese <liste_geocodiert.csv> auf deinen Server
Benutze die hier schon verlinkte Methode, um mit OpenLayers die Adressen aus der <liste_geocodiert.csv> als Marker anzuzeigen

Dann hast du deine Automatisierung, die ja auch ihre eigene Dokumentation ist (so komplex ist der nötige Code ja nicht)

Danke für die kontra-produktive Antwort :frowning:

Diese “Lösung” hat mindestens 2 gravierende Mängel: sie funktioniert nur sauber, falls die Adressen bereits in OSM vorhanden sind.
Sie verhindert, daß fehlende Adressen in OSM eingetragen werden - schließlich soll OSM besser werden.

Gruss
walter

Nee, es ist voraussetzung (wie du schon schriebst) das die Adressen in OSM vorhanden sind. Also müssen die Leute, wenn die Geocodierung nicht funktioniert, die korrekten Adressen nachtragen. Ich dachte, das wäre klar.

edit: Mit Adressliste meine ich ein Mapping “Franz wohnt in der Haupstraße 6 in 12345 Ort, Fritz wohnt in Bahnhofstraße 42, 12345 Ort”.

Naja, mir schien das nicht so klar - und erst recht nicht so, daß es ein Newbie auch verstehen würde.

Und wenn ich sowas lese “Beim Aufruf wird diese Datei von OSM referenziert und die Adressen als POI’s dargestellt” bemerke ich, dass dem Fragesteller noch einiges an Wissen fehlt. Dann bin ich lieber etwas pingelig und übergenau, damit auch wirklich Klarheit herrscht.

Mir fehlt zumindest die Info, welche Adressen er wie woher und womit auswerten will, damit er sie letztendlich wie auch immer darstellen kann.

Ich selber sehe einen Weg, bin mir aber nicht klar darüber, ob er den gehen kann und ob er die Voraussetzungen (Erfassung in OSM) dafür schaffen will. Oder aber die Adressen sind schon komplett in OSM drin (was mich wundern würde) - dann hab ich nix gesagt.

Gruss
walter

Okay, ich lese Verwirrung …

Erstmal grundsätzlich: baseportal ist eine internet-basierte Datenbank. Damit lege ich eine Datenbanktabelle mit den Adressen an (also: Name, Strasse, PLZ, Ort, Geburtsdatum … etc. pipapo). Vermittels bp generiere ich dann eine Ausgabe, die in eine .html-Seite eingebaut wird. Datenerfassung und Änderung machen nicht die User, sondern ich als Admin. Nun soll es eine weitere Seite geben, auf der die Wohnorte aller Schüler als POI’s markiert sind. Das wäre idealer Weise eine Markierung und eine Sprechblase mit verschiedenen Daten wie Name und Telefonnummer - oder man erhält diese Information beim Klicken auf die Markierung. Aus Datenschutzgründen sollen die Adressdaten lokal (also auf dem eigenen Server) bleiben und nicht zu einem Dienst hochgeladen werden (z.B. Google).

Innerhalb des bp-systems ist es möglich, die Daten der Datenbank(tabelle) als .csv zu exportieren (incl. header). Sie liegen dann weiter auf dem bp-Account. Auf Sie kann mit einer URL zugegriffen werden. Ich will meine Vision mal explizit durchgehen:

  1. Schritt: Die Daten liegen alle in der bp-Datenbank
NR   NAME     STRASSE     PLZ       ORT      
1    Fritz    A-Strasse   12345     A-Dorf
2    Lena     B-Strasse   12346     B-Dorf
...
  1. Schritt: bei Adressänderung wird in bp eine neue .csv-Datei generiert (adressen.csv)
NR,NAME,STRASSE,PLZ,ORT      
1,Fritz,A-Strasse,12345,A-Dorf
2,Lena,B-Strasse,12346,B-Dorf
...
  1. Schritt: OSM wird über ein Skript aufgerufen, das auf diese .csv-Datei über den Link (www.baseportal.de/…/schule/adressen.csv) zugreift (also diese Datei referenziert - oder sagt man das heute nicht mehr??), und diese Daten dazu benutzt, einen POIs-Layer zu generieren und die Karte mit POI-Layer aufzurufen. Die Adresse wird dazu benutzt den Punkt zu lokalisieren, und dann werden die anderen Daten des entspr. Datensatzes in die Sprechblase geschrieben. In der Datenbank sollen keine Geocodes stehen!!!

War das jetzt so verständlich?

Die vorher genannte Funktion:

http://nominatim.openstreetmap.org/search?q=Unter%20den%20Linden%2042,%20Berlin&format=xml&polygon=0&addressdetails=0

ist schön und gut, aber es gibt keinen Parameter, der eine Markierung generiert, die beim Zoomen der Karte erkennbar bleibt. Der Parameter polygon zeigt im Teststring einen Kreis um den POI, bei meiner pers. Adresse wird ein Umriss des Gebäudes gezeigt, aber wenn man rauszoomt sieht man nix mehr …

Auch wenn ich mich wiederhole:
Um aus einer CSV Datei eine Karte mit Markern zu machen ist dies das Einfachste:
http://wiki.openstreetmap.org/wiki/Openlayers_POI_layer_example

Mit nominatim die Koordintaten zu den Adressen ermitteln und in das CSV an die richtige Stelle reinstellen, sollte auch kein wirkliches PRoblem sein.

ich auch noch ein wenig :wink:

Ok, Schritte 1&2 sind lokal bei dir und was du da anstellst, ist deine Sache. Wenn du das mit BP machen kannst, mach es. Es spricht nichts dagegen, das mit BP zu machen, wenn du damit klar kommst. Nur wird die Unterstützung von hier aus wohl sehr dürftig sein.

Aber wie der Kollege bereits (mehrfach?) erwähnte, reicht eine kleine CSV-Datei bestimmt dafür aus.

Nö.

a) “OSM wird über ein Skript aufgerufen” - was meinst du damit? OSM kann man nicht “aufrufen”. Ich nehme mal an, du meinst OpenLayers - oder möchtest du einen andere Javascript-Library zum Visualisieren einsetzen? Wir hätten da noch Leaflet im Angebot.

b) die lokalen Daten (wie Namen, Klassenzugehörigkeit oder andere vertrauliche Infos) für den Popup zu verwenden, ist natürlich absolut ok.

c) “Die Adresse wird dazu benutzt den Punkt zu lokalisieren” ist auch sinnvoll (z.B. mit Nominatim).

Dazu ein letztes Mal meine wohl inzwischen nervende Frage: Was macht ihr, wenn diese Adresse nicht in OSM drin steht?

  • mit dem Näherungswert von Nominatim leben?
  • Adresse in OSM (Stadt, Straße, Hausnummer, PLZ - mehr nicht) in OSM eintragen?

Jo, das ist (uns) sonnenklar: nominatim.openstreetmap.org ist eine Demoseite, genau so wie openstreetmap,.org oder openstreetmap.de.
Dort kann man sehen, wie das funktionieren würden, wenn man die entsprechenden Funktionen in seine eigene Anwendung einbauen würde.

Du musst dich mit der Nominatim-API beschäftigen, die deiner Anwendung die notwendigen Informationen liefert. Diese kann dann deine Anwendung benutzen und auch deiner Karte darstellen. Ein einfaches Aufrufen des URL im Webbrowser reicht da nicht, du musst das von deiner Anwendung aus machen.

Hier bestehen noch kleinere Wissenslücken, (die ich auch am Anfang hatte) und die wir nach und nach füllen können.

Hier ganz schnell gefunden: http://www.netzwolf.info/kartografie/openlayers/searchbox.htm Schau dir den javascript-Code mal an, da hast du Openlayers, Nominatim und einen Popup zusammen. Das wäre schon mal ein Anfang.

Gruss
walter

ps:bitte nicht die Antwort auf meine Frage vergessen - davon hängt - für mich - ganz entscheidend ab, wie es weitergeht.

Vielleicht reden hier alle aneinander vorbei!
Was man braucht um etwas mit openlayers oder ähnlichem anzuzeigen ist ganz einfach eine Koordinate!
Es wäre also sehr viel einfacher, wenn du in deiner Datenbank zu jedem Datensatz noch lat und long speicherst!
Die damit erzeugte csv-Datei kannst du dann tatsächlich mit openlayers anzeigen.

Der Schritt um aus den Adressen Koordinaten zu machen heißt Geokodierung. Das kann man mit nominatim machen. Vorraussetzung dafür ist jedoch, dass die Adresse (A-Straße Hausnummer in Bdorf) bereits in OSM vorhanden ist. Ansonsten erhält man kein Ergebnis. Auch erscheint es wenig sinnvoll für jeden Aufruf wieder eine solche Geokodierung durchzuführen, da dies sehr aufwendig ist.