Modul:Geo: Unterschied zwischen den Versionen
Aus FürthWiki
(getPLZList() optimiert) |
(GetPLZ/getPLZ optimiert) |
||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
local com = require(" | local com = require("Modul:Common") | ||
local que = require(" | local que = require("Modul:Queries") | ||
local str = require("Modul:String") | local str = require("Modul:String") | ||
| Zeile 23: | Zeile 23: | ||
function p.GetHausnummerZahl(frame) | function p.GetHausnummerZahl(frame) | ||
-- #invoke wrapper | -- #invoke wrapper | ||
return p.getHausnummerZahl(frame.args[1]) | return p.getHausnummerZahl(frame.args[1] or "") | ||
end | end | ||
function p.getHausnummerZahl(hausnummer) | function p.getHausnummerZahl(hausnummer) | ||
-- Hausnummer ohne Buchstaben extrahieren, um damit PLZ zu ermitteln | -- Hausnummer ohne Buchstaben extrahieren, um damit PLZ zu ermitteln | ||
return tonumber(string.match("0" .. (hausnummer or ""), "%d+")) | |||
end | end | ||
function p.GetPLZ(frame) | function p.GetPLZ(frame) | ||
-- Vorlage zum Testen in Konsole: =p.GetPLZ({args={["Straße"]="",["Hausnummer"]=""}}) | |||
local | local plz = "" | ||
local strasse = frame.args["Straße"] or "" | |||
local | local hausnummer = frame.args["Hausnummer"] or "" | ||
-- Nur die erste Hausnummer aus einer eventuellen Liste extrahieren | |||
-- Bei Gebäude-Komplexen mit mehreren Hausnummern ist in Fürth nicht unbedingt anzunehmen, | |||
-- | |||
-- Bei Gebäude-Komplexen mit mehreren | |||
-- dass diese sich auf mehrere PLZs verteilen | -- dass diese sich auf mehrere PLZs verteilen | ||
hausnummer = str.splitAndStrip(hausnummer, ";") | |||
if #hausnummer > 0 then | |||
hausnummer = hausnummer[1] | |||
else | |||
hausnummer = "" | |||
end | |||
plz = p.getPLZ(strasse, hausnummer) | |||
return plz | |||
end | end | ||
function p.getPLZ(strasse, hausnummer) | function p.getPLZ(strasse, hausnummer) | ||
local plz = | -- mw.log("getPLZ(" .. (strasse or "nil") .. ", " .. (hausnummer or "nil") .. ")") | ||
local plz = "" | |||
local hausnummer = p.getHausnummerZahl(hausnummer) -- Buchstaben hinter der Nummer abschneiden | |||
if strasse == "Breslauer Straße" then plz = 90766 -- momentan gibt es keine Gebäude in 90768 Unterfürberg und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Brunnenweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Brückenstraße" then plz = 90768 -- momentan gibt es keine Gebäude in 90765 Mannhof und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Frankenschnellweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Fuchsstraße" then plz = 90768 -- momentan gibt es keine Gebäude in 90763 Südstadt und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Heckenweg" then plz = 90762 -- momentan gibt es keine Gebäude in 90766 Schwand/Eigenes Heim und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Höfener Straße" then plz = 90763 -- momentan gibt es keine Gebäude in 90762 Stadtgrenze und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Käppnerweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Stadelner Straße" then plz = 90768 -- momentan gibt es keine Gebäude in 90765 Mannhof und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Südwesttangente" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Südwesttangente" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt | |||
elseif strasse == "Schwabacher Straße" then | |||
if hausnummer % 2 == 0 then if hausnummer < 66 then plz = 90762 else plz = 90763 end -- gerade H.nr. | |||
elseif hausnummer < 53 then plz = 90762 else plz = 90763 end -- ungerade H.nr. | |||
elseif strasse == "Vacher Straße" then | |||
if hausnummer % 2 == 0 then if hausnummer < 250 then plz = 90766 else plz = 90768 end -- gerade H.nr. | |||
elseif hausnummer < 225 then plz = 90766 else plz = 90768 end -- ungerade H.nr. | |||
elseif strasse == "Würzburger Straße" then | |||
if hausnummer % 2 == 0 then if hausnummer < 36 then plz = 90762 elseif hausnummer < 400 then plz = 90766 else plz = 90768 end -- gerade H.nr. | |||
elseif hausnummer < 9 then plz = 90762 elseif hausnummer < 401 then plz = 90766 else plz = 90768 end -- ungerade H.nr. | |||
else | |||
local plzask = que.getValues(strasse, "PLZ", true) -- alle anderen Straßen haben nur eine PLZ, die auf deren Seite vemerkt ist | |||
if #plzask == 1 then -- mehr als eine oder keine PLZ? | |||
plz = plzask[1] | |||
end | end | ||
end | end | ||
-- mw.log("plz = " .. plz) | |||
return plz | return plz | ||
end | end | ||
Version vom 7. Oktober 2025, 16:53 Uhr
getPLZ() / GetPLZ()
Liefert die Postleitzahl einer Straße mit Hausnummer zurück.
Test
-getPLZ(Königstraße)- ergibt -90762-
|
-getPLZ(Königstraße|1)- ergibt -90762-
|
-getPLZ(Königstraße|1000)- ergibt -90762-
|
-getPLZ(Breslauer Straße)- ergibt -90766-
|
-getPLZ(Breslauer Straße|1)- ergibt -90766-
|
-getPLZ(Breslauer Straße|1000)- ergibt -90766-
|
-getPLZ(Brunnenweg)- ergibt --
|
-getPLZ(Brunnenweg|1)- ergibt --
|
-getPLZ(Brunnenweg|1000)- ergibt --
|
-getPLZ(Brückenstraße)- ergibt -90768-
|
-getPLZ(Brückenstraße|1)- ergibt -90768-
|
-getPLZ(Brückenstraße|1000)- ergibt -90768-
|
-getPLZ(Frankenschnellweg)- ergibt --
|
-getPLZ(Frankenschnellweg|1)- ergibt --
|
-getPLZ(Frankenschnellweg|1000)- ergibt --
|
-getPLZ(Fuchsstraße)- ergibt -90768-
|
-getPLZ(Fuchsstraße|1)- ergibt -90768-
|
-getPLZ(Fuchsstraße|1000)- ergibt -90768-
|
-getPLZ(Heckenweg)- ergibt -90762-
|
-getPLZ(Heckenweg|1)- ergibt -90762-
|
-getPLZ(Heckenweg|1000)- ergibt -90762-
|
-getPLZ(Höfener Straße)- ergibt -90763-
|
-getPLZ(Höfener Straße|1)- ergibt -90763-
|
-getPLZ(Höfener Straße|1000)- ergibt -90763-
|
-getPLZ(Käppnerweg)- ergibt --
|
-getPLZ(Käppnerweg|1)- ergibt --
|
-getPLZ(Käppnerweg|1000)- ergibt --
|
-getPLZ(Schwabacher Straße)- ergibt -90762-
|
-getPLZ(Schwabacher Straße|1)- ergibt -90762-
|
-getPLZ(Schwabacher Straße|2)- ergibt -90762-
|
-getPLZ(Schwabacher Straße|51)- ergibt -90762-
|
-getPLZ(Schwabacher Straße|53)- ergibt -90763-
| |
-getPLZ(Schwabacher Straße|62)- ergibt -90762-
|
-getPLZ(Schwabacher Straße|66)- ergibt -90763-
| |
-getPLZ(Schwabacher Straße|1000)- ergibt -90763-
|
-getPLZ(Schwabacher Straße|1001)- ergibt -90763-
| |
-getPLZ(Stadelner Straße)- ergibt -90768-
|
-getPLZ(Stadelner Straße|1)- ergibt -90768-
|
-getPLZ(Stadelner Straße|1000)- ergibt -90768-
|
-getPLZ(Südwesttangente)- ergibt --
|
-getPLZ(Südwesttangente|1)- ergibt --
|
-getPLZ(Südwesttangente|1000)- ergibt --
|
-getPLZ(Vacher Straße)- ergibt -90766-
|
-getPLZ(Vacher Straße|1)- ergibt -90766-
|
-getPLZ(Vacher Straße|2)- ergibt -90766-
|
-getPLZ(Vacher Straße|221)- ergibt -90766-
|
-getPLZ(Vacher Straße|227)- ergibt -90768-
| |
-getPLZ(Vacher Straße|226)- ergibt -90766-
|
-getPLZ(Vacher Straße|250)- ergibt -90768-
| |
-getPLZ(Vacher Straße|1000)- ergibt -90768-
|
-getPLZ(Vacher Straße|1001)- ergibt -90768-
| |
-getPLZ(Würzburger Straße)- ergibt -90762-
|
-getPLZ(Würzburger Straße|1)- ergibt -90762-
|
-getPLZ(Würzburger Straße|2)- ergibt -90762-
|
-getPLZ(Würzburger Straße|7)- ergibt -90762-
|
-getPLZ(Würzburger Straße|9)- ergibt -90766-
| |
-getPLZ(Würzburger Straße|34)- ergibt -90762-
|
-getPLZ(Würzburger Straße|36)- ergibt -90766-
| |
-getPLZ(Würzburger Straße|398)- ergibt -90766-
|
-getPLZ(Würzburger Straße|400)- ergibt -90768-
| |
-getPLZ(Würzburger Straße|399)- ergibt -90766-
|
-getPLZ(Würzburger Straße|401)- ergibt -90768-
| |
-getPLZ(Würzburger Straße|1000)- ergibt -90768-
|
-getPLZ(Würzburger Straße|1001)- ergibt -90768-
| |
-getPLZ(Fürther Straße)- ergibt --
|
-getPLZ(Fürther Straße|1)- ergibt --
| |
-getPLZ(BlaBla)- ergibt --
|
-getPLZ(BlaBla|1)- ergibt --
|
getHausnummerZahl() / GetHausnummerZahl()
Unterfunktion, die die Zahl einer Hausnummer ohne Buchstaben rückliefert
Test
-getHausnummerZahl(123a)-ergibt-123--getHausnummerZahl(123 a)-ergibt-123--getHausnummerZahl(123a4)-ergibt-123--getHausnummerZahl(123 4)-ergibt-123--getHausnummerZahl(123½)-ergibt-123--getHausnummerZahl(123)-ergibt-123--getHausnummerZahl()-ergibt-0-
getPLZList() / GetPLZList()
Liefert eine Liste aller Postleitzahlen in Fürth zurück.
Query: [[Kategorie:Postleitzahlen]] [[PLZ::+]]
GetPLZList() ergibt Lua-Fehler in Zeile 89: attempt to call field 'list' (a nil value)
stadtteil2PLZ() / Stadtteil2PLZ()
Liefert die Postleitzahlen von Stadtteilen zurück. Syntax:
stadtteil2PLZ(stadtteile)mitstadtteileals tableStadtteil2PLZ(frame)mit Stadtteile als Argument 1 (Beispiel:{{#invoke:Geo|Stadtteil2PLZ|Innenstadt}})
Test
-stadtteil2PLZ("Innenstadt")-ergibt-Lua-Fehler in Zeile 104: attempt to call field 'list' (a nil value)--stadtteil2PLZ("Innenstadt;Ronhof")-ergibt-Lua-Fehler in Zeile 104: attempt to call field 'list' (a nil value)--stadtteil2PLZ("")-ergibt---stadtteil2PLZ()-ergibt--
Unterseiten
Siehe auch
local p = {}
local com = require("Modul:Common")
local que = require("Modul:Queries")
local str = require("Modul:String")
function p.OSMlink(frame)
local dms_coords = frame.args[1] -- Degree, Minute, Second format
return p.osmLink(frame, dms_coords)
end
function p.osmLink(frame, dms_coords)
local float_coords = frame:callParserFunction('#coordinates', {dms_coords, format='float', directional='no'})
local coords = str.split(float_coords, ', ')
local dms_split = str.split(dms_coords, ',')
local url = '[https://www.openstreetmap.org/?' ..
'mlat=' .. coords[1] .. '&' ..
'mlon=' .. coords[2] .. '#' ..
'map=18/' .. coords[1] .. '/' .. coords[2] .. ' ' ..
dms_split[1] .. '<br>' .. dms_split[2] .. ']'
return url
end
function p.GetHausnummerZahl(frame)
-- #invoke wrapper
return p.getHausnummerZahl(frame.args[1] or "")
end
function p.getHausnummerZahl(hausnummer)
-- Hausnummer ohne Buchstaben extrahieren, um damit PLZ zu ermitteln
return tonumber(string.match("0" .. (hausnummer or ""), "%d+"))
end
function p.GetPLZ(frame)
-- Vorlage zum Testen in Konsole: =p.GetPLZ({args={["Straße"]="",["Hausnummer"]=""}})
local plz = ""
local strasse = frame.args["Straße"] or ""
local hausnummer = frame.args["Hausnummer"] or ""
-- Nur die erste Hausnummer aus einer eventuellen Liste extrahieren
-- Bei Gebäude-Komplexen mit mehreren Hausnummern ist in Fürth nicht unbedingt anzunehmen,
-- dass diese sich auf mehrere PLZs verteilen
hausnummer = str.splitAndStrip(hausnummer, ";")
if #hausnummer > 0 then
hausnummer = hausnummer[1]
else
hausnummer = ""
end
plz = p.getPLZ(strasse, hausnummer)
return plz
end
function p.getPLZ(strasse, hausnummer)
-- mw.log("getPLZ(" .. (strasse or "nil") .. ", " .. (hausnummer or "nil") .. ")")
local plz = ""
local hausnummer = p.getHausnummerZahl(hausnummer) -- Buchstaben hinter der Nummer abschneiden
if strasse == "Breslauer Straße" then plz = 90766 -- momentan gibt es keine Gebäude in 90768 Unterfürberg und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Brunnenweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Brückenstraße" then plz = 90768 -- momentan gibt es keine Gebäude in 90765 Mannhof und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Frankenschnellweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Fuchsstraße" then plz = 90768 -- momentan gibt es keine Gebäude in 90763 Südstadt und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Heckenweg" then plz = 90762 -- momentan gibt es keine Gebäude in 90766 Schwand/Eigenes Heim und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Höfener Straße" then plz = 90763 -- momentan gibt es keine Gebäude in 90762 Stadtgrenze und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Käppnerweg" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Stadelner Straße" then plz = 90768 -- momentan gibt es keine Gebäude in 90765 Mannhof und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Südwesttangente" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Südwesttangente" then -- momentan gibt es keine Gebäude und eine Hausnummer-Grenze nicht bekannt
elseif strasse == "Schwabacher Straße" then
if hausnummer % 2 == 0 then if hausnummer < 66 then plz = 90762 else plz = 90763 end -- gerade H.nr.
elseif hausnummer < 53 then plz = 90762 else plz = 90763 end -- ungerade H.nr.
elseif strasse == "Vacher Straße" then
if hausnummer % 2 == 0 then if hausnummer < 250 then plz = 90766 else plz = 90768 end -- gerade H.nr.
elseif hausnummer < 225 then plz = 90766 else plz = 90768 end -- ungerade H.nr.
elseif strasse == "Würzburger Straße" then
if hausnummer % 2 == 0 then if hausnummer < 36 then plz = 90762 elseif hausnummer < 400 then plz = 90766 else plz = 90768 end -- gerade H.nr.
elseif hausnummer < 9 then plz = 90762 elseif hausnummer < 401 then plz = 90766 else plz = 90768 end -- ungerade H.nr.
else
local plzask = que.getValues(strasse, "PLZ", true) -- alle anderen Straßen haben nur eine PLZ, die auf deren Seite vemerkt ist
if #plzask == 1 then -- mehr als eine oder keine PLZ?
plz = plzask[1]
end
end
-- mw.log("plz = " .. plz)
return plz
end
function p.GetPLZList(frame)
local sep = frame.args.sep or ";"
local plzTable = p.getPLZList()
local plzList = str.list(plzTable, sep)
return plzList
end
function p.getPLZList()
return {90705, 90762, 90763, 90765, 90766, 90768}
end
function p.Stadtteil2PLZ(frame)
-- mw.logObject(frame)
local plzlist = ""
local stadtteile = frame.args[1]
if not com.isEmpty(stadtteile) then
local stadtteilTable = str.split(stadtteile, ";")
local plztable = p.stadtteil2PLZ(stadtteilTable)
plzlist = str.list(plztable, ";")
end
-- mw.log(plzlist)
return plzlist
end
function p.stadtteil2PLZ(stadtteile)
-- gibt die Postleitzahlen der Stadtteile als table zurück
local plztable = {}
if not com.isEmpty(stadtteile) then
if type(stadtteile) == "table" then
for _, s in pairs(stadtteile) do
for _, p in pairs(que.getValues(s, "PLZ", true)) do -- p ist string
plztable[tonumber(p)] = true -- diese Mechanik verhindert mehrfaches Einfügen der gleichen PLZ
end
end
else
plztable[tonumber(que.getValues(stadtteile, "PLZ", true)[1])] = true
end
end
-- mw.logObject(plztable)
local plzlist = {} -- Tabelle in sortierte Liste überführen
for p, _ in pairs(plztable) do
table.insert(plzlist, p)
end
table.sort(plzlist)
-- mw.logObject(plzlist)
return plzlist
end
return p