<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ml">
	<id>https://schoolwiki.in/index.php?action=history&amp;feed=atom&amp;title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82%3AOSM_Map</id>
	<title>ഘടകം:OSM Map - നാൾവഴി</title>
	<link rel="self" type="application/atom+xml" href="https://schoolwiki.in/index.php?action=history&amp;feed=atom&amp;title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82%3AOSM_Map"/>
	<link rel="alternate" type="text/html" href="https://schoolwiki.in/index.php?title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:OSM_Map&amp;action=history"/>
	<updated>2026-05-13T13:27:22Z</updated>
	<subtitle>വിക്കിയിൽ ഈ താളിന്റെ നാൾവഴി</subtitle>
	<generator>MediaWiki 1.43.4</generator>
	<entry>
		<id>https://schoolwiki.in/index.php?title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:OSM_Map&amp;diff=2507751&amp;oldid=prev</id>
		<title>Ranjithsiji: ഒരു പതിപ്പ് ഇറക്കുമതി ചെയ്തു</title>
		<link rel="alternate" type="text/html" href="https://schoolwiki.in/index.php?title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:OSM_Map&amp;diff=2507751&amp;oldid=prev"/>
		<updated>2024-06-27T12:02:34Z</updated>

		<summary type="html">&lt;p&gt;ഒരു പതിപ്പ് ഇറക്കുമതി ചെയ്തു&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;ml&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;17:32, 27 ജൂൺ 2024-നു നിലവിലുണ്ടായിരുന്ന രൂപം&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;ml&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(വ്യത്യാസം ഇല്ല)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key schoolwiki_db-sch_:diff:1.41:old-2507750:rev-2507751 --&gt;
