Modul:Karte: Unterschied zwischen den Versionen

Aus FürthWiki

(location/locationlist von Vorlage:Karte hierher verschoben)
(Fehlermeldungen von Vorlage:Karte hierher portiert)
Zeile 9: Zeile 9:
function p.Karte(frame)
function p.Karte(frame)
-- nur die benötigten Argumente übernehmen
-- nur die benötigten Argumente übernehmen
local args = {
local args = {"lat", "lon", "location", "locationlist", "geojson", "zoom",
"lat", "lon", "location", "locationlist", "geojson", "geocode",
"popuptitle", "popuptext", "box", "headline", "width", "height",
"zoom", "popuptitle", "popuptext",
"noattr", "Work"}
"box", "headline", "width", "height",
"noattr", "form",
"Work", "Debug"}
local args = wik.getArgs(frame.args, args)
local args = wik.getArgs(frame.args, args)
return p.karte(frame, args)
return p.karte(frame, args)
Zeile 34: Zeile 31:
args["box"] = args["box"] or "Ja"
args["box"] = args["box"] or "Ja"
args["zoom"] = args["zoom"] or "16"
args["zoom"] = args["zoom"] or "16"
args["form"] = args["form"] or "nein"
-- geojson-Angabe auswerten
local geojson_pagename = args["geojson"] or pagename
local geojson_pagename = args["geojson"] or pagename
local geojson_fullpagename = "GeoJson:" .. geojson_pagename
local geojson_fullpagename = "GeoJson:" .. geojson_pagename
local geojson_url = "{{canonicalurl:" .. geojson_fullpagename .. "}}"


-- width/height
-- width/height
Zeile 71: Zeile 72:
  com.isTrue(args["Ehemals"]) then
  com.isTrue(args["Ehemals"]) then
kategorien["Hat Objektlokation, ist aber ehemaliges Objekt"] = true
kategorien["Hat Objektlokation, ist aber ehemaliges Objekt"] = true
else
elseif args["lat"] == nil or args["lon"] == nil then -- to do: dieses if später rausschmeißen nach Aufbau nominatim.fuerthwiki.de
-- location geocode
geocode = getGeocode(frame, location)
local geocode = "Geocoding failed" -- to do: diesen Block später rausschmeißen nach Aufbau nominatim.fuerthwiki.de
if com.isEmpty(args["lat"]) or com.isEmpty(args["lon"]) then -- to do: diesen Block später rausschmeißen nach Aufbau nominatim.fuerthwiki.de
geocode = getGeocode(frame, location) -- to do: nur diese Zeile bleibt übrig (mit local)
end -- to do: diesen Block später rausschmeißen nach Aufbau nominatim.fuerthwiki.de
if geocode ~= "Geocoding failed" then
if geocode ~= "Geocoding failed" then
geoobject_entry["Geokoordinate"] = geocode
geoobject_entry["Geokoordinate"] = geocode
Zeile 97: Zeile 94:
end -- if geocode ~= "Geocoding failed" then
end -- if geocode ~= "Geocoding failed" then
end -- if Zahlerkennung
end -- if Zahlerkennung
set_popuptitle_popuptext(geoobject_entry, popuptitle, popuptext)
geoobject_entry["KartePopupTitle"] = popuptitle
geoobject_entry["KartePopupText"] = popuptext
table.insert(geoobjects, geoobject_entry)
table.insert(geoobjects, geoobject_entry)
end -- if location ~= "" then
end -- if location ~= "" then
Zeile 104: Zeile 102:
-- geocode lon/lat, nur wenn location/locationlist nicht erfolgreich oder ehemals
-- geocode lon/lat, nur wenn location/locationlist nicht erfolgreich oder ehemals
if (not minimum_one_geocode_ok or com.isTrue(args["Ehemals"])) and  
if (not minimum_one_geocode_ok or com.isTrue(args["Ehemals"])) and  
  not com.isEmpty(args["lat"]) and not com.isEmpty(args["lon"]) then
  args["lat"] ~= nil and args["lon"] ~= nil then
local geoobject_entry = {}
local geoobject_entry = {}
-- local geocode = getGeocode(frame, args["lat"] .. "," .. args["lon"])
-- local geocode = getGeocode(frame, args["lat"] .. "," .. args["lon"])
Zeile 114: Zeile 112:
kategorien["Hat Geo-Kodierungsfehler"] = true
kategorien["Hat Geo-Kodierungsfehler"] = true
end
end
set_popuptitle_popuptext(geoobject_entry, popuptitle, popuptext)
geoobject_entry["KartePopupTitle"] = popuptitle
geoobject_entry["KartePopupText"] = popuptext
table.insert(geoobjects, geoobject_entry)
table.insert(geoobjects, geoobject_entry)
end
end
Zeile 143: Zeile 142:
end
end


