Modulo:WikidataKoord

El Vikipedio, la libera enciklopedio
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