15.101
Bearbeitungen
(getPLZList() optimiert) |
K (Entfernte den Schutz von „Modul:Geo“) |
||
| (6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| 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 plz_ask = que.getValues(strasse, "PLZ", true) -- alle anderen Straßen haben nur eine PLZ, die auf deren Seite vemerkt ist | |||
if #plz_ask == 1 then -- mehr als eine oder keine PLZ? | |||
plz = plz_ask[1] | |||
end | end | ||
end | end | ||
-- mw.log("plz = " .. plz) | |||
return plz | return plz | ||
end | end | ||
function p.GetPLZList(frame) | function p.GetPLZList(frame) | ||
return table.concat(p.getPLZList(), frame.args.sep or ";") | |||
end | end | ||
| Zeile 103: | Zeile 94: | ||
function p.Stadtteil2PLZ(frame) | function p.Stadtteil2PLZ(frame) | ||
-- mw.logObject(frame) | -- mw.logObject(frame) | ||
local | local plz = "" | ||
local stadtteile = frame.args[1] | local stadtteile = frame.args[1] or "" | ||
if | if stadtteile ~= "" then | ||
local | local stadtteile = str.splitAndStrip(stadtteile, ";") | ||
plz = p.stadtteil2PLZ(stadtteile) | |||
plz = table.concat(plz, ";") | |||
end | end | ||
-- mw.log( | -- mw.log(plz) | ||
return | return plz | ||
end | end | ||
function p.stadtteil2PLZ(stadtteile) | function p.stadtteil2PLZ(stadtteile) | ||
-- gibt die Postleitzahlen der Stadtteile als table zurück | -- gibt die Postleitzahlen der Stadtteile als table zurück | ||
local | local plz_table = {} | ||
if type(stadtteile) == "table" then | |||
for _, s in pairs(stadtteile) do | |||
for _, p in pairs(que.getValues(s, "PLZ", true)) do -- p ist string | |||
plz_table[tonumber(p)] = true -- diese Mechanik verhindert mehrfaches Einfügen der gleichen PLZ | |||
end | end | ||
end | end | ||
elseif stadtteile ~= nil and stadtteile ~= "" then | |||
plz_table[tonumber(que.getValues(stadtteile, "PLZ", true)[1])] = true | |||
end | end | ||
-- mw.logObject( | -- mw.logObject(plz_table) | ||
local | local plz = {} -- Tabelle in sortierte Liste überführen | ||
for p, _ in pairs( | for p, _ in pairs(plz_table) do | ||
table.insert( | table.insert(plz, p) | ||
end | end | ||
table.sort( | table.sort(plz) | ||
-- mw.logObject( | -- mw.logObject(plz) | ||
return | return plz | ||
end | end | ||
return p | return p | ||