<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://bsd.neuroinf.jp/w/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3ACoordinates</id>
	<title>モジュール:Coordinates - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://bsd.neuroinf.jp/w/index.php?action=history&amp;feed=atom&amp;title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%3ACoordinates"/>
	<link rel="alternate" type="text/html" href="https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;action=history"/>
	<updated>2026-05-30T18:25:25Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=43585&amp;oldid=prev</id>
		<title>Nijcadmin: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=43585&amp;oldid=prev"/>
		<updated>2020-01-29T04:27:38Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2020年1月29日 (水) 13:27時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wiki-mw_:diff:1.41:old-43584:rev-43585 --&gt;
&lt;/table&gt;</summary>
		<author><name>Nijcadmin</name></author>
	</entry>
	<entry>
		<id>https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=43584&amp;oldid=prev</id>
		<title>bsd&gt;Jarekt: support of SDC</title>
		<link rel="alternate" type="text/html" href="https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=43584&amp;oldid=prev"/>
		<updated>2020-01-17T04:29:14Z</updated>

		<summary type="html">&lt;p&gt;support of SDC&lt;/p&gt;
&lt;a href=&quot;https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;amp;diff=43584&amp;amp;oldid=26143&quot;&gt;差分を表示&lt;/a&gt;</summary>
		<author><name>bsd&gt;Jarekt</name></author>
	</entry>
	<entry>
		<id>https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=26143&amp;oldid=prev</id>
		<title>WikiSysop: 1版</title>
		<link rel="alternate" type="text/html" href="https://bsd.neuroinf.jp/w/index.php?title=%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Coordinates&amp;diff=26143&amp;oldid=prev"/>
		<updated>2014-04-20T01:36:45Z</updated>

		<summary type="html">&lt;p&gt;1版&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