-- Karte
-- Karten-Argumente (display_map) erstellen
local map_args = { "", ["zoom"] = args["zoom"], -- gemeinsame settings
local map_args = { "", ["zoom"] = args["zoom"], -- gemeinsame settings
["width"] = args["width"], ["height"] = args["height"],
["width"] = args["width"], ["height"] = args["height"],
Zeile 171: Zeile 170:
end
end
end
end
-- Karte (display_map)
if map_args[1] ~= "" or map_args["geojson"] ~= nil then
if map_args[1] ~= "" or map_args["geojson"] ~= nil then
mw.logObject(map_args, "map_args")
mw.logObject(map_args, "map_args")
t = t .. frame:callParserFunction("#display_map", map_args)
t = t .. frame:callParserFunction("#display_map", map_args)
if args["geojson"] ~= nil and map_args["geojson"] == nil then
t = t .. "<small>Karte [" .. geojson_url .. " " .. args["geojson"] .. "] nicht gefunden</small>"
end
else
else
-- bisherige Vorlagen-Karte
if com.isTrue(args["form"]) then
local karte_vorlage = "Karte/Legacy"
t = t .. "Positionsangabe fehlt oder fehlende Karte<br>" .. geojson_fullpagename .. "<br>Bitte Position in Formular eintragen oder"
if com.isTrue(args["Work"]) then
else
karte_vorlage = karte_vorlage .. "/Work"
t = t .. "Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte<br>" .. geojson_fullpagename
-- args["Debug"] = "Ja"
end
end
mw.logObject(args, "args zur Vorlage " .. karte_vorlage)
t = t .. "<br>[" .. geojson_url .. " Hier klicken zum Anlegen der Karte<br>" .. geojson_fullpagename .. "].<br>Siehe auch [[Hilfe:Karten]]"
t = t .. frame:expandTemplate{title = karte_vorlage, args = args}
kategorien["Ohne Position"] = true
end
end


-- Box drum herum
-- Box um Karte
if com.isTrue(args["box"]) then
if com.isTrue(args["box"]) then
local headline = args["headline"] or args["geojson"] or pagename
local headline = args["headline"] or args["geojson"] or pagename
Zeile 212: Zeile 215:
return frame:callParserFunction(
return frame:callParserFunction(
"#geocode", {location, format="float", directional="no"})
"#geocode", {location, format="float", directional="no"})
end
function set_popuptitle_popuptext(geoobject_entry, popuptitle, popuptext)
if not com.isEmpty(popuptitle) then
geoobject_entry["KartePopupTitle"] = popuptitle
end
if not com.isEmpty(popuptext) then
geoobject_entry["KartePopupText"] = popuptext
end
end
end



Version vom 13. Dezember 2025, 16:49 Uhr

Modul:Karte

Zusätzliche Parameter karte()

Vorlagenparameter

ParameterBeschreibungTypStatus
Keine Attribute setzen.noattr

Autowert
nein
Wahrheitswertoptional
Keine Karte rendern.nomap

Autowert
nein
Wahrheitswertoptional
Keine Wartungsmeldungen ausgeben.nowarn

Autowert
nein
Wahrheitswertoptional
Karte befindet sich in Seite mit Formularform

keine Beschreibung

Autowert
nein
Wahrheitswertoptional
EhemalsEhemals

keine Beschreibung

Autowert
nein
Wahrheitswertoptional
location/locationlist/lat/lon Nadeln ausblenden, wenn GeoJson vorhandenhide_loc_latlon

keine Beschreibung

Autowert
nein
Wahrheitswertoptional

geoobjects-Daten-table

  • geoobjects[] Einzel-Objekte (table)
    • geoobjects[]["Geolokation"]
    • geoobjects[]["Geokoordinate"]
    • geoobjects[]["Quellangaben"] = Quelle von Geokoordinate
    • geoobjects[]["KartePopupTitle"]
    • geoobjects[]["KartePopupText"]
  • geoobjects.geojson GeoJson-Daten
    • geoobjects.geojson.arg = übergebenes GeoJson-Argument
    • geoobjects.geojson.pagename = GeoJson-Seitenname ohne "GeoJson:"
    • geoobjects.geojson.fullpagename = GeoJson-Seitenname mit "GeoJson:"
    • geoobjects.geojson.url = GeoJson-URL (über diese kommt man schneller dazu, eine neue GeoJson-Karte anzulegen)
    • geoobjects.geojson.exists = GeoJson-Karte existiert
    • geoobjects.geojson.missing = GeoJson-Karte explizit angegeben, aber existiert nicht

Vorlage:Karte

Diese Vorlage zeigt eine Karte wahlweise in einer oder ohne Box an.

Vorlagenparameter

ParameterBeschreibungTypStatus
Breitengradlat

Beispiel
12.345
Zahlenwertoptional
Längengradlon

Beispiel
12.345
Zahlenwertoptional
Objekt-Lokationlocation

Beispiel
Uhrenhäusla, Fürth, Bayern, Deutschland
Einzeiliger Textoptional
Objekt-Lokations-Listelocationlist

Siehe Beispiele unten

Beispiel
Uhrenhäusla, Fürth, Bayern, Deutschland ~ [[Uhrenhäusla]] ~ Hier steht das Uhrenhäusla ; Rathaus Rathaus, Fürth, Bayern, Deutschland ~ [[Rathaus]] ~ Hier steht das Rathaus
Einzeiliger Textoptional
GeoJson-Kartegeojson

Kartenname ohne 'GeoJson:'

Seitennameoptional
Zoom-Faktorzoom

keine Beschreibung

Autowert
16
Zahlenwertoptional
Popup-Titelpopuptitle

Wird angezeigt, wenn Maus über location-Pin. Darf auch Links enthalten. Bei einer grafischen GeoJson-Karte wird der Popup-Titel im grafischen Editor für jedes Element (Pin, Linie, Fläche) einzeln eingetragen und dieser Parameter wird ignoriert. Nicht bei Objekt-Lokations-Liste (locationlist).

Einzeiliger Textoptional
Popup-Textpopuptext

Wird angezeigt, wenn Maus über location-Pin. Darf auch Links enthalten. Bei einer grafischen GeoJson-Karte wird der Popup-Titel im grafischen Editor für jedes Element (Pin, Linie, Fläche) einzeln eingetragen und dieser Parameter wird ignoriert. Nicht bei Objekt-Lokations-Liste (locationlist).

Mehrzeiliger Textoptional
Box-Anzeige: Karte in einer Box oder ohne.box

Entweder 'ja' oder 'nein'

Autowert
ja
Wahrheitswertoptional
Box-Überschriftheadline

Wenn eingebunden in einer Box. Darf auch Links enthalten.

Autowert
GeoJson-Kartenname oder hilfsweise Seitenname
Einzeiliger Textoptional
Kartenbreitewidth

Entweder in Prozent oder in Pixel angegeben (wenn NICHT eingebunden in einer Box)

Beispiel
100% bzw. 300
Autowert
50%
Zahlenwertoptional
Kartenhöheheight

Entweder in Prozent oder in Pixel angegeben (wenn NICHT eingebunden in einer Box)

Beispiel
100% bzw. 300
Autowert
25%
Zahlenwertoptional

Einbindung

Möglichkeiten/Parameter zur Einbindung:

  • Bei Angabe einer Koordinate (lat/lon-Wertepaar):
{{ Karte | lat=... | lon=... | zoom=... | headline=... | popuptitle=... | popuptext=... | box=... | width=... | height=... }}
  • Bei Angabe von Objekt-Lokation (location):
{{ Karte | location=... | zoom=... | headline=... | popuptitle=... | popuptext=... | box=... | width=... | height=... }}
  • Bei Angabe von Liste mit Objekt-Lokationen (locationlist):
{{ Karte | locationlist=... | zoom=... | headline=... | box=... | width=... | height=... }}
  • Bei Angabe von grafischer GeoJson-Karte2) (geojson):
{{ Karte | geojson=... | zoom=... | headline=... | box=... | width=... | height=... }}
  • Bei Angabe von grafischer GeoJson-Karte und Koordinate2),3):
{{ Karte | geojson=... | lat=... | lon=... | zoom=... | headline=... | box=... | width=... | height=... }}
  • Bei Angabe von grafischer GeoJson-Karte und Objekt-Lokation2),3):
{{ Karte | geojson=... | location=... | zoom=... | headline=... | box=... | width=... | height=... }}
  • Grafische GeoJson-Karte mit gleichem Seitennamen1),2):
{{ Karte | zoom=... | headline=... | box=... | width=... | height=... }}
Anmerkungen

