Modulo:WikidataKoord

El Vikipedio, la libera enciklopedio
Jump to navigation Jump to search
Dokumentado Dokumentado

Ĉi tiu modulo ebligas legi geografajn koordinatojn (p625) en vikidatumoj.

latitudo resendas latitudon. longitudo resendas longitudon. koordinatoj resendas latitudon kaj longitudon. lat_d, lat_m, lat_s resendas latitudon respektive en grado, minuto kaj sekundo. long_d, long_m, long_s resendas latitudon respektive en grado, minuto kaj sekundo. long_EW resendas se la longitudon estas Eosto aŭ Uesto. kompari estas ilo por kompari longitudon el vikidatumoj kaj parametron el la funkcio.

La strukturo de P625 estas (ekzemplo el Maconge) :

["P625"] = table#114 {

    table#115 {
      ["id"] = "Q16750$87516b33-49ff-944f-b48a-6221d3c2e04e",
      ["mainsnak"] = table#116 {
        ["datatype"] = "globe-coordinate",
        ["datavalue"] = table#117 {
          ["type"] = "globecoordinate",
          ["value"] = table#118 {
            ["globe"] = "http://www.wikidata.org/entity/Q2",
            ["latitude"] = 47.221388888889,
            ["longitude"] = 4.5783333333333,
            ["precision"] = 0.00027777777777778,
          },
        },
        ["property"] = "P625",
        ["snaktype"] = "value",
      },
      ["rank"] = "normal",
      ["references"] = table#119 {
        table#120 {
          ["hash"] = "f70116eac7f49194478b3025330bfd8dcffa3c69",
          ["snaks"] = table#121 {
            ["P143"] = table#122 {
              table#123 {
                ["datatype"] = "wikibase-item",
                ["datavalue"] = table#124 {
                  ["type"] = "wikibase-entityid",
                  ["value"] = table#125 {
                    ["entity-type"] = "item",
                    ["numeric-id"] = 8447,
                  },
                },
                ["property"] = "P143",
                ["snaktype"] = "value",
              },
            },
          },
          ["snaks-order"] = table#126 {
            "P143",
          },
        },
      },
      ["type"] = "statement",
    },
  },


Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
local p = {}

   local matematiko = require( "Module:Math" )
   
   function p.latitudo()
	local entity = mw.wikibase.getEntity()
	if not entity then
		return nil
	end
        local geo = entity:getBestStatements( 'P625' )
	if (#geo == 0) or (geo[1].mainsnak.datatype ~= "globe-coordinate") then -- 
		return nil
	end
	local v = geo[1].mainsnak.datavalue.value.latitude
	return v
end 

function p.longitudo()
	local entity = mw.wikibase.getEntity()
	if not entity then
		return nil
	end
        local geo = entity:getBestStatements( 'P625' )
	if (#geo == 0) or (geo[1].mainsnak.datatype ~= "globe-coordinate") then -- 
		return nil
	end
	local v = geo[1].mainsnak.datavalue.value.longitude
	return v
end 


function p.koordinatoj ()
	return p.latitudo()..', '..p.longitudo()
end 

function p.lat_d()
	local v = p.latitudo() 
	if v ~= nil then 
	    v = math.abs(v)
	    v = math.floor(v)
	 end   
	return v
end 

function p.lat_m() 
	local v = p.latitudo() 
	if v ~= nil then v = math.floor(math.abs(v) * 60 % 60 ) end
	return  v
end 

function p.lat_s()
	local v = math.abs(p.latitudo())
          v = matematiko._round(v * 3600 % 60,0)
     return v
   
end

function p.lat_NS()
	if p.latitudo() > 0 then return 'N' else return 'S' end
end

function p.long_d()
    local v = math.abs(p.longitudo())
    v = math.floor(v)
	return v
end 

function p.long_m()
    local v = math.abs(p.longitudo())
	v = math.floor(v * 60 % 60)
    return v
end 

function p.long_s()
	local v = math.abs(p.longitudo())
          v = matematiko._round(v * 3600 % 60,0)
     return v
end

function p.long_EW()
  local v = p.longitudo()
  if v ~= nil then 
   if v > 0 then v= 'E' else v= 'U' end
  end
  return v
end

function p.kompari(frame)
    if abs(p.longitudo()- frame.args[1]) > 0.1 then return 'eraro' end 
    return frame.args[1]
end    
return p