&lt;br /&gt;
This module is intended to (eventually) replace some or all functionality of {{location}} and related&lt;br /&gt;
templates. At the moment it is collection of methods related to geolocation. &lt;br /&gt;
&lt;br /&gt;
*function coordinates.LocationTemplateCore(frame)&lt;br /&gt;
**function coordinates.GeoHack_link(frame)&lt;br /&gt;
***function coordinates.lat_lon(frame)&lt;br /&gt;
****function coordinates._deg2dms(deg,lang)&lt;br /&gt;
***function coordinates.externalLink(frame)&lt;br /&gt;
****function coordinates._externalLink(site, globe, latStr, lonStr, lang, attributes)&lt;br /&gt;
**function coordinates._getHeading(attributes)&lt;br /&gt;
**function coordinates.externalLinksSection(frame)&lt;br /&gt;
***function coordinates._externalLink(site, globe, latStr, lonStr, lang, attributes)&lt;br /&gt;
*function coordinates.getHeading(frame)  &lt;br /&gt;
*function coordinates.deg2dms(frame)&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
coordinates = {};&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
local i18n     = require(&amp;#039;Module:I18n/coordinates&amp;#039;)    -- get localized translations of site names&lt;br /&gt;
local Fallback = require(&amp;#039;Module:Fallback&amp;#039;)            -- get fallback functions&lt;br /&gt;
local yesno    = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Hardwired parameters ==============&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
-- Angles associated with each abriviation of compass point names. See [[:en:Points of the compass]]&lt;br /&gt;
local compass_points = {&lt;br /&gt;
  N    = 0,&lt;br /&gt;
  NBE  = 11.25,&lt;br /&gt;
  NNE  = 22.5,&lt;br /&gt;
  NEBN = 33.75,&lt;br /&gt;
  NE   = 45,&lt;br /&gt;
  NEBE = 56.25,&lt;br /&gt;
  ENE  = 67.5,&lt;br /&gt;
  EBN  = 78.75,&lt;br /&gt;
  E    = 90,&lt;br /&gt;
  EBS  = 101.25,&lt;br /&gt;
  ESE  = 112.5,&lt;br /&gt;
  SEBE = 123.75,&lt;br /&gt;
  SE   = 135,&lt;br /&gt;
  SEBS = 146.25,&lt;br /&gt;
  SSE  = 157.5,&lt;br /&gt;
  SBE  = 168.75,&lt;br /&gt;
  S    = 180,&lt;br /&gt;
  SBW  = 191.25,&lt;br /&gt;
  SSW  = 202.5,&lt;br /&gt;
  SWBS = 213.75,&lt;br /&gt;
  SW   = 225,&lt;br /&gt;
  SWBW = 236.25,&lt;br /&gt;
  WSW  = 247.5,&lt;br /&gt;
  WBS  = 258.75,&lt;br /&gt;
  W    = 270,&lt;br /&gt;
  WBN  = 281.25,&lt;br /&gt;
  WNW  = 292.5,&lt;br /&gt;
  NWBW = 303.75,&lt;br /&gt;
  NW   = 315,&lt;br /&gt;
  NWBN = 326.25,&lt;br /&gt;
  NNW  = 337.5,&lt;br /&gt;
  NBW  = 348.75,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- URL definitions for different sites. Strings: $lat, $lon, $lang, $attr will be replaced with latitude, longitude, language code and GeoHack attribution parameters strings.&lt;br /&gt;
local SiteURL = {&lt;br /&gt;
	GeoHack        = &amp;#039;http://tools.wmflabs.org/geohack/geohack.php?pagename={{FULLPAGENAMEE}}&amp;amp;params=$lat_N_$lon_E_$attr&amp;amp;language=$lang&amp;#039;,&lt;br /&gt;
	GoogleEarth    = &amp;#039;{{fullurl:tools:~para/GeoCommons/earth.php|latdegdec=$lat&amp;amp;londegdec=$lon&amp;amp;scale=10000&amp;amp;commons=1}}&amp;#039;,&lt;br /&gt;
	Proximityrama  = &amp;#039;{{fullurl:tools:~para/GeoCommons/proximityrama|latlon=$lat,$lon}}&amp;#039;,&lt;br /&gt;
	OpenStreetMap  = &amp;#039;{{fullurl:tools:~kolossos/openlayers/commons-on-osm.php|zoom=16&amp;amp;lat=$lat&amp;amp;lon=$lon}}&amp;#039;,&lt;br /&gt;
	GoogleMaps = { &lt;br /&gt;
		Mars  = &amp;#039;http://www.google.com/mars/#lat=$lat&amp;amp;lon=$lon&amp;amp;zoom=8&amp;#039;,&lt;br /&gt;
		Moon  = &amp;#039;http://www.google.com/moon/#lat=$lat&amp;amp;lon=$lon&amp;amp;zoom=8&amp;#039;,&lt;br /&gt;
		Earth = &amp;#039;http://maps.google.com/maps?ll=$lat,$lon&amp;amp;spn=0.01,0.01&amp;amp;t=k&amp;amp;q=http://toolserver.org/~para/GeoCommons/GeoCommons-simple.kml&amp;amp;hl=$lang&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Categories&lt;br /&gt;
local CoorCat = {&lt;br /&gt;
	File          = &amp;#039;[[Category:Media with locations]]&amp;#039;,&lt;br /&gt;
	Gallery       = &amp;#039;[[Category:Galleries with coordinates]]&amp;#039;,&lt;br /&gt;
	Category      = &amp;#039;[[Category:Categories with coordinates]]&amp;#039;,&lt;br /&gt;
	globe         = &amp;#039;[[Category:Media with %s locations]]&amp;#039;,&lt;br /&gt;
	default       = &amp;#039;[[Category:Media with default locations]]&amp;#039;,&lt;br /&gt;
	erroneous     = &amp;#039;[[Category:Media with erroneous locations]]&amp;lt;span style=&amp;quot;color:red;font-weight:bold&amp;quot;&amp;gt;Error: Invalid parameters!&amp;lt;/span&amp;gt;\n&amp;#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Functions =========================&lt;br /&gt;
-- =======================================&lt;br /&gt;
&lt;br /&gt;
-- parse attribute variable returning desired field&lt;br /&gt;
function coordinates.parseAttribute(frame)&lt;br /&gt;
  return string.match(mw.text.decode(frame.args[1]), mw.text.decode(frame.args[2]) .. &amp;#039;:&amp;#039; .. &amp;#039;([^_]*)&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Parse attribute variable returning heading field. If heading is a string than try to convert it to an angle&lt;br /&gt;
function coordinates.getHeading(frame)  &lt;br /&gt;
	local attributes&lt;br /&gt;
	if frame.args[1] then&lt;br /&gt;
		attributes = frame.args[1]&lt;br /&gt;
	elseif frame.args.attributes then&lt;br /&gt;
		attributes = frame.args.attributes&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local hNum = coordinates._getHeading(attributes)&lt;br /&gt;
	if hNum == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(hNum)&lt;br /&gt;
end&lt;br /&gt;
-- Helper core function for getHeading. &lt;br /&gt;
function coordinates._getHeading(attributes)&lt;br /&gt;
	if attributes == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local hStr = string.match(mw.text.decode(attributes), &amp;#039;heading:([^_]*)&amp;#039;)&lt;br /&gt;
	if hStr == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local hNum = tonumber( hStr )&lt;br /&gt;
	if hNum == nil then&lt;br /&gt;
		hStr = string.upper (hStr)&lt;br /&gt;
		hNum = compass_points[hStr]  &lt;br /&gt;
	end&lt;br /&gt;
	if hNum ~= nil then&lt;br /&gt;
		hNum = hNum%360&lt;br /&gt;
	end&lt;br /&gt;
	return hNum&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Convert degrees to degrees/minutes/seconds notation comonly used when displaying coordinates&lt;br /&gt;
function coordinates.deg2dms(frame)&lt;br /&gt;
	local deg = tonumber(frame.args[1])&lt;br /&gt;
	local lang&lt;br /&gt;
	if frame.args.lang and mw.language.isSupportedLanguage(frame.args.lang) then &lt;br /&gt;
		lang = frame.args.lang&lt;br /&gt;
	else -- get user&amp;#039;s chosen language &lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if deg==nil then&lt;br /&gt;
		return frame.args[1];&lt;br /&gt;
	else&lt;br /&gt;
		return coordinates._deg2dms(deg,lang)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-- Helper core function for deg2dms. &lt;br /&gt;
function coordinates._deg2dms(deg,lang)&lt;br /&gt;
	local dNum, mNum, sNum, dStr, mStr, sStr&lt;br /&gt;
	local Lang = mw.language.new(lang)&lt;br /&gt;
	deg  = math.floor(360000*(deg%360)+0.49)     -- convert float to an integer. This step HAS to be identical for all conversions to avoid incorrect results due to different rounding&lt;br /&gt;
	dNum = math.floor(deg/360000) % 360          -- degree number (integer in 0-360 range)&lt;br /&gt;
	mNum = math.floor(deg/6000  ) %  60          -- minute number (integer in 0-60 range)&lt;br /&gt;
	sNum =           (deg%6000  ) / 100          -- seconds number (float with 2 decimal digits in 0-60 range)&lt;br /&gt;
	dStr = Lang:formatNum(dNum)                  -- degree string &lt;br /&gt;
	mStr = Lang:formatNum(mNum)                  -- minute string &lt;br /&gt;
	sStr = Lang:formatNum(sNum)                  -- second string &lt;br /&gt;
	if mNum&amp;lt;10 then&lt;br /&gt;
		mStr = &amp;#039;0&amp;#039; ..mStr                        -- pad with zero if a single digit&lt;br /&gt;
	end&lt;br /&gt;
	if sNum&amp;lt;10 then&lt;br /&gt;
		sStr = &amp;#039;0&amp;#039; ..sStr                        -- pad with zero if less than ten&lt;br /&gt;
	end&lt;br /&gt;
	str = string.format(&amp;#039;%s°&amp;amp;nbsp;%s′&amp;amp;nbsp;%s″&amp;#039;, dStr, mStr, sStr);&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- format coordinate location string &lt;br /&gt;
function coordinates.lat_lon(frame)&lt;br /&gt;
	local lat = tonumber(frame.args.lat)&lt;br /&gt;
	local lon = tonumber(frame.args.lon)&lt;br /&gt;
	if lon then -- get longitude t0 be in -180 to 180 range&lt;br /&gt;
		lon=lon%360&lt;br /&gt;
		if lon&amp;gt;180 then&lt;br /&gt;
			lon = lon-360&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local lang&lt;br /&gt;
	if frame.args.lang and mw.language.isSupportedLanguage(frame.args.lang) then &lt;br /&gt;
		lang = frame.args.lang&lt;br /&gt;
	else -- get user&amp;#039;s chosen language &lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if lat==nil or lon==nil then&lt;br /&gt;
		return &amp;#039;latitude, longitude&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		local nsew = Fallback._langSwitch(i18n.NSEW, lang) -- find set of localized translation of N, S, W and E in the desired language &lt;br /&gt;
		local SN, EW, latStr, lonStr&lt;br /&gt;
		if lat&amp;lt;0 then SN = nsew.S else SN = nsew.N end         -- choose S or N depending on latitude  degree sign&lt;br /&gt;
		if lon&amp;lt;0 then EW = nsew.W else EW = nsew.E end         -- choose W or E depending on longitude degree sign&lt;br /&gt;
		latStr = coordinates._deg2dms(math.abs(lat), lang)     -- Convert latitude  degrees to degrees/minutes/seconds&lt;br /&gt;
		lonStr = coordinates._deg2dms(math.abs(lon), lang)     -- Convert longitude degrees to degrees/minutes/seconds&lt;br /&gt;
		return string.format(&amp;#039;%s&amp;amp;nbsp;%s, %s&amp;amp;nbsp;%s&amp;#039;, latStr, SN, lonStr, EW)&lt;br /&gt;
		--return string.format(&amp;#039;&amp;lt;span class=&amp;quot;latitude&amp;quot;&amp;gt;%s %s&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;longitude&amp;quot;&amp;gt;%s %s&amp;lt;/span&amp;gt;&amp;#039;, latStr, SN, lonStr, EW)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Create URL for different sites based on globe (planet), latitude, longitude, language code and GeoHack attribution parameters&lt;br /&gt;
function coordinates.externalLink(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if args.lang and mw.language.isSupportedLanguage(args.lang) then &lt;br /&gt;
		lang = args.lang&lt;br /&gt;
	else -- get user&amp;#039;s chosen language &lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	return coordinates._externalLink(args.site or &amp;#039;GeoHack&amp;#039;, args.globe or &amp;#039;Earth&amp;#039;, args.lat, args.lon, lang, args.attributes or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
-- Helper core function for externalLink &lt;br /&gt;
function coordinates._externalLink(site, globe, latStr, lonStr, lang, attributes)&lt;br /&gt;
	local str&lt;br /&gt;
	if site == &amp;#039;GoogleMaps&amp;#039; then&lt;br /&gt;
		str = SiteURL.GoogleMaps[globe]&lt;br /&gt;
	else&lt;br /&gt;
		str = SiteURL[site];&lt;br /&gt;
		attributes = string.format(&amp;#039;globe:%s_%s&amp;#039;, globe, attributes)&lt;br /&gt;
		str = mw.ustring.gsub( str, &amp;#039;$attr&amp;#039;, attributes)&lt;br /&gt;
	end&lt;br /&gt;
	str = mw.ustring.gsub( str, &amp;#039;$lat&amp;#039;, latStr)&lt;br /&gt;
	str = mw.ustring.gsub( str, &amp;#039;$lon&amp;#039;, lonStr)&lt;br /&gt;
	str = mw.ustring.gsub( str, &amp;#039;$lang&amp;#039;, lang)&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- adjust attributes depending on the template that calls it&lt;br /&gt;
function coordinates.alterAttributes(attributes, mode)&lt;br /&gt;
	-- indicate which template called it&lt;br /&gt;
	if mode==&amp;#039;camera&amp;#039; then                                   -- Used by {{Location}} and {{Location dec}}&lt;br /&gt;
		if string.find(attributes, &amp;#039;type:camera&amp;#039;)==nil then&lt;br /&gt;
			attributes = &amp;#039;type:camera_&amp;#039; .. attributes&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode==&amp;#039;object&amp;#039;or mode ==&amp;#039;globe&amp;#039; then                           -- Used by {{Object location}}&lt;br /&gt;
		if string.find(attributes, &amp;#039;class:object&amp;#039;)==nil then&lt;br /&gt;
			attributes = &amp;#039;class:object_&amp;#039; .. attributes&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode==&amp;#039;inline&amp;#039; then                               -- Used by {{Inline coordinates}} (actually that template does not set any attributes at the moment)&lt;br /&gt;
	elseif mode==&amp;#039;user&amp;#039; then                                 -- Used by {{User location}}&lt;br /&gt;
		attributes = &amp;#039;type:user_location&amp;#039;&lt;br /&gt;
	elseif mode==&amp;#039;institution&amp;#039; then                          --Used by {{Institution/coordinates}} (categories only)	&lt;br /&gt;
		attributes = &amp;#039;type:institution&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return attributes&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
-- Create link to GeoHack tool which displays latitude and longitude coordinates in DMS format&lt;br /&gt;
function coordinates.GeoHack_link(frame)&lt;br /&gt;
	-- create link and coordintate string&lt;br /&gt;
	local latlon = coordinates.lat_lon(frame)&lt;br /&gt;
	if latlon==&amp;#039;lattiude, longitude&amp;#039; then&lt;br /&gt;
		return latlon&lt;br /&gt;
	else&lt;br /&gt;
		frame.args.site = &amp;#039;GeoHack&amp;#039;&lt;br /&gt;
		local url = frame:preprocess(coordinates.externalLink(frame)) -- use preprocess to get page name&lt;br /&gt;
		return string.format(&amp;#039;&amp;lt;span class=&amp;quot;plainlinksneverexpand&amp;quot;&amp;gt;[%s %s]&amp;lt;/span&amp;gt;&amp;#039;, url, latlon) --&amp;lt;span class=&amp;quot;plainlinks nourlexpansion&amp;quot;&amp;gt;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function coordinates.externalLinksSection(frame)&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if args.lang and mw.language.isSupportedLanguage(args.lang) then &lt;br /&gt;
		lang = args.lang&lt;br /&gt;
	else -- get user&amp;#039;s chosen language &lt;br /&gt;
		lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if not args.namespaceNum then&lt;br /&gt;
		args.namespace = frame:preprocess( &amp;quot;{{NAMESPACE}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local str&lt;br /&gt;
	if args.globe==&amp;#039;Earth&amp;#039; then -- Earth locations will have 3 or 4 links&lt;br /&gt;
		str = string.format(&amp;#039;[%s %s] - [%s %s] - [%s %s]&amp;#039;, &lt;br /&gt;
			coordinates._externalLink(&amp;#039;OpenStreetMap&amp;#039;, &amp;#039;Earth&amp;#039;, args.lat, args.lon, lang, &amp;#039;&amp;#039;),  &lt;br /&gt;
			Fallback._langSwitch(i18n.OpenStreetMaps, lang),&lt;br /&gt;
			coordinates._externalLink(&amp;#039;GoogleMaps&amp;#039;   , &amp;#039;Earth&amp;#039;, args.lat, args.lon, lang, &amp;#039;&amp;#039;),  &lt;br /&gt;
			Fallback._langSwitch(i18n.GoogleMaps, lang),&lt;br /&gt;
			coordinates._externalLink(&amp;#039;GoogleEarth&amp;#039;  , &amp;#039;Earth&amp;#039;, args.lat, args.lon, lang, &amp;#039;&amp;#039;),  &lt;br /&gt;
			Fallback._langSwitch(i18n.GoogleEarth, lang))&lt;br /&gt;
		if args.namespace==&amp;quot;Category&amp;quot; then&lt;br /&gt;
			str = string.format(&amp;#039;%s - [%s %s]&amp;#039;, str,&lt;br /&gt;
				coordinates._externalLink(&amp;#039;Proximityrama&amp;#039;, &amp;#039;Earth&amp;#039;, args.lat, args.lon, lang, &amp;#039;&amp;#039;),  &lt;br /&gt;
				Fallback._langSwitch(i18n.Proximityrama, lang))&lt;br /&gt;
		end &lt;br /&gt;
	elseif args.globe==&amp;#039;Mars&amp;#039; or args.globe==&amp;#039;Moon&amp;#039; then&lt;br /&gt;
		str = string.format(&amp;#039;[%s %s]&amp;#039;, &lt;br /&gt;
			coordinates._externalLink(&amp;#039;GoogleMaps&amp;#039;, args.globe, args.lat, args.lon, lang, &amp;#039;&amp;#039;),  &lt;br /&gt;
			Fallback._langSwitch(i18n.GoogleMaps, lang))&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--return frame:preprocess(str) -- use preprocess to expand {{#fullurl}}&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
&lt;br /&gt;
Core section of template:Location, template:Object location and template:Globe location.&lt;br /&gt;
This method requires several arguments to be passed to it or it&amp;#039;s parent metchod/template:&lt;br /&gt;
 * globe      = Possible options: Earth, Mars or Moon. Venus, Mercury, Titan, Ganymede are also supported but are unused as of 2013.&lt;br /&gt;
 * mode       = Possible options: &lt;br /&gt;
  - camera - call from {{location}}&lt;br /&gt;
  - object - call from {{Object location}}&lt;br /&gt;
  - globe  - call from {{Globe location}}&lt;br /&gt;
 * lat        = latitude in degrees&lt;br /&gt;
 * lon        = longitude in degrees&lt;br /&gt;
 * attributes = attributes&lt;br /&gt;
 * lang       = language code&lt;br /&gt;
 * namespace  = namespace name: File, Category, (Gallery)&lt;br /&gt;
]]&lt;br /&gt;
function coordinates.LocationTemplateCore(frame)&lt;br /&gt;
	-- prepare arguments&lt;br /&gt;
	args = frame.args&lt;br /&gt;
	if not args or not args.lat then -- if no arguments provided than use parent arguments&lt;br /&gt;
		args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then &lt;br /&gt;
		args.lang = frame:preprocess( &amp;quot;{{int:lang}}&amp;quot; ) -- get user&amp;#039;s chosen language &lt;br /&gt;
	end&lt;br /&gt;
	if not (args.namespace) then -- if not provided than look up&lt;br /&gt;
		args.namespace = frame:preprocess( &amp;quot;{{NAMESPACE}}&amp;quot; )&lt;br /&gt;
	end&lt;br /&gt;
	if args.namespace==&amp;#039;&amp;#039; then -- if empty than it is a gallery&lt;br /&gt;
		args.namespace = &amp;#039;Gallery&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local bare   = yesno(args.bare,false)&lt;br /&gt;
	local Status = &amp;#039;primary&amp;#039; -- used by {{#coordinates:}}&lt;br /&gt;
	if yesno(args.secondary,false) then&lt;br /&gt;
		Status = &amp;#039;secondary&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
    args.attributes = coordinates.alterAttributes(args.attributes or &amp;#039;&amp;#039;, args.mode)&lt;br /&gt;
	frame.args = args&lt;br /&gt;
	&lt;br /&gt;
	-- check for errors and add Geo (microformat) code for machine readability.&lt;br /&gt;
	local lat = tonumber(args.lat)&lt;br /&gt;
	local lon = tonumber(args.lon)&lt;br /&gt;
	if lon then -- get longitude t0 be in -180 to 180 range&lt;br /&gt;
		lon=lon%360&lt;br /&gt;
		if lon&amp;gt;180 then&lt;br /&gt;
			lon = lon-360&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local Categories, geoMicroFormat, coorTag = &amp;#039;&amp;#039;, &amp;#039;&amp;#039;, &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Categories, {{#coordinates}} and geoMicroFormat will be only added to File, Category and Gallery pages&lt;br /&gt;
	if (args.namespace == &amp;#039;File&amp;#039; or args.namespace == &amp;#039;Category&amp;#039; or args.namespace == &amp;#039;Gallery&amp;#039;) then&lt;br /&gt;
		if lat and lon then -- if lat and lon are numbers...&lt;br /&gt;
			if lat==0 and lon==0 then -- lat=0 and lon=0 is a common issue when copying from flickr and other sources&lt;br /&gt;
				Categories = CoorCat.default&lt;br /&gt;
			end&lt;br /&gt;
			if args.noError==0 or (math.abs(lat)&amp;gt;90) then -- check for errors ({{#coordinates:}} also checks for errors )&lt;br /&gt;
				Categories = Categories .. CoorCat.erroneous&lt;br /&gt;
			end&lt;br /&gt;
			local cat = CoorCat[args.namespace]&lt;br /&gt;
			if cat then -- add category based on namespace&lt;br /&gt;
				Categories = Categories .. cat&lt;br /&gt;
			end&lt;br /&gt;
			-- if not earth than add a category for each globe&lt;br /&gt;
			if args.mode and args.globe and args.mode==&amp;#039;globe&amp;#039; and args.globe~=&amp;#039;Earth&amp;#039; then&lt;br /&gt;
				Categories = Categories .. string.format(CoorCat[args.mode], args.globe)&lt;br /&gt;
			end&lt;br /&gt;
			-- add  &amp;lt;span class=&amp;quot;geo&amp;quot;&amp;gt; Geo (microformat) code: it is included for machine readability&lt;br /&gt;
			geoMicroFormat = string.format(&amp;#039;&amp;lt;span class=&amp;quot;geo&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;%10.6f; %11.6f&amp;lt;/span&amp;gt;&amp;#039;,lat, lon)&lt;br /&gt;
			-- https://www.mediawiki.org/wiki/Extension:GeoData&lt;br /&gt;
			if args.namespace == &amp;#039;File&amp;#039; and Status ~= &amp;#039;secondary&amp;#039; then -- TODO enable for secondary cases without throwing errors&lt;br /&gt;
				--coorTag = string.format(&amp;#039;{{#coordinates:%f|%f|%s|%s}}&amp;#039;, frame.args.lat, frame.args.lon, args.attributes, Status)&lt;br /&gt;
				coorTag = string.format(&amp;#039;{{#coordinates:%10.6f|%11.6f|%s}}&amp;#039;, lat, lon, args.attributes)&lt;br /&gt;
			end&lt;br /&gt;
		else -- if lat and lon are not numbers then add error category&lt;br /&gt;
			Categories = Categories .. CoorCat.erroneous&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Call helper functions to render different parts of the template&lt;br /&gt;
	local str1, str2, str3, str4, inner_table, heading&lt;br /&gt;
	str1 = coordinates.GeoHack_link(frame)  									-- the coordinates and link to GeoHack&lt;br /&gt;
	heading = coordinates._getHeading(frame.args.attributes)					-- get heading arrow section&lt;br /&gt;
	if heading then&lt;br /&gt;
		--str1 =  string.format(&amp;#039;%s&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;span style=&amp;quot;{{Transform-rotate|%f}}&amp;quot;&amp;gt;[[File:North Pointer.svg|20px|link=|alt=]]&amp;lt;/span&amp;gt;&amp;#039;, str1, 360-heading)&lt;br /&gt;
		local fname = string.format(&amp;#039;{{Compass rose file|%f|style=heading}}&amp;#039;, heading)&lt;br /&gt;
		str1 =  string.format(&amp;#039;%s&amp;amp;nbsp;&amp;amp;nbsp;[[%s|25px|link=|alt=]]&amp;#039;, str1, fname, heading)&lt;br /&gt;
	end&lt;br /&gt;
	str2 = Fallback._langSwitch(i18n.LocationTemplateLinkLabel, args.lang) 	-- header of the link section&lt;br /&gt;
	str3 = coordinates.externalLinksSection(frame) or &amp;#039;&amp;#039;					-- external link section&lt;br /&gt;
	str4 = &amp;#039;[[File:Circle-information.svg|18x18px|alt=info|link=Commons:Geocoding]]&amp;#039;&lt;br /&gt;
	inner_table = string.format(&amp;#039;&amp;lt;td style=&amp;quot;border:none;&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;border:none;&amp;quot;&amp;gt;%s %s&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;border:none;&amp;quot;&amp;gt;%s%s&amp;lt;/td&amp;gt;&amp;#039;, str1, str2, str3, str4, geoMicroFormat)&lt;br /&gt;
	&lt;br /&gt;
	-- combine strings into a table&lt;br /&gt;
	local templateText&lt;br /&gt;
	if bare then&lt;br /&gt;
		templateText  = string.format(&amp;#039;&amp;lt;table style=&amp;quot;width:100%%&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;%s&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, inner_table)&lt;br /&gt;
	else&lt;br /&gt;
		-- choose name of the field&lt;br /&gt;
		local field_name = &amp;#039;Location&amp;#039;&lt;br /&gt;
		if args.mode==&amp;#039;camera&amp;#039; then &lt;br /&gt;
			field_name = Fallback._langSwitch(i18n.CameraLocation, args.lang)&lt;br /&gt;
		elseif args.mode==&amp;#039;object&amp;#039; then &lt;br /&gt;
			field_name = Fallback._langSwitch(i18n.ObjectLocation, args.lang)&lt;br /&gt;
		elseif args.mode==&amp;#039;globe&amp;#039; then&lt;br /&gt;
			field_list = Fallback._langSwitch(i18n.GlobeLocation, args.lang)&lt;br /&gt;
			if args.globe and i18n.GlobeLocation[&amp;#039;en&amp;#039;][args.globe] then -- verify globe is provided and is recognized&lt;br /&gt;
				field_name = field_list[args.globe]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local style = frame:preprocess(string.format(&amp;#039;{{Infobar-Layout|lang=%s}}&amp;#039;,lang))&lt;br /&gt;
		templateText  = string.format(&amp;#039;&amp;lt;table %s&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th class=&amp;quot;type fileinfo-paramfield&amp;quot;&amp;gt;%s&amp;lt;/th&amp;gt;%s&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, style, field_name, inner_table)&lt;br /&gt;
	end&lt;br /&gt;
	return frame:preprocess(templateText .. Categories .. coorTag)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return coordinates&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>