&lt;/table&gt;</summary>
		<author><name>Ranjithsiji</name></author>
	</entry>
	<entry>
		<id>https://schoolwiki.in/index.php?title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:OSM_Map&amp;diff=2507750&amp;oldid=prev</id>
		<title>en&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://schoolwiki.in/index.php?title=%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:OSM_Map&amp;diff=2507750&amp;oldid=prev"/>
		<updated>2022-10-23T15:09:43Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;പുതിയ താൾ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local mWikidata = require(&amp;#039;Module:Wikidata&amp;#039;)&lt;br /&gt;
local errorCategory = &amp;#039;[[Category:Errors of OSM Map module]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Error handler per xpcall, formatta l&amp;#039;errore.&lt;br /&gt;
local function errhandler(msg)&lt;br /&gt;
	local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;%s&amp;#039;, msg, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getLegend(points, ncols)&lt;br /&gt;
	local divStyle = {&lt;br /&gt;
		[&amp;#039;margin-top&amp;#039;] = &amp;#039;5px&amp;#039;,&lt;br /&gt;
		[&amp;#039;column-count&amp;#039;] = ncols,&lt;br /&gt;
		[&amp;#039;-moz-column-count&amp;#039;] = ncols,&lt;br /&gt;
		[&amp;#039;-webkit-column-count&amp;#039;] = ncols&lt;br /&gt;
	}&lt;br /&gt;
	local divNode = mw.html.create(&amp;#039;div&amp;#039;):css(divStyle)&lt;br /&gt;
	local currNum = 1&lt;br /&gt;
	local currChar = &amp;#039;A&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	for _, point in ipairs(points) do&lt;br /&gt;
		local pNode = mw.html.create(&amp;#039;p&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;font-size&amp;#039;, &amp;#039;90%&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;margin-top&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
		local codeNode = mw.html.create(&amp;#039;code&amp;#039;)&lt;br /&gt;
    		:css(&amp;#039;font-weight&amp;#039;, &amp;#039;bold&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;color&amp;#039;, &amp;#039;white&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border-radius&amp;#039;, &amp;#039;6px&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;border&amp;#039;, &amp;#039;2px solid &amp;#039; .. point.col)&lt;br /&gt;
			:css(&amp;#039;background&amp;#039;, point.col)&lt;br /&gt;
		if not point.symb then&lt;br /&gt;
			codeNode:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
		elseif point.symb:find(&amp;#039;-number&amp;#039;) == 1 then&lt;br /&gt;
			codeNode:wikitext(currNum)&lt;br /&gt;
			currNum = currNum + 1&lt;br /&gt;
		elseif point.symb:find(&amp;#039;-letter&amp;#039;) == 1 then&lt;br /&gt;
			codeNode:wikitext(currChar)&lt;br /&gt;
			currChar = (&amp;#039;ABCDEFGHIJKLMNOPQRSTUVWXYZA&amp;#039;):match(currChar .. &amp;#039;(.)&amp;#039;)&lt;br /&gt;
		elseif point.symb == &amp;#039;&amp;#039; then&lt;br /&gt;
		else&lt;br /&gt;
			codeNode&lt;br /&gt;
				:css(&amp;#039;padding-left&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;padding-right&amp;#039;, &amp;#039;0&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;background&amp;#039;, &amp;#039;white&amp;#039;)&lt;br /&gt;
			codeNode:wikitext(string.format(&amp;#039;[[File:Maki2-%s-18.svg|18px]]&amp;#039;, point.symb))&lt;br /&gt;
		end&lt;br /&gt;
		pNode:node(codeNode):wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039; .. point.name)&lt;br /&gt;
		divNode:node(pNode)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(divNode)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._osm(args)&lt;br /&gt;
	local points = {}&lt;br /&gt;
	local infobox = tonumber(args.infobox) or 0&lt;br /&gt;
	local mcolor  = args.color or &amp;#039;#b80000&amp;#039;&lt;br /&gt;
	local msymbol = args.symbol or &amp;#039;-number&amp;#039;&lt;br /&gt;
	local mgroup = args.group or &amp;#039;&amp;#039;&lt;br /&gt;
	local autozoom = args.autozoom or &amp;#039;y&amp;#039;&lt;br /&gt;
	local mlist = (args.list == &amp;#039;1&amp;#039; or args.list == &amp;#039;2&amp;#039;) and args.list or nil&lt;br /&gt;
	local symbol_size = &amp;#039;medium&amp;#039;&lt;br /&gt;
	local mframe = tonumber(args.frame) or 1&lt;br /&gt;
	local lat1, lat2, lon1, lon2 = 400, -400, 400, -400&lt;br /&gt;
	local map_args = {&lt;br /&gt;
		width = args.width or (infobox == 1 and 260 or 350),&lt;br /&gt;
		height = args.height or (infobox == 1 and 260 or 300),&lt;br /&gt;
		align = args.align or (infobox == 1 and &amp;#039;center&amp;#039; or &amp;#039;right&amp;#039;),&lt;br /&gt;
		frameless = (mframe == 0 or infobox == 1) and 1 or nil&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if not args.data then&lt;br /&gt;
		local num = 1&lt;br /&gt;
		if infobox == 1 and args.lat1 == nil and args.lon1 == nil then&lt;br /&gt;
			args.lat1 = mWikidata._getProperty({ &amp;#039;P625&amp;#039;, coord = &amp;#039;latitude&amp;#039;, n = 1 })&lt;br /&gt;
			args.lon1 = mWikidata._getProperty({ &amp;#039;P625&amp;#039;, coord = &amp;#039;longitude&amp;#039;, n = 1 })&lt;br /&gt;
		end&lt;br /&gt;
		while args[&amp;#039;name&amp;#039; .. num] do&lt;br /&gt;
			points[num] = {&lt;br /&gt;
				name = args[&amp;#039;name&amp;#039; .. num],&lt;br /&gt;
				desc = args[&amp;#039;desc&amp;#039; .. num],&lt;br /&gt;
				lat  = tonumber(args[&amp;#039;lat&amp;#039; .. num]) or -400,&lt;br /&gt;
				lon = tonumber(args[&amp;#039;lon&amp;#039; .. num]) or -400,&lt;br /&gt;
				col  = args[&amp;#039;color&amp;#039; .. num] or mcolor,&lt;br /&gt;
				symb = args[&amp;#039;symbol&amp;#039; .. num] or msymbol,&lt;br /&gt;
				symbsz = args[&amp;#039;size&amp;#039; .. num] or symbol_size,&lt;br /&gt;
			}&lt;br /&gt;
			if points[num].symb == &amp;#039;-number&amp;#039; and mgroup ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				points[num].symb = &amp;#039;-number-&amp;#039; .. mgroup&lt;br /&gt;
			end&lt;br /&gt;
			if points[num].lat &amp;gt; 85 or points[num].lat &amp;lt; -85 then&lt;br /&gt;
				error(string.format(&amp;#039;Invalid value for lat%d&amp;#039;, num), 2)&lt;br /&gt;
			elseif points[num].lon &amp;gt; 180 or points[num].lon &amp;lt; -180 then&lt;br /&gt;
				error(string.format(&amp;#039;Invalid value for lon%d&amp;#039;, num), 2)&lt;br /&gt;
			else&lt;br /&gt;
				lat1 = math.min(lat1, points[num].lat)&lt;br /&gt;
				lat2 = math.max(lat2, points[num].lat)&lt;br /&gt;
				lon1 = math.min(lon1, points[num].lon)&lt;br /&gt;
				lon2 = math.max(lon2, points[num].lon)&lt;br /&gt;
			end&lt;br /&gt;
			num = num + 1&lt;br /&gt;
		end&lt;br /&gt;
		if #points == 1 and args.symbol == nil and args.symbol1 == nil then&lt;br /&gt;
			points[1].symb = nil&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.zoom then&lt;br /&gt;
		map_args.zoom = tonumber(args.zoom)&lt;br /&gt;
	elseif not args.data then&lt;br /&gt;
		if #points == 1 then&lt;br /&gt;
			map_args.zoom = 10&lt;br /&gt;
			if infobox == 1 then&lt;br /&gt;
				map_args.zoom = 13&lt;br /&gt;
			end&lt;br /&gt;
		elseif autozoom == &amp;#039;y&amp;#039; then&lt;br /&gt;
			local dx = 1.1 * (lon2 - lon1) / 360&lt;br /&gt;
			local dy = 1.1 * (math.log(math.tan(math.pi * (1 + lat2 / 90) / 4)) - math.log(math.tan( math.pi * (1 + lat1 / 90) / 4))) / (2 * math.pi)&lt;br /&gt;
&lt;br /&gt;
			local scalex, scaley&lt;br /&gt;
			if dx == 0 then scalex = 18 else scalex = math.floor(-math.log(dx) / math.log(2)) end&lt;br /&gt;
			if dy == 0 then scaley = 18 else scaley = math.floor(-math.log(dy) / math.log(2)) end&lt;br /&gt;
			if dx == 0 and dy == 0 then&lt;br /&gt;
				map_args.zoom = 10&lt;br /&gt;
	   		else&lt;br /&gt;
   				map_args.zoom = math.max(0, math.min(18, scalex, scaley))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if mframe == 1 and infobox ~= 1 then&lt;br /&gt;
		map_args.text = (args.caption or &amp;#039;&amp;#039;) .. (mlist and getLegend(points, mlist) or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.centre_lon then&lt;br /&gt;
		map_args.longitude = tonumber(args.centre_lon)&lt;br /&gt;
	elseif not args.data then&lt;br /&gt;
		if #points == 1 then&lt;br /&gt;
			map_args.longitude = points[1].lon&lt;br /&gt;
		else&lt;br /&gt;
			map_args.longitude = (lon1 + lon2) / 2&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.centre_lat then&lt;br /&gt;
		map_args.latitude = tonumber(args.centre_lat)&lt;br /&gt;
	elseif not args.data then&lt;br /&gt;
		if #points == 1 then&lt;br /&gt;
			map_args.latitude = points[1].lat&lt;br /&gt;
		else&lt;br /&gt;
			local l1 = 1 - math.log(math.tan(math.pi * (1 + lat1 / 90) / 4)) / math.pi&lt;br /&gt;
			local l2 = 1 - math.log(math.tan(math.pi * (1 + lat2 / 90) / 4)) / math.pi&lt;br /&gt;
			local centrey = (l1 + l2) / 2&lt;br /&gt;
			centrey = (math.atan(math.exp(math.pi * (1 - centrey))) - math.pi / 4) * 360 / math.pi&lt;br /&gt;
			map_args.latitude = centrey&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local m_data&lt;br /&gt;
	if args.data then&lt;br /&gt;
		m_data = args.data&lt;br /&gt;
	else&lt;br /&gt;
		m_data = { type = &amp;#039;FeatureCollection&amp;#039;, features = {} }&lt;br /&gt;
		for i, point in ipairs(points) do&lt;br /&gt;
			m_data.features[i] = {&lt;br /&gt;
				type = &amp;#039;Feature&amp;#039;,&lt;br /&gt;
				properties = {&lt;br /&gt;
					[&amp;#039;marker-symbol&amp;#039;] = point.symb,&lt;br /&gt;
					[&amp;#039;marker-color&amp;#039;] = point.col,&lt;br /&gt;
					[&amp;#039;marker-size&amp;#039;] = point.symbsz,&lt;br /&gt;
					title = point.name,&lt;br /&gt;
					description = point.desc&lt;br /&gt;
				},&lt;br /&gt;
				geometry = {&lt;br /&gt;
					type = &amp;#039;Point&amp;#039;,&lt;br /&gt;
					coordinates = { point.lon, point.lat }&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
		m_data = mw.text.jsonEncode(m_data)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.debug then&lt;br /&gt;
		local mdebug = mw.text.jsonEncode(map_args)&lt;br /&gt;
		return string.format(&amp;#039;&amp;lt;pre&amp;gt;%s\n\n%s&amp;lt;/pre&amp;gt;&amp;#039;, mdebug, m_data)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.getCurrentFrame():extensionTag(&amp;#039;mapframe&amp;#039;, m_data, map_args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.osm(frame)&lt;br /&gt;
	return select(2, xpcall(function()&lt;br /&gt;
		return p._osm(getArgs(frame, { parentOnly = true }))&lt;br /&gt;
	end, errhandler))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>en&gt;WOSlinker</name></author>
	</entry>
</feed>