1) Wenn weder lat/lon noch location noch locationlist noch geojson angegeben sind, dann wird implizit die GesJson-Karte mit gleichem Seitennamen wie die eigentliche Seite angenommen. Beispiel: GeoJson:Pegnitz ist die zu Pegnitz gehörende Karte.
2) Wenn die GesJson-Karte (noch) nicht existiert, erscheint eine entsprechende Meldung mit der Klick-Möglichkeit, diese neu anzulegen.
3) Wenn geojson und zusätzlich location bzw. lat/lon übergeben werden, dann wird die GeoJson-Karte angezeigt, aber location bzw. lat/lon als Geokoordinate (Semantic) gesetzt. Zweck ist, dass man der Karte eine (Mitten-)Position mitgeben kann, damit sie z. B. per Semantisches Browsen gefunden werden kann.

Beispiele

Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|lat=49.4805779|lon=10.9978422|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|location=Uhrenhäusla, Fürth, Bayern, Deutschland|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|location=Uhrenhäusla, Fürth, Bayern, Deutschland|headline=Hier steht das Uhrenhäusla|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|location=Uhrenhäusla, Fürth, Bayern, Deutschland|headline=Hier steht das Uhrenhäusla|popuptitle=Uhrenhäusla|popuptext=Siehe Uhrenhäusla|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|locationlist=Uhrenhäusla, Fürth, Bayern, Deutschland|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|locationlist=Uhrenhäusla, Fürth, Bayern, Deutschland; Rathaus Rathaus, Fürth, Bayern, Deutschland|zoom=15}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|locationlist=Uhrenhäusla, Fürth, Bayern, Deutschland ~ Uhrenhäusla ~ Hier steht das Uhrenhäusla; Rathaus Rathaus, Fürth, Bayern, Deutschland ~ Rathaus ~ Hier steht das Rathaus|zoom=15}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|geojson=Südstadt|headline=Südstadt|zoom=13}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|lat=49.4805779|lon=10.9978422|geojson=BlaBla|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|location=Uhrenhäusla, Fürth, Bayern, Deutschland|geojson=BlaBla|zoom=17}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|zoom=14}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|geojson=BlaBla}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|lat=49.4805779|lon=10.9978422|box=nein}}


