in Vorbereitung auf einen Domänsplit möchte ich überlegen, was für Grenzen sinnvoll wären. Einfach um Mal eine Vorstellung davon zu bekommen, wie viele Router in welchem Postleitzahlenbereich stehen oder ähnliches.
Dazu suche ich ein Tool, in das ich die JSON der Karte schmeißen kann, und dann in irgendeiner Form eine Gruppierung vornehmen kann.
Hat jemand sowas schon Mal gebaut? Ich dachte, ich frage einfach Mal, ob es sowas schon gibt.
Gerüchteweise soll @thomasDOTwtf da schon Mal was gebastelt haben? Gerüchteweise soll das auch mit der OpenStreetMap gehen.
Letztendlich muss man ja nur die GPS-Koordinaten einer Adresse zuordnen und dann hat man es…
Folgendes Shell Script ergibt bei Aufruf mit den Lat Long Koordinaten die Strassenadresse inkl. Postleitzahl.
Beispiel:
./QueryLatLong 50.769681 6.080055
gibt folgendes aus:
Stephanstraße 42-44, 52064 Aachen, Germany
So kriegst da also die PLZ zu einer Geokoordinate raus…
Falls du jetzt ne Massenabfrage starten willst, würde ich zwischen die Einzelnen Aufrufe aber schon ein Sleep reinpacken, ich denke, deren Server macht bei zu vielen Aufrufen per Zeitfenster zu.
#!/bin/bash
cplzs=-1
function wegsortieren {
if [[ $plz == "" ]]; then
return 1
fi
echo $plz
for i in `seq 0 $cplzs`; do
if [[ "${speicher[$i]}" == "$plz" ]]; then
((zaehler[$i]++))
return 0
fi
done
cplzs=$((cplzs+1))
speicher[$cplzs]=$plz
zaehler[$cplzs]=1
return 0
}
if [ "$1" == "" ]; then
echo 'Du hast vergessen den Link zur json-Datei anzugeben. Beim Meshviewer ist dieser <Link-zur-Karte>/data/nodes.json.'
exit 1
fi
mode=0
for i in `wget -qO - $1|grep -i 'latitude' -A1`; do
if [ $mode -eq 0 ]; then
mode=1
continue
elif [ $mode -eq 1 ]; then
lat=`echo $i|tr -d ','`
mode=2
continue
elif [ $mode -eq 2 ]; then
mode=3
continue
elif [ $mode -eq 3 ]; then
lng=`echo $i|tr -d ','`
mode=4
continue
else
mode=0
#echo "Lat $lat Long $lng"
plz=`wget -qO - "http://maps.googleapis.com/maps/api/geocode/json?latlng=$lat,$lng&sensor=true"|grep '"[0-9][0-9][0-9][0-9][0-9]"'|head -n1`
plz=${plz##*\ :\ \"}
plz=${plz%%\"*}
#echo $plz
wegsortieren $plz
fi
sleep 0.5s
done
echo '========================'
echo '========================'
echo
for i in `seq 0 $cplzs`; do
echo "${speicher[$i]}: ${zaehler[$i]}" >> ausgabe.txt
done
Das bringt mich persönlich aber nicht weiter, da die Einteilung gerade in Ballungsgebieten wie hier in Münster, doch sehr grob ist und teilweise mitten durch Stadtteile hindurch geht.
Man müsste besser auf der Karte Polygone setzen können und dann prüfen, wie viele Knoten darin sind.
Postleitzahl 48159 ist ein gutes Beispiel, dass so eine Einteilung leider nicht geht:
Von relativ zentral inklusive eines der größten Einkaufszentren in Münster bis ganz raus in die Wallachei.
Naja, aber falls dich ein Neu-Interessent fragt, in welche Domäne er denn nu gehört, ist die Frage „Welche PLZ hast du“ sicherlich einfacher zu klären als „in welchem Polygon ist dein Standort“…
Brauchen wir das „einmalig“ als Entscheidungsgrundlage oder als „online“-Lösung? Im ersten Fall kann ich gerne den Münsterländer Routerkoordinaten einmal alle verfügbaren Gebietsaufteilungen (Kommune, Stadtteil, PLZ) zuordnen, damit man eine Datenbasis hat.
danke für das Angebot. darauf würde ich gerne zurück kommen.
Also Postleitzahlen kannst du dir sparen, das hab ich schon gemacht. Das ist, wie oben geschrieben, hier leider nicht sehr aussagekräftig. Hier übrigens die Übersicht, falls es jemanden interessiert:
Was mich mehr interessiert ist, wäre die Aufteilung in die Kreise (Steinfurt, Warendorf, Coesfeld) und Münster.
Und dann ggfs. nochmal versuchen das jetzt schon ziemlich große Münster noch sinnvoll aufzuteilen. Also ich denke da vorallem an Hiltrup, dass man das evtl. Warendorf oder Coesfeld zuschlägt.
Hier die Zusammenstellung: http://data.jostlemke.de/ffml-regional.csv
Für die Pivot-Tabelle: „id“ als Größe zum Zählen und für die Kategorien die Spalten „name_2“, „name_pre_2“, „name_pre_1“ und „23“ (Kreis, Gemeinde und für MS: Stadtbezirk und Stadtteil).
@MPW: Du kannst den OSM (Nominatim) Reverse Gecoder nutzen, dann kannst du das ondemand für jeden Node entscheiden. Du übergibst einfach lat/lon und erhältst die entsprechende Adresse inklusive aller vorhandenen Verwaltungsebenen. Beispiel eines Nodes von mir: https://nominatim.openstreetmap.org/reverse?lat=52.0210093&lon=7.5620507
Dort ist z. B. Hiltrup in drei Teile aufgeteilt: Hiltrup-Mitte, Hiltrup-West und Hiltrup-Ost. Dabei handelt es sich jeweils um die offiziellen Verläufe der jeweiligen Verwaltungsebene.
Die Resultate vom Nominatim Geocoder kannst du dann in das Script von @wusel werfen.
Bei der Google-API ist zu beachten, das es ein Query-Limit gibt.
Das ist IP-basiert, muss man abfangen und ggf über (mehrere) DSL-Anschlüsse laufen lassen.
Das Limit dürfte pro Tag gelten, man kann also vermutlich auch ohne sleep kurz ‚Volldampf‘ geben.
Ne, als ich mein Skript oben ohne sleep habe laufen lassen, gab es viele Zurückweisungen. Mit dem sleep läuft es für die ~650 Datensätze ohne Probleme durch.