Module:LocationMap: Difference between revisions
From The Seven Sages of Rome
No edit summary |
No edit summary |
||
| Line 9: | Line 9: | ||
local hasGeoJson = frame.args.hasGeoJson or '' | local hasGeoJson = frame.args.hasGeoJson or '' | ||
-- Get all child locations | -- Get all child locations with page names | ||
local query = { | local query = { | ||
string.format('[[Is Located In::%s]]', pageName), | string.format('[[Is Located In::%s]]', pageName), | ||
'?Has Coordinates', | '?Has Coordinates', | ||
'mainlabel=-', | |||
'limit=500' | 'limit=500' | ||
} | } | ||
local results = smw. | local results = smw.getQueryResult(query) | ||
-- Build coordinates list | -- Build coordinates list | ||
local coordinates = {} | local coordinates = {} | ||
-- Add current location | -- Add current location | ||
if hasCoordinates ~= '' then | if hasCoordinates ~= '' then | ||
table.insert(coordinates, hasCoordinates | table.insert(coordinates, hasCoordinates) | ||
end | end | ||
-- Add child locations | -- Add child locations | ||
if results then | if results and results.results then | ||
for | for childPageName, data in pairs(results.results) do | ||
if | if data.printouts and data.printouts['Has Coordinates'] and data.printouts['Has Coordinates'][1] then | ||
local coords = data.printouts['Has Coordinates'][1] | |||
local | table.insert(coordinates, coords) | ||
end | end | ||
end | end | ||
| Line 46: | Line 38: | ||
-- Build the display_map call | -- Build the display_map call | ||
local | local mapParams = {} | ||
if #coordinates > 0 then | |||
table.insert(mapParams, table.concat(coordinates, ';')) | |||
end | |||
table.insert(mapParams, 'zoom=6') | |||
table.insert(mapParams, 'service=leaflet') | |||
table.insert(mapParams, 'height=250px') | |||
if hasCoordinates ~= '' then | if hasCoordinates ~= '' then | ||
| Line 61: | Line 56: | ||
end | end | ||
if | if #coordinates > 0 or hasGeoJson ~= '' then | ||
return frame:callParserFunction('#display_map' | return frame:callParserFunction('#display_map', table.unpack(mapParams)) | ||
else | else | ||
return '' | return '' | ||
Revision as of 12:40, 16 February 2026
Documentation for this module may be created at Module:LocationMap/doc
local p = {}
function p.displayMap(frame)
local mw = require('mw')
local smw = mw.smw or mw.ext.smw
local pageName = frame.args.pageName or mw.title.getCurrentTitle().text
local hasCoordinates = frame.args.hasCoordinates or ''
local hasGeoJson = frame.args.hasGeoJson or ''
-- Get all child locations with page names
local query = {
string.format('[[Is Located In::%s]]', pageName),
'?Has Coordinates',
'mainlabel=-',
'limit=500'
}
local results = smw.getQueryResult(query)
-- Build coordinates list
local coordinates = {}
-- Add current location
if hasCoordinates ~= '' then
table.insert(coordinates, hasCoordinates)
end
-- Add child locations
if results and results.results then
for childPageName, data in pairs(results.results) do
if data.printouts and data.printouts['Has Coordinates'] and data.printouts['Has Coordinates'][1] then
local coords = data.printouts['Has Coordinates'][1]
table.insert(coordinates, coords)
end
end
end
-- Build the display_map call
local mapParams = {}
if #coordinates > 0 then
table.insert(mapParams, table.concat(coordinates, ';'))
end
table.insert(mapParams, 'zoom=6')
table.insert(mapParams, 'service=leaflet')
table.insert(mapParams, 'height=250px')
if hasCoordinates ~= '' then
table.insert(mapParams, 'center=' .. hasCoordinates)
end
if hasGeoJson ~= '' then
table.insert(mapParams, 'geojson=' .. hasGeoJson)
end
if #coordinates > 0 or hasGeoJson ~= '' then
return frame:callParserFunction('#display_map', table.unpack(mapParams))
else
return ''
end
end
return p