Stadtwappen.svg
 Karte

Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte
GeoJson:Karte
Hier klicken zum Anlegen der Karte
GeoJson:Karte
.
Siehe auch Hilfe:Karten

{{Karte|lat=49.4805779|lon=10.9978422|box=nein|width=100%|height=500}}


Siehe auch

Unterseiten

Siehe auch


p = {}

local com = require("Modul:Common")
local str = require("Modul:String")
local wik = require("Modul:Wiki")
local smw = require("Modul:SMW")
local box = require("Modul:Box")

function p.Karte(frame)
	-- nur die benötigten Argumente übernehmen
	local args = {"lat", "lon", "location", "locationlist", "geojson", "zoom",
		"popuptitle", "popuptext", "box", "headline", "width", "height",
		"noattr", "Work"}
	local args = wik.getArgs(frame.args, args)
	return p.karte(frame, args)
end

function p.karte(frame, args)
	mw.log("karte(frame, args)")
	mw.logObject(args, "args")
	-- Konsolenzeilen zum Debuggen:
	-- =p.karte(mw.getCurrentFrame(), args)
	-- =p.karte(mw.getCurrentFrame(), {pagename="Zum Adler", location="Restaurant Zum Adler, Fürth, Bayern, Deutschland"})
	local t = ""
	local geoobjects = {}
	local kategorien = {}
	local attrlist = {}
	local pagename = args["pagename"] or wik.pagename()							-- nur zum Debuggen pagename vorgebbar
	
	-- defaults setzen
	args["box"] = args["box"] or "Ja"
	args["zoom"] = args["zoom"] or "16"
	args["form"] = args["form"] or "nein"
	
	-- geojson-Angabe auswerten
	local geojson_pagename = args["geojson"] or pagename
	local geojson_fullpagename = "GeoJson:" .. geojson_pagename
	local geojson_url = "{{canonicalurl:" .. geojson_fullpagename .. "}}"

	-- width/height
	if com.isTrue(args["box"]) or args["width"] == "auto" then
		args["width"] = nil														-- ohne width passt sich Karte eigenständig in Box ein
	elseif args["width"] == nil then
		args["width"] = "50%"													-- default bei keiner width-Angabe und keiner Box
	end
	if com.isTrue(args["box"]) or args["height"] == "auto" then
		args["height"] = nil													-- ohne height passt sich Karte eigenständig in Box ein
	elseif args["height"] == nil then
		args["height"] = "25%"													-- default bei keiner height-Angabe und keiner Box
	end

	-- geocode location and locationlist
	local minimum_one_geocode_ok = false										-- Flag, dass mindestens ein geocode erfolgreich war
	-- locationlist und location zusammenführen
	local locationlist = str.splitAndStrip(args["locationlist"] or "", ";")
	table.insert(locationlist,
		(args["location"] or "") .. "~" ..
		(args["popuptitle"] or "") .. "~" ..
		(args["popuptext"] or ""))
	-- alle locations durchiterieren und für jedes ein subobject erstellen
	for _, l in ipairs(locationlist) do
		-- Aufteilung location ~ popuptitle ~ popuptext
		l = str.split2(l, "~")
		local location = str.strip(l[1] or "")
		local popuptitle = str.strip(l[2] or "")
		local popuptext = str.strip(l[3] or "")
		if location ~= "" then
			local geoobject_entry = {["Geolokation"] = location}
			-- Prüfung Koordinate (Zahl) oder textuelle Objektlokation
			-- wenn Objektlokation und Ehemals, dann nicht auswerten
			if string.match(location, "%d") == nil and -- Keine-Zahl-Erkennung
			   com.isTrue(args["Ehemals"]) then
				kategorien["Hat Objektlokation, ist aber ehemaliges Objekt"] = true
			elseif args["lat"] == nil or args["lon"] == nil then				-- to do: dieses if später rausschmeißen nach Aufbau nominatim.fuerthwiki.de
				geocode = getGeocode(frame, location)			
				if geocode ~= "Geocoding failed" then
					geoobject_entry["Geokoordinate"] = geocode
					geoobject_entry["Quellangaben"] = "location"
					minimum_one_geocode_ok = true
				else
					-- geocode nicht erfolgreich => SMW-DB nehmen
					kategorien["Hat Geo-Kodierungsfehler"] = true
					local smw_geokoordinate = mw.smw.ask(
						"[[-Has subobject::" .. pagename .. "]]" ..
						"[[Geolokation::" .. location .. "]]" ..
						"|?Geokoordinate|limit=1") or {{}}
					smw_geokoordinate = smw_geokoordinate[1]["Geokoordinate"]
					if smw_geokoordinate ~= nil then							-- SMW-DB Geokoordinate vorhanden?
						kategorien["Hat Geo-Kodierungsfehler, aber Geokoordinate in SMW-DB noch vorhanden"] = true
						geoobject_entry["Geokoordinate"] = smw_geokoordinate
						geoobject_entry["Quellangaben"] = "SMW-DB"
						minimum_one_geocode_ok = true
					end
				end -- if geocode ~= "Geocoding failed" then
			end -- if Zahlerkennung
			geoobject_entry["KartePopupTitle"] = popuptitle
			geoobject_entry["KartePopupText"] = popuptext
			table.insert(geoobjects, geoobject_entry)
		end -- if location ~= "" then
	end -- for _, l in ipairs(locations_merged) do

	-- geocode lon/lat, nur wenn location/locationlist nicht erfolgreich oder ehemals
	if (not minimum_one_geocode_ok or com.isTrue(args["Ehemals"])) and 
	   args["lat"] ~= nil and args["lon"] ~= nil then
		local geoobject_entry = {}
