Adding Nominatim


#1

Im Zuge der Erneuerung der Luftdatenpumpe im Datenmischwerk und überhaupt wollen wir uns eine eigene Nominatim - OpenStreetMap Wiki Instanz zulegen, vor allem um Reverse geocoding - Wikipedia damit zu betreiben.

Das lässt sich auf verschiedene Art und Weise realisieren, wir schauen uns gerade diese Variante an:

Erstmal werden wir nur die Daten für Deutschland importieren.


#2

In general the import of data in postgres is a very time consuming process that may take hours or days.

nominatim-docker/3.1 at master · mediagis/nominatim-docker · GitHub

Der Import läuft nun seit dem 2. Dezember um 00:13 CET auf einer Maschine mit normalen Spindle Disks.


#4

Der Import läuft immer noch, aktueller Füllstand:

$ du -sch /var/spool/nominatim/postgresdata

64G	total

#5
2018-12-14 03:36:06 == Setup finished.
du -sch /var/spool/nominatim/postgresdata
74G	total

#8

Es wäre natürlich toll, ganz Europa in der Datenbank zu haben, aber wir wollten erstmal kleiner anfangen und wie sich zeigte ist der Datensatz für Deutschland schon groß genug.

Ob man da dann Resteuropa auch noch einfach zusätzlich in die Datenbank bekommt, oder ob man nochmal alles von vorne machen muss, wird sich zeigen.

Normalerweise stellt man sich ja mit osmosis, osmconvert oder osmium-merge erstmal eigene OSM subsets her, die man dann in die Datenbank füttert - soweit wir das verstanden haben. An dieser Stelle haben wir uns beim allerersten Lauf auf “germany-latest.osm.pbf” beschränkt, das wir unmodifiziert von https://www.geofabrik.de/ bezogen haben.


#9

Leistungsvergleich

Eigene Instanz

time http nominatim.example.org:7070/reverse lat==52.944 lon==13.674 format==json
real 0m1.386s
user 0m0.289s
sys 0m0.057s

Original nominatim.openstreetmap.org

time http https://nominatim.openstreetmap.org/reverse lat==52.944 lon==13.674 format==json
real 0m0.584s
user 0m0.295s
sys 0m0.061s

Fazit

Die eigene Instanz schneidet vom Fleck weg also erstmal deutlich schlechter ab als das Original, zumindest in der von GitHub - mediagis/nominatim-docker: 100% working container for Nominatim vorgegebenen Systemkonfiguration. Schade!

Wir gehen jetzt mal davon aus, dass die wichtigsten Dinge an der Basis - wie z.B. die Datenbankindizes - ordentlich konfiguriert wurden und vermuten daher die Hauptursache darin, dass das System auf herkömmlichen Spindle Disks arbeitet.


#10

Jetzt auf SSD antwortet das System deutlich flotter:

real 0m0.772s
user 0m0.295s
sys 0m0.059s

Da bisher pro Request immer noch eine volle Sekunde gewartet werden musste

ergeben sich aus dem für nominatim.openstreetmap.org gemessenen Wert eigentlich ~1.6 Sekunden. Mit der eigenen Nominatim Instanz sollten wir nun beim Reverse Geocoding im Batchbetrieb ca. doppelt so schnell unterwegs sein. Das kommt z.B. der Luftdatenpumpe sehr zu gute, da dort eine hohe Anzahl von Stationen verarbeitet werden muss.


#11

Please enjoy https://nominatim.hiveeyes.org/.

Examples

Forward search

Reverse geocoding


#12

Others seem to be doing as well:

==> /var/log/nginx/nominatim.hiveeyes.org.access.log <==
192.151.145.82 - - [18/Jan/2019:01:13:13 +0100] "GET /details.php?place_id=12045280 HTTP/1.1" 200 3598 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
192.151.145.82 - - [18/Jan/2019:01:13:15 +0100] "GET /details.php?place_id=12045282 HTTP/1.1" 200 3971 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
192.151.145.82 - - [18/Jan/2019:01:13:17 +0100] "GET /details.php?place_id=12045284 HTTP/1.1" 200 3285 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"
192.151.145.82 - - [18/Jan/2019:01:13:21 +0100] "GET /details.php?place_id=12045286 HTTP/1.1" 200 6052 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)"

Frechheit ;]!


#13

Nach einer kleinen Ergänzung von /etc/nginx/sites-enabled/nominatim.hiveeyes.org.conf um

# Block specific http user agents
# - Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
if ($http_user_agent ~* (MJ12bot)) {
    return 403;
}

jetzt nicht mehr:

$ http https://nominatim.hiveeyes.org/ User-Agent:MJ12bot/v1.4.8 --print h

HTTP/1.1 403 Forbidden
Date: Fri, 18 Jan 2019 01:53:22 GMT
Server: nginx/1.10.3

#14

Gerade festgestellt, dass jenes voneinander abweichende Ergebnisse liefert:

https://nominatim.openstreetmap.org/reverse.php?format=html&lat=48.306&lon=14.374&zoom=18
vs.
https://nominatim.hiveeyes.org/reverse.php?format=html&lat=48.306&lon=14.374&zoom=18

Kann sich das jemand erklären?


#15

Andere Datenbasis? Ich frag’ mal meine OSM-Freunde!


#16

Wir haben auf jeden Fall nur die Datenbasis für Deutschland drin, ja:

Trotzdem ist das Verhalten leicht seltsam: Scheinbar lokalisiert sich Nominatim auf den nächstgelegenen eingetragenen “Place” in Österreich, der (versehentlich?) im Deutschen Datensatz gelandet ist.


#17

Bei OSM steht auf der Seite

Data last updated:
2019/01/18 09:17 GMT

bei uns

Data last updated:
2018/11/03 21:11 GMT

Dachte gerade auch, dass die “Rundung” anders sein könnte, weil ja in der query nur drei Nachkommastellen angegeben werden. Wenn ich die ermittelten long/lat von OSM aber bei uns eingebe kommt auch das gleiche Ergebnis wie vorher:

https://nominatim.hiveeyes.org/reverse.php?format=html&lat=48.30574675&lon=14.374027499661&zoom=18


#18

Das hört sich doch stringent an, der “eigentlich richtige Punkt” ist in unserem Datensatz gar nicht mehr und es wird einfach der nächste noch vorhandene genommen.

Hast du so was bei einem “Deutschen” Datenpunkt ebenfalls beobachtet?


#19

Wenn wir nur die deutschen Daten importiert haben, warum findet er dann Rom? Oder ist die restliche Welt / große Städte / Teilgebiete doch drinnen?

https://nominatim.hiveeyes.org/reverse.php?format=html&lat=41.9015&lon=12.4608&zoom=18

edit: er zeig nur die Karte an, findet aber nichts! Hätte jetzt gedacht, er zeigt auch den letzten Punkt in Österreich gen Rom an. Aber da ist Nominatim dann doch zu schlau und mat nicht Orte, die unendlich weit weg sind.


#20

Finde ich in Ordnung, wenn ein Fleck per Koordinaten gefunden werden kann. Hier allerdings gibt es wirklich keine synthetisierte Adresse, der entsprechende Bereich im User Interface ist leer:

image