Modul:Infobox mapframe
Tampilan
![]() | Modul ini dinilai sebagai modul beta, dan siap digunakan secara luas. Modul ini masih baru dan harus digunakan dengan hati-hati untuk memastikan bahwa hasilnya sesuai dengan yang diharapkan. |
Halaman terkait |
---|
Penggunaan
Modul yang otomatis membuat mapframe dalam kotak info dengan masukan pengguna minimum
Penggunaan umum
Tempatkan templat {{Infobox mapframe}}, mengikuti dokumentasinya. Modul ini dapat diimpor ke modul lua lainnya.
Peta otomatis di kotak info
Sunting templat kotak infonya (atau bak pasirnya). Tambah baris seperti contoh di bawah pada kotak info Anda. Ganti angka (4, atau 97 ke 99), dengan angka yang sesuai dengan jumlah parameter yang Anda rencanakan.
Jika ditempatkan di atas kotak info | Jika ditempatkan di bawah kotak info |
---|---|
| image4 = {{#invoke:Infobox mapframe|auto}} | caption4 = {{#invoke:Infobox mapframe|autocaption}} |
| header97 = {{#if:{{{mapframe|}}}|Location}} | data98 = {{#invoke:Infobox mapframe|auto}} | data99 = {{#invoke:Infobox mapframe|autocaption}} |
Jika templat tersebut mengandung{{#invoke:Check for unknown parameters}}
, tambah parameter berikut:
| mapframe | mapframe-caption | mapframe-custom | mapframe-id | mapframe-coord | mapframe-wikidata | mapframe-point | mapframe-shape | mapframe-frame-width | mapframe-frame-height | mapframe-shape-fill | mapframe-shape-fill-opacity | mapframe-stroke-color | mapframe-stroke-colour | mapframe-stroke-width | mapframe-marker | mapframe-marker-color | mapframe-marker-colour | mapframe-geomask | mapframe-geomask-stroke-color | mapframe-geomask-stroke-colour | mapframe-geomask-stroke-width | mapframe-geomask-fill | mapframe-geomask-fill-opacity | mapframe-zoom | mapframe-length_km | mapframe-length_mi | mapframe-area_km2 | mapframe-area_mi2 | mapframe-frame-coordinates | mapframe-frame-coord | mapframe-switcher | mapframe-height | mapframe-width
Begitu selesai, parameter di atas akan tersedia kepada pengguna.
- Nilai bawaan parameter-parameter ini dapat ditentukan dengan menyebut #invoke, contohnya
{{#invoke:Infobox mapframe|auto|mapframe-marker=library}}
berarti library marker digunakan kecuali nilai yang berbeda diberikan. - Secara bawaan peta tidak ditampilkan, kecuali menyebutkan
|mapframe=yes
. Untuk menyalakannya, pada sebutan #invoke tambahkan|onByDefault=yes
– yang berarti peta tersebut akan ditampilkan kecuali menyebutkan|mapframe=no
. onByDefault dapat kondisional, seperti jika parameter lainnya muncul, misal|onByDefault={{#if:{{{pushpin_map|}}}|no|yes}}
- Tambah parameter baru ke dokumentasi. Gunakan
{{Infobox mapframe/doc/parameters}}
. Tentukan nilai bawaan (jika menggunakan penyebutan #invoke) dengan menambahkan parameter |nama parameter=nilai. Luaran otomatisnya ditunjukkan di bawah:
Konten yang diperluas |
---|
- Parameter dapat juga ditambahkan ke TemplateData dapat ditambahkan dengan menyalin-tempel:
Lihat pula
local mf = require('Module:Mapframe')
function setCleanArgs(argsTable)
local cleanArgs = {}
for key, val in pairs(argsTable) do
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val ~= '' then
cleanArgs[key] = val
end
else
cleanArgs[key] = val
end
end
return cleanArgs
end
function hasWikidataProperty(item_id, property_id)
if not(item_id) or not(mw.wikibase.isValidEntityId(item_id)) or not(mw.wikibase.entityExists(item_id)) then
return false
end
local statements = mw.wikibase.getBestStatements(item_id, property_id)
if not statements or #statements == 0 then
return false
end
local hasNoValue = ( statements[1].mainsnak and statements[1].mainsnak.snaktype == 'novalue' )
if hasNoValue then
return false
end
return true
end
function getZoom(length_km)
-- max for zoom 2 is 6400km, for zoom 3 is 3200km, for zoom 4 is 1600km, etc
local zoom = math.floor(8 - (math.log10(length_km) - 2)/(math.log10(2)))
-- limit to values between 1 and 17
return math.max(1, math.min(17, zoom))
end
local p = {}
p.main = function(frame)
local parent = frame.getParent(frame)
local parentArgs = parent.args
local mapframe = p._main(parentArgs)
return frame:preprocess(mapframe)
end
p._main = function(_config)
local config = setCleanArgs(_config)
local wikidataId = config.id or mw.wikibase.getEntityIdForCurrentPage()
if not wikidataId then
return ''
end
-- Require wikidata item with coords, so something will be centred somewhere
local hasCoordinates = hasWikidataProperty(wikidataId, 'P625') -- P625 = coordinate location
if not hasCoordinates then
return ''
end
-- arguments for mapframe module
local args = {}
-- Some defaults/overrides for infobox presentation
args.display = "inline"
args.frame = "yes"
args.plain = "yes"
args["frame-width"] = config["frame-width"] or "270"
args["frame-height"] = config["frame-height"] or "200"
args["frame-align"] = "center"
args["frame-lat"] = config["frame-lat"] or config["frame-latitude"] or ""
args["frame-long"] = config["frame-long"] or config["frame-longitude"] or ""
-- Calculate zoom from length or area (converted to km or km2)
if config.length_km then
args.zoom = getZoom(tonumber(config.length_km))
elseif config.length_mi then
args.zoom = getZoom(tonumber(config.length_mi)*1.609344)
elseif config.area_km2 then
args.zoom = getZoom(math.sqrt(tonumber(config.area_km2)))
elseif config.area_mi2 then
args.zoom = getZoom(math.sqrt(tonumber(config.area_mi2))*1.609344)
else
args.zoom = config.zoom or 10
end
-- Shape
args.type = "shape"
if config.id then args.id = config.id end
args["stroke-width"] = config["shape-stroke-width"] or config["stroke-width"] or "3"
args["stroke-color"] = config["shape-stroke-color"] or config["shape-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or "#FF0000"
-- Line
args.type2 = "line"
if config.id then args.id2 = config.id end
args["stroke-width2"] = config["line-stroke-width"] or config["stroke-width"] or "5"
args["stroke-color2"] = config["line-stroke-color"] or config["line-stroke-colour"] or config["stroke-color"] or config["stroke-colour"] or "#FF0000"
-- Point
local hasOsmRelationId = hasWikidataProperty(wikidataId, 'P402') -- P402 is OSM relation ID
if not hasOsmRelationId then
args.type3 = "point"
if config.id then args.id3 = config.id end
if config.marker then args.marker3 = config.marker end
args["marker-color"] = config["marker-color"] or config["marker-colour"] or "#5E74F3"
end
local mapframe = mf._main(args)
local tracking = hasOsmRelationId and '' or '[[Category:Infobox mapframe without OSM relation ID on Wikidata]]'
return mapframe .. tracking
end
return p