--		local geocode = getGeocode(frame, args["lat"] .. "," .. args["lon"])
		local geocode = args["lat"] .. "," .. args["lon"]						-- to do: diesen Block später rausschmeißen und obigen aktivieren, wenn fertig
		if geocode ~= "Geocoding failed" then
			geoobject_entry["Geokoordinate"] = geocode
			geoobject_entry["Quellangaben"] = "lat/lon"
		else
			kategorien["Hat Geo-Kodierungsfehler"] = true
		end
		geoobject_entry["KartePopupTitle"] = popuptitle
		geoobject_entry["KartePopupText"] = popuptext
		table.insert(geoobjects, geoobject_entry)
	end

	-- Attribute setzen
	if not com.isTrue(args["noattr"]) then
		-- Geolokation/Geokoordinate setzen
		for _, o in ipairs(geoobjects) do										-- to do: obsolete, wenn sobobject genutzt
			setAttr(attrlist, "Geolokation", o["Geolokation"])					-- to do: obsolete, wenn sobobject genutzt
			setAttr(attrlist, "Geokoordinate", o["Geokoordinate"])				-- to do: obsolete, wenn sobobject genutzt
		end																		-- to do: obsolete, wenn sobobject genutzt
		-- GeoJson
		if wik.pageExists(geojson_fullpagename) then
			setAttr(attrlist, "GeoJson", geojson_fullpagename)
		end
		-- zoom
		setAttr(attrlist, "Zoomlevel", args["zoom"])
		-- normale Attribute setzen
		mw.logObject(attrlist, "attrlist")
		mw.smw.set(attrlist)
		-- geoobjects als subobjects setzen
		mw.logObject(geoobjects, "geoobjects")
		for _, o in ipairs(geoobjects) do
			o["SubObjektTyp"] = "Geo"
			local id = smw.subobjectIdCleaner(o["Geolokation"] or o["Geokoordinate"])
			mw.smw.subobject(o, id)
		end
	end

	-- Karten-Argumente (display_map) erstellen
	local map_args = { "", ["zoom"] = args["zoom"],								-- gemeinsame settings
		["width"] = args["width"], ["height"] = args["height"],
		["enablefullscreen"] = "yes", ["resizable"] = "yes"}
	-- geojson
	if wik.pageExists(geojson_fullpagename) then
		map_args["geojson"] = geojson_pagename
		table.insert(map_args, "") -- dummy / keine location
		if #geoobjects > 0 then
			kategorien["Hat geojson und location/lat/lon"] = true
		end
	else
		-- location/lat/lon
		for _, o in ipairs(geoobjects) do
			if o["Geokoordinate"] ~= nil then
				if map_args[1] ~= "" then
					map_args[1] = map_args[1] .. ";"
				end
				map_args[1] = map_args[1] .. o["Geokoordinate"]
				if o["KartePopupTitle"] ~= nil then
					map_args[1] = map_args[1] .. "~" .. o["KartePopupTitle"]
					if o["KartePopupText"] ~= nil then
						map_args[1] = map_args[1] .. "~" .. o["KartePopupText"]
					end
				end
			end
		end
	end

	-- Karte (display_map)
	if map_args[1] ~= "" or map_args["geojson"] ~= nil then
		mw.logObject(map_args, "map_args")
		t = t .. frame:callParserFunction("#display_map", map_args)
		if args["geojson"] ~= nil and map_args["geojson"] == nil then
			t = t .. "<small>Karte [" .. geojson_url .. " " .. args["geojson"] .. "] nicht gefunden</small>"
		end
	else
		if com.isTrue(args["form"]) then
			t = t .. "Positionsangabe fehlt oder fehlende Karte<br>" .. geojson_fullpagename .. "<br>Bitte Position in Formular eintragen oder"
		else
			t = t .. "Breiten-/Längengrad (lat/lon) fehlt, Objekt-Lokation (location) fehlt oder fehlende Karte<br>" .. geojson_fullpagename
		end
		t = t .. "<br>[" .. geojson_url .. " Hier klicken zum Anlegen der Karte<br>" .. geojson_fullpagename .. "].<br>Siehe auch [[Hilfe:Karten]]"
		kategorien["Ohne Position"] = true
	end

	-- Box um Karte
	if com.isTrue(args["box"]) then
		local headline = args["headline"] or args["geojson"] or pagename
		t = box.box{headline = headline, content = t, textalign = center}
	end

	-- Kategorien setzen
	kategorien["Hat Karte"] = true
	-- Check "Hat Geolokation, aber keine Geokoordinate"
	for _, o in ipairs(geoobjects) do											-- Check "Hat Geolokation, aber keine Geokoordinate"
		if o["Geolokation"] ~= nil and o["Geokoordinate"] == nil then
			kategorien["Hat Geolokation, aber keine Geokoordinate"] = true
		end
	end
	-- nun setzen
	for k, _ in pairs(kategorien) do
		t = t .. "[[Kategorie:" .. k .. "]]"
	end

	mw.logObject(t, "t")
	t = frame:preprocess(t)
	return t
end

function getGeocode(frame, location)
	return frame:callParserFunction(
		"#geocode", {location, format="float", directional="no"})
end

function setAttr(attrlist, attr, val)
	if val ~= nil then
		if attrlist[attr] == nil then
			attrlist[attr] = {val}
		else
			table.insert(attrlist[attr], val)
		end
	end
end

return p