Modul:Gebäude: Unterschied zwischen den Versionen

rework fbdata
(Geo anstelle Geocode)
(rework fbdata)
Zeile 1: Zeile 1:
local p = {} --p stands for package
local p = {} --p stands for package
local com = require("Modul:Common")
local com = require("Modul:Common")
local dev = require("Modul:Development")
local str = require("Modul:String")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local geo = require("Modul:Geo")
local geo = require("Modul:Geo")
local kat = require("Modul:Kategorie")
local que = require("Modul:Queries")
local que = require("Modul:Queries")
local fab = require("Modul:Faktenbox")
local fab = require("Modul:Faktenbox")
local formular = "Gebäude" -- ggf. "Gebäude/Work"


function p.Faktenbox(frame)
function p.Faktenbox(frame)
-- mw.log("Faktenbox(frame)")
-- mw.log("Faktenbox(frame)")
-- mw.logObject(frame)
-- mw.logObject(frame)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- =p.Faktenbox({parentargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Erlanger Straße",Hausnummer=" 11; 13 ;"}})
-- =p.Faktenbox{pargs={Bild="Schwabacher Straße 12 Dez 2020 1.jpg",["Straße"]="Schwabacher Straße",Hausnummer="12",["TeilDesGebäudeKomplexes"]="TDGK",AktenNr="D-5-63-000-1464",Objekt="Häusle"}}
local args, noframe = dev.GetParentArgs(frame)


-- Klasse/Kategorie setzen
-- Basis-Faktenbox-Daten (Klasse/Kategorie/Formular)
local klasse = "Gebäude"
local fbdata = fab.fbdata(frame)
local kategorie = kat.mehrzahl(klasse)
fbdata.klasse = {"Gebäude"}
mw.smw.set("KlassenName = " .. klasse)
fbdata.kategorie = {"Gebäude"}
fbdata.formular = "Gebäude" -- ggf. "Gebäude/Work"


-- Straße/Hausnummer Formular-Eingaben analysieren, Postleitzahl ermitteln
-- Straße/Hausnummer Formular-Eingaben analysieren, Postleitzahl ermitteln
local strasse_hnr = p.strasseHnrParser(args)
fbdata.strasse_hnr = p.strasseHnrParser(fbdata)
local plz = p.getPlz(strasse_hnr)
fbdata.plz = p.getPlz(fbdata)
 
-- Tabs einsammeln
local bild_tab = fab.bildTab(args["Bild"])
local karten_tab = p.kartenTab{frame = frame, args = args, plz = plz, noframe = noframe}
local daten_tab = p.datenTab{
frame = frame, args = args, klasse = klasse, kategorie = kategorie,
plz = plz, strasse_hnr = strasse_hnr, geo = true, noframe = noframe
}
local personen_tab = p.residenzTab("Personen, die hier wohnen bzw. gewohnt haben:", "Person", "Personen")
local unternehmen_tab = p.residenzTab("Unternehmen, die hier ansässig sind/waren:", "Unternehmen", "Unternehmen")


-- Tabs zusammenfügen
-- Tabs einsammeln und zusammenfügen
local box =  
local box =  
"<div class = factbox><tabs>" ..
"<div class = factbox><tabs>" ..
bild_tab ..
fab.bildTab(fbdata) ..
karten_tab ..
p.kartenTab(fbdata) ..
daten_tab ..
p.datenTab(fbdata) ..
personen_tab ..
p.residenzTab(fbdata, {ueberschrift="Personen, die hier wohnen bzw. gewohnt haben:", klasse="Person", kategorie="Personen"}) ..
unternehmen_tab ..
p.residenzTab(fbdata, {ueberschrift="Unternehmen, die hier ansässig sind/waren:", klasse="Unternehmen", kategorie="Unternehmen"}) ..
"</tabs></div>"
"</tabs></div>"


-- Sonstige gemeinsame Dinge anfügen (Formular, Kategorien, Wartung, ...)
-- Sonstige gemeinsame Dinge anfügen (Klasse, Formular, Kategorien, Wartung, ...)
box = box .. fab.common{
box = box .. fab.common(fbdata, false)
klasse = klasse, kategorie = kategorie, denkmalstatusbesteht = args["DenkmalstatusBesteht"],
bild = args["Bild"], strasse_hnr = strasse_hnr, positionscheck = true, formular = formular
}
-- mw.log("box = " .. box)
-- mw.log("box = " .. box)


-- Pre-Rendern und String-Länge checken
-- Pre-Processing und String-Länge checken
if not noframe then
box = fbdata.frame:preprocess(box)
box = frame:preprocess(box)
end
box = box .. com.returnStringCheck(box)
box = box .. com.returnStringCheck(box)
-- mw.log("box = " .. box)
-- mw.log("box = " .. box)
Zeile 63: Zeile 43:
end
end


function p.datenTab(args)
function p.datenTab(fbdata, args)
-- mw.log("datenTab(args)")
-- mw.log("datenTab(fbdata, args)")
-- mw.logObject(fbdata)
-- mw.logObject(args)
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen:
--[[ Konsolenzeile zum Debuggen (Achtung! Bug in Fehlerbereinigungskonsole! Kann nur 1x ausgeführt werden!):
-- =p.datenTab({noframe=true,klasse="Gebäude",kategorie="Gebäude",positionscheck=true,work=true,args={},strasse_hnr={strasse={}}})
fab=require("Modul:Faktenbox/Work");
fbdata=fab.fbdata{pargs={
["Straße"]="Elanger Straße",
Hausnummer="11;13",
["TeilDesGebäudeKomplexes"]="TDGK",
AktenNr="D-5-63-000-1464",
Objekt="Häusle"
}};
fbdata.klasse={"Kirche","Gebäude"};
fbdata.kategorie={"Kirchen","Gebäude"};
fbdata.fullpagename="Isaak-Loewi-Straße 1";
fbdata.subpagename="Isaak-Loewi-Straße 1";
fbdata.strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11", "13"}},{name="XY Straße",hausnummer={}}},anzahlGebaeude=3};
fbdata.plz=90765;
print(p.datenTab(fbdata,{kindex=2,tabname="Tabname"}))
]]
local t = ""
local t = ""
args = args or {}


-- Teil Des Gebäude Komplexes ermitteln und mergen
-- Teil Des Gebäude Komplexes ermitteln und mergen
local teil_des_gebaeude_komplexes = args.args["TeilDesGebäudeKomplexes"] or ""
local teil_des_gebaeude_komplexes = fbdata.pargs["TeilDesGebäudeKomplexes"] or ""
teil_des_gebaeude_komplexes = str.splitAndStrip(teil_des_gebaeude_komplexes, ";")
teil_des_gebaeude_komplexes = str.splitAndStrip(teil_des_gebaeude_komplexes, ";")
local query = "[[:+]][[!" .. wik.pagename() .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. wik.subpagename() .. "]] [[AnzahlGebäude::>2]]"
local query = "[[:+]][[!" .. fbdata.fullpagename .. "]][[Kategorie:Gebäude]][[StraßeHnr::" .. fbdata.subpagename .. "]] [[AnzahlGebäude::>2]]"
-- mw.log("query = " .. query)
-- mw.log("query = " .. query)
local query_result = que.getPages(query, true)
local query_result = que.getPages(query, true)
Zeile 81: Zeile 78:
-- Zusammenbau
-- Zusammenbau
t = t .. "<dl class = 'dataTable'>"
t = t .. "<dl class = 'dataTable'>"
t = t .. fab.zeileKategorieSeite(args.klasse, args.kategorie)
t = t .. fab.zeileKategorieSeite(fbdata, args.kindex)
t = t .. fab.zeileStrasseHnr(args.strasse_hnr)
t = t .. fab.zeileStrasseHnr(fbdata)
t = t .. fab.zeile("PLZ", args.plz)
t = t .. fab.zeile("PLZ", fbdata.plz)
t = t .. fab.zeile("Objekt", args.args["Objekt"])
t = t .. fab.zeilePargs(fbdata, {"Objekt", "TeilDesEnsembles", "TeilDesAreals", "TeilDesGebäudeKomplexes", "Baujahr", "Ehemals", "DenkmalstatusBesteht"})
t = t .. fab.zeile("TeilDesEnsembles", args.args["TeilDesEnsembles"], "Teil des Ensembles")
t = t .. fab.zeileAktenNr(fbdata)
t = t .. fab.zeile("TeilDesAreals", args.args["TeilDesAreals"], "Teil des Areals")
t = t .. fab.zeilePargs(fbdata, {"Abbruchjahr", "Baustil", "Bauherr", "Architekt", "Maurermeister", "Quellangaben"})
t = t .. fab.zeile("TeilDesGebäudeKomplexes", teil_des_gebaeude_komplexes, "Teil des Gebäude-Komplexes")
t = t .. fab.zeileGeokoordinate(fbdata)
t = t .. fab.zeile("Baujahr", args.args["Baujahr"])
t = t .. fab.zeile("Ehemals", args.args["Ehemals"])
t = t .. fab.zeilenDenkmalschutz(args.args["DenkmalstatusBesteht"], args.args["AktenNr"])
t = t .. fab.zeile("Abbruchjahr", args.args["Abbruchjahr"])
t = t .. fab.zeile("Baustil", args.args["Baustil"])
t = t .. fab.zeile("Bauherr", args.args["Bauherr"])
t = t .. fab.zeile("Architekt", args.args["Architekt"])
t = t .. fab.zeile("Maurermeister", args.args["Maurermeister"])
t = t .. fab.zeile("Quellangaben", args.args["Quellangaben"])
t = t .. fab.zeileGeokoordinate(args.frame, args.noframe)
t = t .. "</dl>"
t = t .. "</dl>"
t = t .. fab.faktenboxSemantikBrowsen()
t = t .. fab.faktenboxSemantikBrowsen(fbdata)


-- Tab draus machen
-- Tab draus machen
Zeile 107: Zeile 94:
end
end


function p.kartenTab(args)
function p.kartenTab(fbdata)
-- mw.log("kartenTab(frame, args)")
-- mw.log("kartenTab(fbdata)")
-- mw.logObject(frame)
-- mw.logObject(fbdata)
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen:
-- fab=require("Modul:Faktenbox/Work"); fbdata=fab.fbdata{pargs={["Straße"]="Erlanger Straße",["Hausnummer"]="11"}}; fbdata.plz=90765; print(p.kartenTab(fbdata))
t = ""
t = ""
local pagename = wik.pagename()
if string.find(fbdata.pagename, ";") ~= nil then
if string.find(pagename, ";") ~= nil then
t = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
t = "Semikolon im Artikel-/Seitennamen für korrekte Kartendarstellung nicht erlaubt!"
elseif args.noframe then
t = "Dummy-Karten-Tab (noframe)" ..
",lat=" .. (lat or "nil") ..
",lon=" .. (lon or "nil") ..
",location=" .. (location or "nil") ..
",geojson=" .. (geojson or "nil") ..
",GeoJsonKarte=" .. (GeoJsonKarte or "nil")
else
else
local args_karte = com.shallowcopy(args.args)
local args_karte = com.shallowcopy(fbdata.pargs)
args_karte["PLZ"] = args.plz
args_karte["PLZ"] = fbdata.plz
t = args.frame:expandTemplate{title = 'Gebäude/Karte', args = args_karte}
args_karte["Debug"] = "Nein"
t = fbdata.frame:expandTemplate{title = 'Gebäude/Karte', args = args_karte}
end
end
-- Tab draus machen
-- Tab draus machen
t = fab.tab(t, "Karte")
t = fab.tab(t, "Karte")
Zeile 134: Zeile 114:
end
end


function p.strasseHnrParser(args)
function p.strasseHnrParser(fbdata)
-- mw.log("strasseHnrProcessor(args)")
-- mw.log("strasseHnrProcessor(fbdata)")
-- mw.logObject(args)
-- mw.logObject(fbdata.pargs)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- p.strasseHnrParser({["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""})
-- p.strasseHnrParser{pargs={["Straße"]="Elanger Straße",["Hausnummer"]="11;13",["Straße2"]="Frühlingstraße",["Hausnummer2"]="",["Straße3"]="",["Hausnummer3"]=""}}
local result = {}
local result = {}
result.strasse = {}
result.strasse = {}
Zeile 145: Zeile 125:


local strasse_hnr = {
local strasse_hnr = {
{args["Straße"]  or "", args["Hausnummer"]  or ""},
{fbdata.pargs["Straße"]  or "", fbdata.pargs["Hausnummer"]  or ""},
{args["Straße2"] or "", args["Hausnummer2"] or ""},
{fbdata.pargs["Straße2"] or "", fbdata.pargs["Hausnummer2"] or ""},
{args["Straße3"] or "", args["Hausnummer3"] or ""}
{fbdata.pargs["Straße3"] or "", fbdata.pargs["Hausnummer3"] or ""}
}
}


Zeile 184: Zeile 164:
end
end


function p.residenzTab(ueberschrift, klasse, kategorie)
function p.residenzTab(fbdata, args)
-- mw.log("residenzTab(" .. (klasse or "nil") .. ")")
-- mw.log("residenzTab(fbdata, args)")
-- mw.logObject(fbdata)
-- mw.logObject(args)
-- Konsolenzeile zum Debuggen:
-- =p.residenzTab({subpagename="Schwabacher Straße 12",fullpagename="Schwabacher Straße 12",strasse_hnr={strasse={{name="Schwabacher Straße",hausnummer={"12"}}}}}, "Unternehmen, die hier ansässig sind/waren:", "Unternehmen", "Unternehmen")
local t = ""
local t = ""
-- DB-Abfrage
-- DB-Abfrage
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. wik.subpagename() .. "]][[-Has subobject.KlassenName::" .. klasse .. "]]"
local query = "[[:+]][[-Has subobject::+]][[SubObjektTyp::Adresse]][[VonObjekt::" .. fbdata.subpagename.. "]][[-Has subobject.KlassenName::" .. args.klasse .. "]]"
query = query .. "|?-has subobject.Seite = Seite|?Adressart|?AdresseVon#-F[j. F Y]|?AdresseBis#-F[j. F Y]|mainlabel = -|limit = 100"
query = query .. "|?-has subobject.Seite#-=Seite|?Adressart|?AdresseVon#-F[j. F Y]|?AdresseBis#-F[j. F Y]|mainlabel=-|limit=100"
local ask_result = mw.smw.ask(query)
local ask_result = mw.smw.ask(query)
-- mw.logObject(ask_result)
-- mw.logObject(ask_result)
Zeile 197: Zeile 182:
for i, z in ipairs(ask_result) do -- Ergebniszeile durchiterieren
for i, z in ipairs(ask_result) do -- Ergebniszeile durchiterieren
if i == 1 then
if i == 1 then
t = t .. ueberschrift .. "\n" -- Text vor der eigentlichen Liste
t = t .. args.ueberschrift .. "\n" -- Text vor der eigentlichen Liste
end
end
t = t .. "* " .. z["Seite"] -- immer vorhanden
t = t .. "* [[" .. z.Seite .. "]]" -- immer vorhanden
z.Adressart = z.Adressart or "" -- nicht immer vorhanden (nil)
z.Adressart = z.Adressart or "" -- nicht immer vorhanden (nil)
z.AdresseVon = z.AdresseVon or "" -- nicht immer vorhanden (nil)
z.AdresseVon = z.AdresseVon or "" -- nicht immer vorhanden (nil)
Zeile 225: Zeile 210:


-- Tab draus machen
-- Tab draus machen
t = fab.tab(t, kategorie)
t = fab.tab(t, args.kategorie)
-- mw.log("t = " .. t)
-- mw.log("t = " .. t)
return t
return t
end
end


function p.getPlz(strasse_hnr)
function p.getPlz(fbdata)
-- mw.log("getPlz(strasse_hnr)")
-- mw.log("getPlz(fbdata)")
-- mw.logObject(strasse_hnr)
-- mw.logObject(fbdata.strasse_hnr)
-- Konsolenzeile zum Debuggen:
-- Konsolenzeile zum Debuggen:
-- =p.getPlz({strasse = {{name = "Erlanger Straße", hausnummer = {"11", "13"}}, {name = "XY Straße" , hausnummer = {}}}})
-- =p.getPlz{strasse_hnr={strasse={{name="Erlanger Straße",hausnummer={"11","13"},suspekt=false},{name="Schwabacher Straße",hausnummer={1}}}}}
local plz = ""
local plz = ""
if #strasse_hnr.strasse > 0 and not strasse_hnr.strasse[1].suspekt then
if #fbdata.strasse_hnr.strasse > 0 and not fbdata.strasse_hnr.strasse[1].suspekt then
-- Es wird angenommen, dass alle Gebäude die gleiche PLZ haben. Hausnummer muss nicht vorhanden sein
-- Es wird angenommen, dass alle Gebäude die gleiche PLZ haben. Hausnummer muss nicht vorhanden sein
plz = geo.getPLZ(strasse_hnr.strasse[1].name, strasse_hnr.strasse[1].hausnummer[1])
plz = geo.getPLZ(fbdata.strasse_hnr.strasse[1].name, fbdata.strasse_hnr.strasse[1].hausnummer[1])
else
else
end
end