コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

モジュール:WikidataCoord

モジュールの解説[表示] [編集] [履歴] [キャッシュを破棄]

このモジュールは入力した経緯度を{{Coord}}に変換して返します。入力する経緯度はウィキデータから取得した値をそのまま渡すことができます。経緯度は変換を経て{{Coord}}に渡され、そのままテンプレートを展開して表示します。

引数の書式

[編集]

ウィキデータから取得した経緯度は下記のように、分と秒がアポストロフィークォーテーションマークの表記になっています。これは、本モジュールへの入力として使用できます。

入力:{{#property:P625|from=Q218501}}
出力(コード):47°34'12"N, 52°40'55"W
出力(表示):47°34'12"N, 52°40'55"W

分と秒がプライムとダブルプライム()表記の場合も入力できます。

座標が10進法表記の場合も入力できます。

例:53.67667°N 112.82861°W

座標オプション(region、scaleなど)はregion:JP_scale:10000のように、第2引数でまとめて入力します。このモジュールでは特に変換せず、そのまま{{Coord}}に渡します。名前付き引数(|display=|name=など)もそのまま{{Coord}}に渡します。

テンプレートでの使い方

[編集]

ウィキデータから経緯度を取得して、座標を生成する使い方では下記のようにします。

{{#invoke:WikidataCoord|main|{{#property:P625|from={{{1|}}}}}|{{{2|}}}|display={{{display|}}}|format={{{format|}}}|name={{{name|}}}|notes={{{notes|}}}}}

require('strict')
local getArgs = require('Module:Arguments').getArgs

local patterns = {
	'(%d+)°(%d+)'([%d%.]+)"([NS]),%s*(%d+)°(%d+)'([%d%.]+)"([EW])',		-- if the returned data looks like 55°13'12"N, 23°17'17"E
	'(%d+)°(%d+)'([NS]),%s*(%d+)°(%d+)'([EW])',									-- if the returned data looks like 54°24'N, 25°25'E
	'(%d+)°(%d+)[′\']([%d%.]+)[″\"]([NS]),?%s*(%d+)°(%d+)[′\']([%d%.]+)[″\"]([EW])',	-- when args[1] is a dms string that uses quotes or primes
	'(%d+)°(%d+)[′\']([NS]),?%s*(%d+)°(%d+)[′\']([EW])',								-- when args[1] is a dms string that uses quotes or primes, bit shorter format
	'(%d+%.?%d*)°([NS]),?%s*(%d+%.?%d*)°([EW])',										-- when args[1] is a decimal degrees string
	}

local params = {'display', 'format', 'name', 'notes'};							-- {{coord}} template paramters


--[[--------------------------< I S _ S E T >------------------------------------------------------------------

Whether variable is set or not.  A variable is set when it is not nil and not empty.

]]

local function is_set( var )
	return not (var == nil or var == '');
end


--[[--------------------------< M A I N >----------------------------------------------------------------------

Template entry point.  This function takes up to two unnamed positional parameters:
	1 = coordinate string typically from a call to Wikidata like this: {{#property:P625|from=Q...}}
	2 = coordinate parameters; see Template:Coord
	
Also takes the named parameters |display=, |format=, |name=, |notes= which it passes on to {{coord}}

Reformats the Wikidata coordinate string into unnamed parameters for {{coord}}

{{#invoke:WikidataCoord|main|{{#property:P625|from={{{1}}}}}|{{{2}}}|display={{{display}}}|format={{{format}}}|name={{{name}}}|notes={{{notes}}}}}

]]

local function main (frame)
	local args = getArgs(frame);
	local lat_long = {};														-- table of lat/long coords extracted from wikidata return 
	
	if not is_set (args[1]) then												-- in case wikidata returns nothing (happens when Q... is wrong)
		return '<span style="font-size:100%" class="error">{{WikidataCoord}} – 座標データがありません</span>';		-- error message and quit
	else
		for _, pattern in ipairs (patterns) do
			lat_long[1], lat_long[2], lat_long[3], lat_long[4], lat_long[5], lat_long[6], lat_long[7], lat_long[8] =
				mw.ustring.match (args[1], pattern)
			if lat_long[1] then
				break;
			end
		end
	end

	if not lat_long[1] then
		return '<span style="font-size:100%" class="error">{{WikidataCoord}} – 無効な座標データです</span>';	-- wikidata returned something else
	end
	
	if is_set (args[2]) then													-- coordinate parameters are in second unnammed positional parameter
		table.insert (lat_long, args[2]);										-- add coordinate parameters as next positional parameter after coordnates
	end

	for _, param in ipairs (params) do
		if is_set (args[param]) then
			lat_long[param] = args[param];										-- add the named parameters if they have a value
		end
	end

	if args._debug then
		return table.concat ({'<code style="color:inherit; background:inherit; border:none;">{{coord|', table.concat (lat_long, '|' ), '}}</code>'});
	end
	return frame:expandTemplate ({title = 'coord' or 'coord2' , args=lat_long});				-- invoke template {{coord}} with wikidata lat/long
end


--[[--------------------------< E X P O R T E D   F U N C T I O N >--------------------------------------------
]]

return {main = main}