<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
	<id>https://wiki.addressforall.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>WIKI - User contributions [en-us]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.addressforall.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/doc/Special:Contributions/Admin"/>
	<updated>2026-04-17T12:19:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal/es&amp;diff=45</id>
		<title>Página principal/es</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal/es&amp;diff=45"/>
		<updated>2025-09-17T16:56:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{idiomas}}  Hola mundo  DGGS/Proj/DT  Documentation AFA.codes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hola mundo&lt;br /&gt;
&lt;br /&gt;
[[DGGS/Proj/DT]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=44</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=44"/>
		<updated>2025-09-17T16:54:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels e links&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var links = {};&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Página_principal/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,     // inglês é base&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  } else {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: base,            // inglês é sem sufixo&lt;br /&gt;
      &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  //document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
  document.querySelectorAll(&#039;a[href^=&amp;quot;/doc/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=43</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=43"/>
		<updated>2025-09-17T16:52:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels e links&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var links = {};&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Página_principal/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,     // inglês é base&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  } else {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: base,            // inglês é sem sufixo&lt;br /&gt;
      &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=42</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=42"/>
		<updated>2025-09-17T16:51:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels e links&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var links = {};&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Página_principal/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,     // inglês é base&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  } else {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: base,            // inglês é sem sufixo&lt;br /&gt;
      &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    //if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=41</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=41"/>
		<updated>2025-09-17T16:48:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // 🔧 Força mapeamento da página principal para &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    base = &#039;Main_Page&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links finais&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    var href = &#039;/doc/&#039; + links[lang]; // Gera URL corretamente&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + href + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo para o idioma atual&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    //if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=40</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=40"/>
		<updated>2025-09-17T16:46:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // 🔧 Força mapeamento da página principal para &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    base = &#039;Main_Page&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links finais&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    var href = &#039;/doc/&#039; + encodeURIComponent(links[lang]); // Gera URL corretamente&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + href + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo para o idioma atual&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    //if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=39</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=39"/>
		<updated>2025-09-17T16:45:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // 🔧 Força mapeamento da página principal para &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    base = &#039;Main_Page&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links finais&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    var href = &#039;/doc/&#039; + encodeURIComponent(links[lang]); // Gera URL corretamente&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + href + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo para o idioma atual&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=38</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=38"/>
		<updated>2025-09-17T16:40:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // 🔧 Força mapeamento da página principal para &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    base = &#039;Main_Page&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links finais&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    var href = &#039;/doc/&#039; + encodeURIComponent(links[lang]); // Gera URL corretamente&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + href + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=37</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=37"/>
		<updated>2025-09-17T16:39:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // 🔧 Força mapeamento da página principal para &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    base = &#039;Main_Page&#039;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links finais&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; +&lt;br /&gt;
        mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=36</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=36"/>
		<updated>2025-09-17T16:38:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links padrão&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Página principal → sempre forçar &amp;quot;Main_Page&amp;quot;&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Main_Page/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; +&lt;br /&gt;
        mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=35</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=35"/>
		<updated>2025-09-17T16:36:37Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Links por padrão (apenas adiciona /lang)&lt;br /&gt;
  var links = {&lt;br /&gt;
    &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
    &#039;en&#039;: base,          // inglês é sempre sem sufixo&lt;br /&gt;
    &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  // Corrige nomes da página principal&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Main_Page/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; +&lt;br /&gt;
        mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal&amp;diff=34</id>
		<title>Página principal</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal&amp;diff=34"/>
		<updated>2025-09-17T16:27:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{idiomas}}  Hola mundo  DGGS/Proj/DT  Documentation AFA.codes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hola mundo&lt;br /&gt;
&lt;br /&gt;
[[DGGS/Proj/DT]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/es&amp;diff=33</id>
		<title>Documentation AFA.codes/es</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/es&amp;diff=33"/>
		<updated>2025-09-17T16:25:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{Idiomas}}  Logo &amp;#039;&amp;#039;AFA.codes&amp;#039;&amp;#039; (anteriormente &amp;#039;&amp;#039;OSM.codes&amp;#039;&amp;#039;), servicio que implementa el estándar DNGS.  &amp;#039;&amp;#039;&amp;#039;AFA Codes&amp;#039;&amp;#039;&amp;#039; (anteriormente OSMcodes) es un proyecto del Instituto AddressForAll destinado a implementar y mejorar el sistema de geocodificación del estándar Discrete National Grid Systems - &amp;#039;&amp;#039;&amp;#039;DNGS&amp;#039;&amp;#039;&amp;#039;. AFA Codes busca la máxima calidad: altamente compacto, fácil...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:OSMcodes-logo-new.png|320px|thumb|Logo &#039;&#039;AFA.codes&#039;&#039; (anteriormente &#039;&#039;OSM.codes&#039;&#039;), servicio que implementa el estándar DNGS.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFA Codes&#039;&#039;&#039; (anteriormente OSMcodes) es un [[Projects|proyecto]] del [[Instituto AddressForAll]] destinado a implementar y mejorar el sistema de geocodificación del estándar [[Discrete National Grid Systems/es|Discrete National Grid Systems - &#039;&#039;&#039;DNGS&#039;&#039;&#039;]]. AFA Codes busca la máxima calidad: altamente compacto, fácil de usar, multipropósito y computacionalmente eficiente.&lt;br /&gt;
&lt;br /&gt;
Características principales:&lt;br /&gt;
* &#039;&#039;&#039;Página principal - selección de ubicación&#039;&#039;&#039; en [http://afa.codes http://afa.codes]&lt;br /&gt;
* &#039;&#039;&#039;Interfaz&#039;&#039;&#039; (ejemplo en BR-SP-Campinas) en [http://afa.codes/BR-SP-Campinas http://afa.codes/BR-SP-Campinas]&lt;br /&gt;
* &#039;&#039;&#039;Repositorios&#039;&#039;&#039; en https://git.afa.codes &amp;amp;nbsp; (ver también [https://api.github.com/orgs/osm-codes/repos lista API], [https://github.com/osm-codes/gridMap-draftPages/issues Issues] y [https://github.com/osm-codes/gridMap-draftPages/releases Versiones])&lt;br /&gt;
* &#039;&#039;&#039;Separación&#039;&#039;&#039; de temas: estándar DNGS (público) &#039;&#039;vs&#039;&#039; implementación AFA del estándar (potencialmente privada).&lt;br /&gt;
* &#039;&#039;&#039;Endpoints&#039;&#039;&#039; para Camerún documentados con Swagger, http://dev.api.banoc.coeurduweb.com/docs/&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Secciones==&lt;br /&gt;
&lt;br /&gt;
Principales secciones de documentación en este wiki:&lt;br /&gt;
&lt;br /&gt;
*{{ns-xref|afac|Software structure and license}}: para contratos y descripción&lt;br /&gt;
*{{ns-xref|afac|API}}: Guía oficial de la API de AFA Codes.&lt;br /&gt;
*{{ns-xref|afac|Methodology}}: explica a los profanos lo que hacemos&lt;br /&gt;
*{{ns-xref|afac|About}}: describe el proyecto, sus productos y servicios.&lt;br /&gt;
*{{ns-xref|afac|Conventions}}: establece convenciones y metodologías para este proyecto.&lt;br /&gt;
*{{ns-xref|afac|Use cases}}: describe y clasifica diversas aplicaciones y formas de utilizar la solución.&lt;br /&gt;
*{{ns-xref|afac|FAQ}}: Preguntas Frecuentes.&lt;br /&gt;
*{{ns-xref|afac|Gits}}: repositorios git con el código fuente.&lt;br /&gt;
*{{ns-xref|afac|Tests}}: script de prueba y ejecución para las páginas de consulta &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt;.&lt;br /&gt;
*{{ns-xref|afac|Viz}}: módulo de visualización de datos e interfaz de comandos.&lt;br /&gt;
**[[afac:Viz/Navegação|afac:Viz/&#039;&#039;&#039;Navegación&#039;&#039;&#039;]]: manual de referencia sobre el mapa y la interfaz de navegación de geocódigos.&lt;br /&gt;
*{{ns-xref|afac|Guides}}: guías rápidas, de uso e instalación.&lt;br /&gt;
*{{ns-xref|afac|Attributions}}: créditos, licencias y otra información de atribución.&lt;br /&gt;
*{{ns-xref|afac|Versions}}: versiones del software usado en producción.&lt;br /&gt;
*Países con &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; implementado, independientemente del dominio:&lt;br /&gt;
**{{ns-xref|afac|DE}} - Alemania&lt;br /&gt;
**{{ns-xref|afac|BR}} - Brasil;&lt;br /&gt;
**{{ns-xref|afac|CO}} - Colombia.&lt;br /&gt;
**{{ns-xref|afac|CM}} - Camerún.&lt;br /&gt;
**{{ns-xref|afac|SV}} - El Salvador.&lt;br /&gt;
**{{ns-xref|afac|EC}} - Ecuador.&lt;br /&gt;
**{{ns-xref|afac|IN}} - India.&lt;br /&gt;
**{{ns-xref|afac|UY}} - Uruguay.&lt;br /&gt;
** ... - Pendiente creación de automatización para la metodología, https://gis.stackexchange.com/a/489059/7505&lt;br /&gt;
&lt;br /&gt;
*Otras funciones implementadas en el dominio:&lt;br /&gt;
**Ver [[afac:About#Other site functions]].&lt;br /&gt;
&lt;br /&gt;
== Puntos Clave ==&lt;br /&gt;
&lt;br /&gt;
* AFA Codes es un sistema de geocodificación donde cada rectángulo del territorio nacional, desde 1 km² hasta 1 m², recibe el código alfanumérico más corto posible, generado a partir de coordenadas geográficas.&lt;br /&gt;
* Puede geolocalizar por código cualquier elemento fijo en el territorio, como ciudades, barrios, aldeas, fincas, parcelas, casas, espacios para vehículos, árboles, postes, mobiliario urbano, etc.&lt;br /&gt;
* El sistema respeta la soberanía de cada país. Está hecho a medida, considerando la estructura territorial de estados y municipios.&lt;br /&gt;
* Una vez adoptado en un país, el 100% de su territorio está cubierto con geocódigos generados por el sistema.&lt;br /&gt;
* El sistema es reversible: la coordenada geográfica se convierte en un código corto, y este código también puede revertirse a la coordenada geográfica que lo originó.&lt;br /&gt;
* El código puede usarse como número de registro, ya que no se repite en el mismo municipio.&lt;br /&gt;
* Localizaciones sin direcciones ni códigos postales, como sitios, asentamientos y viviendas en áreas rurales, asentamientos informales, bosques y zonas apartadas, reciben un geocódigo que puede tanto localizar como identificar el objeto. Incluso el lugar más remoto e inaccesible es geocodable.&lt;br /&gt;
* AFA Codes es desarrollado por el Instituto AddressForAll de Tecnologías Geo-Sociales como una solución tecnológica abierta e innovadora. No vincula a instituciones ni usuarios al desarrollador de la tecnología.&lt;br /&gt;
&lt;br /&gt;
== Origen del Nombre ==&lt;br /&gt;
El acrónimo AFA proviene de las iniciales del nombre del Instituto &#039;&#039;&#039;A&#039;&#039;&#039;ddress&#039;&#039;&#039;F&#039;&#039;&#039;or&#039;&#039;&#039;A&#039;&#039;&#039;ll, y se usa un punto entre este acrónimo y la palabra &amp;quot;codes&amp;quot; como estrategia de comunicación para dar a conocer tanto el nombre como la dirección del sitio web.&lt;br /&gt;
&lt;br /&gt;
Sustituye el antiguo nombre OSMcodes para evitar conflicto con OpenStreetMap. Inicialmente, el nombre anterior provenía del hecho de que el proyecto se basaba en el mapa de [[OpenStreetMap]] y pretendía promoverlo.&lt;br /&gt;
&lt;br /&gt;
==Véase también==&lt;br /&gt;
&lt;br /&gt;
*[[Generalized Geohash]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects|OSMcodes]]&lt;br /&gt;
[[Category:OSMcodes|*Documentation_OSMcodes]]&lt;br /&gt;
[[Category:Public]]&lt;br /&gt;
[[Category:Public01]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/es&amp;diff=32</id>
		<title>DGGS/Proj/DT/es</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/es&amp;diff=32"/>
		<updated>2025-09-17T16:24:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{Idiomas}}  thumb Proyección sobre un poliedro de 120 caras, del inglés &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039;isdyakis &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039;riacontahedron (es un sólido catalán con 120 caras triangulares idénticas), propuesta en 2020 por https://www.mdpi.com/2220-9964/9/5/315  Abajo el poliedro de 120 caras:  580px  Cada una de las 120 caras corresponde a un plano de proyección del tipo &amp;quot;Slice and Dice proj...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:Disdyakis_30.png|thumb]]&lt;br /&gt;
Proyección sobre un poliedro de 120 caras, del inglés [[wikipedia:Disdyakis triacontahedron|&#039;&#039;&#039;D&#039;&#039;&#039;isdyakis &#039;&#039;&#039;T&#039;&#039;&#039;riacontahedron]] (es un sólido catalán con 120 caras triangulares idénticas), propuesta en 2020 por https://www.mdpi.com/2220-9964/9/5/315&lt;br /&gt;
&lt;br /&gt;
Abajo el poliedro de 120 caras:&lt;br /&gt;
&lt;br /&gt;
[[file:Disdyakis_30_net.svg|center|580px]]&lt;br /&gt;
&lt;br /&gt;
Cada una de las 120 caras corresponde a un plano de proyección del tipo &amp;quot;Slice and Dice projection&amp;quot; (van Leeuwen y Strebe). &lt;br /&gt;
&lt;br /&gt;
== Proyección Slice and Dice ==&lt;br /&gt;
La proyección de van Leeuwen y Strebe, originalmente orientada a triángulos equiláteros, fue optimizada para &#039;&#039;&#039;menor distorsión angular en triángulos isósceles&#039;&#039;&#039; en el mismo año, https://www.arxiv.org/pdf/2008.13670v1 pero publicada solo en 2021, https://doi.org/10.1145/3460521&lt;br /&gt;
&lt;br /&gt;
La proyección DT hace uso de triángulos isósceles, por lo tanto está pendiente analizar la optimización.&lt;br /&gt;
&lt;br /&gt;
Además del [https://doi.org/10.1559/152304006779500687 original cerrado], y alguna descripción en los artículos citados, la proyección equivalente en área &amp;quot;Slice and Dice&amp;quot; (van Leeuwen y Strebe) está descrita en https://www.researchgate.net/publication/250016113_A_Slice-and-Dice_Approach_to_Area_Equivalence_in_Polyhedral_Map_Projections (donde podemos pedir al autor).&lt;br /&gt;
&lt;br /&gt;
== Modelado del triacontaedro rómbico ==&lt;br /&gt;
La reunión de 4 en 4 caras resulta en un [[wikipedia:Rhombic triacontahedron|Triacontaedro rómbico]] de 120/4=30 caras cuadriláteras, usadas como L0 de un [[Generalized Geohash/es|GGeohash]].&lt;br /&gt;
&lt;br /&gt;
[[File:RhombicTriacontahedron-30facesFrom120.png|340px]] [[File:Rhombictriacontahedron_net.svg|340px]]&lt;br /&gt;
&lt;br /&gt;
En las caras del [[wikipedia:Rhombic triacontahedron]], el ángulo menor del rombo es de 63.43°, más cercano a 90° que el rombo de la proyección [[DGGS/Proj/ISEA]], por eso superior (con capacidad) también en el formato de la celda.&lt;br /&gt;
&lt;br /&gt;
Trabajos recientes de Liang et al. 2022 reecuacionaron la [[DGGS/Proj/Planos concurrentes|construcción]] de los cuadriláteros de la proyección, https://doi.org/10.1080/17538947.2022.2130459&lt;br /&gt;
[[File:Tjde a 2130459 f0007 ob.png|centro|thumb|680px|Mismo &#039;&#039;Rhombic triacontahedron&#039;&#039; en construcción alternativa. ]]&lt;br /&gt;
[[File:Fig3-dingEtAll2024.png|centro|sinmarco|680x680px]]&lt;br /&gt;
&lt;br /&gt;
== Ajuste local del país ==&lt;br /&gt;
[[File:ProjDT-BR-dobras1.png|thumb|380px|Ejemplo de posible ajuste de altitudes sobre Brasil. ]]&lt;br /&gt;
&lt;br /&gt;
Aún en estudio si realmente es viable... Estrategias complementarias, usando [[DGGS/Proj/Planos_concurrentes#Propuesta_de_la_re-proyecci%C3%B3n_lineal_en_planos_concurrentes|Propuesta de la re-proyección lineal (bisagras)]], para ajuste al relieve del país, o al menos a su altitud mediana. La estrategia puede hacer uso de:&lt;br /&gt;
&lt;br /&gt;
* Cambio de radio de elipsoide, para que el geoide tangencie mejor la altitud mediana. No es bien visto por causar efectos colaterales indeseados en el posicionamiento.&lt;br /&gt;
&lt;br /&gt;
* Cambio en la elección del &amp;quot;plano secante al elipsoide&amp;quot;. Esto permite alguna compatibilidad entre ambos, DGGS y [[DNGS]], por estar usando los mismos polígonos en la proyección (los ángulos sólidos se preservan).&lt;br /&gt;
&lt;br /&gt;
En el uso del DT para cada DNGS (cada país), la elección de los cuadriláteros deja de tener mayor compromiso con el &#039;&#039;rhombic triacontahedron&#039;&#039;, es libre. Vuelve a ser el compromiso con el m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; como referencia.  &lt;br /&gt;
La &amp;quot;compatibilidad&amp;quot; entre DNGS y DGGS (basados en proyección DT) estaría solo en el uso de la proyección de referencia y simplicidad en los algoritmos de conversión entre rejillas. &lt;br /&gt;
&lt;br /&gt;
== Conversión ISEA ==&lt;br /&gt;
H3 Uber y diversas otras implementaciones del estándar DGGS hicieron uso de la proyección ISEA, que parecía la más adecuada hasta los años 2020. Según [https://doi.org/10.1080/17538947.2024.2324952 Huang et al. 2024], en &#039;&#039;&amp;quot;Bidirectional mapping between rhombic triacontahedron and icosahedral hexagonal discrete global grid systems&amp;quot;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
: El icosaedro es actualmente el poliedro principal en la investigación y aplicación de los sistemas de cuadrícula global discreta (DGGS). Sin embargo, comparado con el triacontaedro rómbico (RT), el icosaedro tiene desventajas, como menor precisión de ajuste a la esfera, mayor distorsión de proyección y dificultad para incorporar la estructura matricial para el almacenamiento de datos geoespaciales. &lt;br /&gt;
&lt;br /&gt;
El artículo demuestra técnicas eficientes de conversión del &amp;quot;legado ISEA&amp;quot; en la proyección DT.&lt;br /&gt;
&lt;br /&gt;
La ilustración abajo muestra cómo el rombo puede servir de referencia para 3 tipos de mosaicos:&lt;br /&gt;
[[File:Tjde a 2130459 f0004 oc.png|centro|thumb|620x620px]]&lt;br /&gt;
&lt;br /&gt;
PD: ver también artículo https://doi.org/10.3390/ijgi11120595&lt;br /&gt;
&lt;br /&gt;
== Véase también ==&lt;br /&gt;
&lt;br /&gt;
* [[DGGS/Proj/ISEA]]&lt;br /&gt;
* Uso en https://www.mdpi.com/2220-9964/11/6/322 para distance transform Canada&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Main_Page/es&amp;diff=31</id>
		<title>Main Page/es</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Main_Page/es&amp;diff=31"/>
		<updated>2025-09-17T16:22:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{idiomas}}  Hola mundo  DGGS/Proj/DT  Documentation AFA.codes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hola mundo&lt;br /&gt;
&lt;br /&gt;
[[DGGS/Proj/DT]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal/pt&amp;diff=30</id>
		<title>Página principal/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=P%C3%A1gina_principal/pt&amp;diff=30"/>
		<updated>2025-09-17T16:21:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{idiomas}}  Olá, mundo  DGGS/Proj/DT  Documentation AFA.codes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
&lt;br /&gt;
Olá, mundo&lt;br /&gt;
&lt;br /&gt;
[[DGGS/Proj/DT]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Main_Page&amp;diff=29</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Main_Page&amp;diff=29"/>
		<updated>2025-09-17T16:20:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{idiomas}}  Hello world  DGGS/Proj/DT  Documentation AFA.codes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hello world&lt;br /&gt;
&lt;br /&gt;
[[DGGS/Proj/DT]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=28</id>
		<title>Test201/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=28"/>
		<updated>2025-09-14T17:53:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste de tradução&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste 02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Test200]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=27</id>
		<title>Test200/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=27"/>
		<updated>2025-09-14T17:53:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
Teste de tradução&lt;br /&gt;
Teste 01&lt;br /&gt;
&lt;br /&gt;
[[Test201]]&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=26</id>
		<title>Test200</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=26"/>
		<updated>2025-09-14T17:52:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hello World!!!&lt;br /&gt;
Translation test&lt;br /&gt;
Test 01&lt;br /&gt;
&lt;br /&gt;
[[Test201]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=25</id>
		<title>Test201</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=25"/>
		<updated>2025-09-14T17:52:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hello World!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Translation test&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test 02&lt;br /&gt;
&lt;br /&gt;
[[Test200]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=24</id>
		<title>Test201/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=24"/>
		<updated>2025-09-14T17:51:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste201).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste de tradução&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste 02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=23</id>
		<title>Test200/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=23"/>
		<updated>2025-09-14T17:51:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste200).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
Teste de tradução&lt;br /&gt;
Teste 01&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=22</id>
		<title>Test200</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=22"/>
		<updated>2025-09-14T17:51:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste200).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hello World!!!&lt;br /&gt;
Translation test&lt;br /&gt;
Test 01&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/pt&amp;diff=21</id>
		<title>Documentation AFA.codes/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/pt&amp;diff=21"/>
		<updated>2025-09-14T17:51:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Documentação AFA.codes).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:OSMcodes-logo-new.png|320px|thumb|Logotipo &#039;&#039;AFA.codes&#039;&#039; (antigo &#039;&#039;OSM.codes&#039;&#039;), serviço que implementa o padrão DNGS.]]&lt;br /&gt;
&lt;br /&gt;
O &#039;&#039;&#039;AFA Codes&#039;&#039;&#039; (anteriormente OSMcodes) é um [[Projetos|projeto]] do [[Instituto AddressForAll]] com o objetivo de implementar e aperfeiçoar  o sistema de geocodificação do padrão [[Discrete National Grid Systems/pt|Discrete National Grid Systems - &#039;&#039;&#039;DNGS&#039;&#039;&#039;]]. AFA Codes buscam o máximo de qualidade: o máximo compactos, amigáveis, multifinalitários, computacionalmente eficientes.&lt;br /&gt;
&lt;br /&gt;
Principais recursos:&lt;br /&gt;
* &#039;&#039;&#039;Página inicial - seleção de localidade&#039;&#039;&#039; em [http://afa.codes http://afa.codes]&lt;br /&gt;
* &#039;&#039;&#039;Interface&#039;&#039;&#039; (exemplo em BR-SP-Campinas) em [http://afa.codes/BR-SP-Campinas http://afa.codes/BR-SP-Campinas]&lt;br /&gt;
* &#039;&#039;&#039;Repositórios&#039;&#039;&#039; em https://git.afa.codes &amp;amp;nbsp; (ver também [https://api.github.com/orgs/osm-codes/repos API list], [https://github.com/osm-codes/gridMap-draftPages/issues Issues] e [https://github.com/osm-codes/gridMap-draftPages/releases Versão])&lt;br /&gt;
* &#039;&#039;&#039;Separação&#039;&#039;&#039; dos assuntos: padrão DNGS (público) &#039;&#039;vs&#039;&#039; implementação AFA do padrão (potencialmente privado).&lt;br /&gt;
* &#039;&#039;&#039;Endpoints&#039;&#039;&#039; de Camarões documentados e com Swagger, http://dev.api.banoc.coeurduweb.com/docs/&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Seções==&lt;br /&gt;
&lt;br /&gt;
Principais seções de documentação nesta wiki:&lt;br /&gt;
&lt;br /&gt;
*{{ns-xref|afac|Estrutura e licença dos softwares}}: para contratos e descrição&lt;br /&gt;
*{{ns-xref|afac|API}}: Guia oficial da API AFA Codes. &lt;br /&gt;
*{{ns-xref|afac|Metodologia}}: descreve para leigos o que fazemos&lt;br /&gt;
*{{ns-xref|afac|Sobre}}: descreve o projeto, seus produtos e serviços.&lt;br /&gt;
*{{ns-xref|afac|Convenções}}: estabelece convenções e metodologias deste projeto.&lt;br /&gt;
*{{ns-xref|afac|Casos de uso}}: descreve e classifica as diversas aplicações e formas de utilização da solução.&lt;br /&gt;
*{{ns-xref|afac|FAQ}}: Perguntas frequentes.&lt;br /&gt;
*{{ns-xref|afac|Gits}}: repositórios git contendo códigos-fonte.&lt;br /&gt;
*{{ns-xref|afac|Testes}}: roteiro e execução de testes das páginas de consulta &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt;.&lt;br /&gt;
*{{ns-xref|afac|Viz}}: módulo de visualização dos dados e interface de comandos.&lt;br /&gt;
**[[afac:Viz/Navegação|afac:Viz/&#039;&#039;&#039;Navegação&#039;&#039;&#039;]]: manual de referência sobre a interface de navegação por mapas e geocódigos.&lt;br /&gt;
*{{ns-xref|afac|Guias}}: guias rápidos, de uso e instalação.&lt;br /&gt;
*{{ns-xref|afac|Atribuições}}: créditos, licenças e demais informes de atribuição.&lt;br /&gt;
*{{ns-xref|afac|Versões}}: versões dos softwares utilizados em produção.&lt;br /&gt;
*Países com &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; implementados, independentemente do domínio:&lt;br /&gt;
**{{ns-xref|afac|DE}} - Alemanha&lt;br /&gt;
**{{ns-xref|afac|BR}} - Brasil;&lt;br /&gt;
**{{ns-xref|afac|CO}} - Colômbia.&lt;br /&gt;
**{{ns-xref|afac|CM}} - Camarões.&lt;br /&gt;
**{{ns-xref|afac|SV}} - El Salvador.&lt;br /&gt;
**{{ns-xref|afac|EC}} - Equador.&lt;br /&gt;
**{{ns-xref|afac|IN}} - India.&lt;br /&gt;
**{{ns-xref|afac|UY}} - Uruguai.&lt;br /&gt;
** ... - Pendente criar automação para a metodologia, https://gis.stackexchange.com/a/489059/7505&lt;br /&gt;
&lt;br /&gt;
*Outras funções implementadas no domínio:&lt;br /&gt;
**Ver [[afac:Sobre#Outras funções do site]].&lt;br /&gt;
&lt;br /&gt;
== Principais pontos ==&lt;br /&gt;
&lt;br /&gt;
* O AFA Codes é um sistema de geocodificação em que, para cada retângulo do território nacional, desde 1 km² até 1 m², recebe um código alfanumérico o mais curto possível, gerado a partir das coordenadas geográficas.&lt;br /&gt;
* Pode geolocalizar por código qualquer elemento fixo no território, como cidades, bairros, povoados, fazendas, glebas, casas, vagas de veículos, árvores, postes, mobiliário urbano, etc.&lt;br /&gt;
* O sistema respeita a soberania de cada país. É feito sob medida, considerando a estrutura territorial de estados e municípios.&lt;br /&gt;
* O AFA Codes uma vez adotado no país, 100% do seu território é coberto com geocódigos gerados pelo sistema.&lt;br /&gt;
* O sistema é reversível: a coordenada geográfica é convertida para um código curto, como também este código pode ser revertido para a coordenada geográfica que o originou.&lt;br /&gt;
* O código pode ser utilizado como número de cadastro, visto que o mesmo código não se repete no mesmo município.&lt;br /&gt;
* Localidades que carecem de endereço e CEP como sítios, assentamentos e moradias na zona rural, aglomerações subnormais, matas e sertões recebem um geocódigo que pode tanto localizar como identificar o objeto. Mesmo o local mais remoto e inacessível é geocodificável.&lt;br /&gt;
* O AFA Codes é desenvolvido pelo Instituto de Tecnologias Geo-Sociais AddressForAll como uma solução inovadora de tecnologia aberta. Não prende instituições e usuários à desenvolvedora da tecnologia.&lt;br /&gt;
&lt;br /&gt;
== Origem do nome ==&lt;br /&gt;
A sigla AFA vem das iniciais do nome do Instituto &#039;&#039;&#039;A&#039;&#039;&#039;ddress&#039;&#039;&#039;F&#039;&#039;&#039;or&#039;&#039;&#039;A&#039;&#039;&#039;ll, e adota-se um ponto entre esta sigla e a palavra &amp;quot;codes&amp;quot; por uma questão de estratégia de comunicação para tornar conhecido tanto o nome quanto o endereço do website.&lt;br /&gt;
&lt;br /&gt;
Substitui o nome antigo OSMcodes para evitar conflito com OpenStreetMap. A princípio, o nome anterior veio do fato de o projeto ter sido baseado no mapa [[OpenStreetMap]] e com intensão de divulgá-lo.&lt;br /&gt;
&lt;br /&gt;
==Ver também==&lt;br /&gt;
&lt;br /&gt;
*[[Geohash generalizado]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projetos|OSMcodes]]&lt;br /&gt;
[[Category:OSMcodes|*Documentação_OSMcodes]]&lt;br /&gt;
[[Category:Public]]&lt;br /&gt;
[[Category:Public01]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes&amp;diff=20</id>
		<title>Documentation AFA.codes</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes&amp;diff=20"/>
		<updated>2025-09-14T17:51:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Documentação AFA.codes).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:OSMcodes-logo-new.png|320px|thumb|Logo &#039;&#039;AFA.codes&#039;&#039; (formerly &#039;&#039;OSM.codes&#039;&#039;), service implementing the DNGS standard.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFA Codes&#039;&#039;&#039; (formerly OSMcodes) is a [[Projects|project]] of the [[Instituto AddressForAll]] aimed at implementing and improving the geocoding system of the [[Discrete National Grid Systems/pt|Discrete National Grid Systems - &#039;&#039;&#039;DNGS&#039;&#039;&#039;]] standard. AFA Codes strive for maximum quality: highly compact, user-friendly, multi-purpose, and computationally efficient.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* &#039;&#039;&#039;Homepage - location selection&#039;&#039;&#039; at [http://afa.codes http://afa.codes]&lt;br /&gt;
* &#039;&#039;&#039;Interface&#039;&#039;&#039; (example in BR-SP-Campinas) at [http://afa.codes/BR-SP-Campinas http://afa.codes/BR-SP-Campinas]&lt;br /&gt;
* &#039;&#039;&#039;Repositories&#039;&#039;&#039; at https://git.afa.codes &amp;amp;nbsp; (see also [https://api.github.com/orgs/osm-codes/repos API list], [https://github.com/osm-codes/gridMap-draftPages/issues Issues] and [https://github.com/osm-codes/gridMap-draftPages/releases Version])&lt;br /&gt;
* &#039;&#039;&#039;Separation&#039;&#039;&#039; of topics: DNGS standard (public) &#039;&#039;vs&#039;&#039; AFA implementation of the standard (potentially private).&lt;br /&gt;
* &#039;&#039;&#039;Endpoints&#039;&#039;&#039; for Cameroon documented with Swagger, http://dev.api.banoc.coeurduweb.com/docs/&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Sections==&lt;br /&gt;
&lt;br /&gt;
Main documentation sections in this wiki:&lt;br /&gt;
&lt;br /&gt;
*{{ns-xref|afac|Software structure and license}}: for contracts and description&lt;br /&gt;
*{{ns-xref|afac|API}}: Official guide to the AFA Codes API.&lt;br /&gt;
*{{ns-xref|afac|Methodology}}: explains to laypeople what we do&lt;br /&gt;
*{{ns-xref|afac|About}}: describes the project, its products, and services.&lt;br /&gt;
*{{ns-xref|afac|Conventions}}: establishes conventions and methodologies for this project.&lt;br /&gt;
*{{ns-xref|afac|Use cases}}: describes and classifies various applications and ways to use the solution.&lt;br /&gt;
*{{ns-xref|afac|FAQ}}: Frequently Asked Questions.&lt;br /&gt;
*{{ns-xref|afac|Gits}}: git repositories containing source code.&lt;br /&gt;
*{{ns-xref|afac|Tests}}: test script and execution for &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; query pages.&lt;br /&gt;
*{{ns-xref|afac|Viz}}: data visualization module and command interface.&lt;br /&gt;
**[[afac:Viz/Navegação|afac:Viz/&#039;&#039;&#039;Navigation&#039;&#039;&#039;]]: reference manual on the map and geocode navigation interface.&lt;br /&gt;
*{{ns-xref|afac|Guides}}: quick, usage, and installation guides.&lt;br /&gt;
*{{ns-xref|afac|Attributions}}: credits, licenses, and other attribution information.&lt;br /&gt;
*{{ns-xref|afac|Versions}}: versions of the software used in production.&lt;br /&gt;
*Countries with &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; implemented, regardless of the domain:&lt;br /&gt;
**{{ns-xref|afac|DE}} - Germany&lt;br /&gt;
**{{ns-xref|afac|BR}} - Brazil;&lt;br /&gt;
**{{ns-xref|afac|CO}} - Colombia.&lt;br /&gt;
**{{ns-xref|afac|CM}} - Cameroon.&lt;br /&gt;
**{{ns-xref|afac|SV}} - El Salvador.&lt;br /&gt;
**{{ns-xref|afac|EC}} - Ecuador.&lt;br /&gt;
**{{ns-xref|afac|IN}} - India.&lt;br /&gt;
**{{ns-xref|afac|UY}} - Uruguay.&lt;br /&gt;
** ... - Pending creation of automation for the methodology, https://gis.stackexchange.com/a/489059/7505&lt;br /&gt;
&lt;br /&gt;
*Other functions implemented in the domain:&lt;br /&gt;
**See [[afac:About#Other site functions]].&lt;br /&gt;
&lt;br /&gt;
== Key Points ==&lt;br /&gt;
&lt;br /&gt;
* AFA Codes is a geocoding system where each rectangle of the national territory, from 1 km² to 1 m², receives the shortest possible alphanumeric code, generated from geographic coordinates.&lt;br /&gt;
* It can geolocate by code any fixed element in the territory, such as cities, neighborhoods, villages, farms, plots, houses, vehicle spaces, trees, poles, urban furniture, etc.&lt;br /&gt;
* The system respects the sovereignty of each country. It is tailor-made, considering the territorial structure of states and municipalities.&lt;br /&gt;
* Once adopted in a country, 100% of its territory is covered with geocodes generated by the system.&lt;br /&gt;
* The system is reversible: the geographic coordinate is converted to a short code, and this code can also be reversed to the geographic coordinate that originated it.&lt;br /&gt;
* The code can be used as a registration number, as the same code does not repeat in the same municipality.&lt;br /&gt;
* Locations lacking addresses and postal codes, such as sites, settlements, and dwellings in rural areas, informal settlements, forests, and hinterlands, receive a geocode that can both locate and identify the object. Even the most remote and inaccessible place is geocodable.&lt;br /&gt;
* AFA Codes is developed by the AddressForAll Institute of Geo-Social Technologies as an innovative open technology solution. It does not bind institutions and users to the technology developer.&lt;br /&gt;
&lt;br /&gt;
== Origin of the Name ==&lt;br /&gt;
The acronym AFA comes from the initials of the name of the &#039;&#039;&#039;A&#039;&#039;&#039;ddress&#039;&#039;&#039;F&#039;&#039;&#039;or&#039;&#039;&#039;A&#039;&#039;&#039;ll Institute, and a dot is used between this acronym and the word &amp;quot;codes&amp;quot; as a communication strategy to make both the name and the website address known.&lt;br /&gt;
&lt;br /&gt;
It replaces the old name OSMcodes to avoid conflict with OpenStreetMap. Initially, the previous name came from the fact that the project was based on the [[OpenStreetMap]] map and intended to promote it.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Generalized Geohash]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects|OSMcodes]]&lt;br /&gt;
[[Category:OSMcodes|*Documentation_OSMcodes]]&lt;br /&gt;
[[Category:Public]]&lt;br /&gt;
[[Category:Public01]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/pt&amp;diff=19</id>
		<title>DGGS/Proj/DT/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/pt&amp;diff=19"/>
		<updated>2025-09-14T17:51:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: DGGS/Proj/DT).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:Disdyakis_30.png|thumb]]&lt;br /&gt;
Projeção sobre um poliedro de 120 lados, do inglês [[wikipedia:Disdyakis triacontahedron|&#039;&#039;&#039;D&#039;&#039;&#039;isdyakis &#039;&#039;&#039;T&#039;&#039;&#039;riacontahedron]] (is a Catalan solid with 120 identical triangular faces), proposta em 2020 por https://www.mdpi.com/2220-9964/9/5/315&lt;br /&gt;
&lt;br /&gt;
Abaixo o poliedro de 120 faces:&lt;br /&gt;
&lt;br /&gt;
[[file:Disdyakis_30_net.svg|center|580px]]&lt;br /&gt;
&lt;br /&gt;
Cada uma das 120 faces corresponde a um plano de projeção do tipo &amp;quot;Slice and Dice projection&amp;quot; (van Leeuwen and Strebe). &lt;br /&gt;
&lt;br /&gt;
== Slice and Dice projection ==&lt;br /&gt;
A projeção de van Leeuwen and Strebe, originalmente orientada a triângulos equiláteros, foi otimizada para &#039;&#039;&#039;menor distorção angular em triângulos isosceles&#039;&#039;&#039; no mesmo ano, https://www.arxiv.org/pdf/2008.13670v1 mas publicada só em 2021, https://doi.org/10.1145/3460521&lt;br /&gt;
&lt;br /&gt;
A projeção DT faz uso de triângulos isosceles, portanto está pendente analisar a otimização.&lt;br /&gt;
&lt;br /&gt;
Além do [https://doi.org/10.1559/152304006779500687 original fechado], e alguma descrição nos artigos citados, a projeção igual-área &amp;quot;Slice and Dice&amp;quot; (van Leeuwen and Strebe) é descrita em https://www.researchgate.net/publication/250016113_A_Slice-and-Dice_Approach_to_Area_Equivalence_in_Polyhedral_Map_Projections (onde podemos pedir pro autor).&lt;br /&gt;
&lt;br /&gt;
== Modelagem do triacontaedro rômbico ==&lt;br /&gt;
A reunião de 4 a 4 faces resulta em um [[wikipedia:Rhombic triacontahedron|Triacontaedro rômbico]] de 120/4=30 faces quadriláteras, usadas como L0 de um [[Generalized Geohash/pt|GGeohash]].&lt;br /&gt;
&lt;br /&gt;
[[File:RhombicTriacontahedron-30facesFrom120.png|340px]] [[File:Rhombictriacontahedron_net.svg|340px]]&lt;br /&gt;
&lt;br /&gt;
Nas faces do [[wikipedia:Rhombic triacontahedron]], o  ângulo menor do losango é de 63.43°, mais pŕoximo de 90° do que o losango da projeção [[DGGS/Proj/ISEA]], por isso superior (concapacidade) também no formato da célula.&lt;br /&gt;
&lt;br /&gt;
Trabalhos recentes de Liang et al. 2022 reequacionaram a [[DGGS/Proj/Planos concorrentes|construção]] dos quadriláteros da projeção, https://doi.org/10.1080/17538947.2022.2130459&lt;br /&gt;
[[File:Tjde a 2130459 f0007 ob.png|centro|thumb|680px|Mesmo &#039;&#039;Rhombic triacontahedron&#039;&#039; em construção alternativa. ]]&lt;br /&gt;
[[File:Fig3-dingEtAll2024.png|centro|semmoldura|680x680px]]&lt;br /&gt;
&lt;br /&gt;
== Ajuste local do país ==&lt;br /&gt;
[[File:ProjDT-BR-dobras1.png|thumb|380px|Exemplo de possível ajuste de altitudes sobre o Brasil. ]]&lt;br /&gt;
&lt;br /&gt;
Ainda em estudo se realmente viável... Estratégias complementares, usando [[DGGS/Proj/Planos_concorrentes#Proposta_da_re-proje%C3%A7%C3%A3o_linear_em_planos_concorrentes|Proposta da re-projeção linear (dobradiças)]], para ajuste ao relevo do país, ou pelo menos a sua altitude mediana. A estratégia pode fazer uso de:&lt;br /&gt;
&lt;br /&gt;
* Mudança de raio de elipsoide, para que o geoide tangencie melhor a altitude mediana. Não é bem vista por causar efeitos colaterais indesejados no posicionamento.&lt;br /&gt;
&lt;br /&gt;
* Mudança na escolha do &amp;quot;plano secante ao elipsoide&amp;quot;. Isso permite alguma compatibilidade entre os dois, DGGS e [[DNGS]], por estarem usando os mesmos polígonos na projeção (ângulos sólidos são preservados).&lt;br /&gt;
&lt;br /&gt;
No uso do DT para cada DNGS (cada país), a escolha dos quadriláteros deixa de ter maior compromisso com o &#039;&#039;rhombic triacontahedron&#039;&#039;, é livre. Volta a ser o compromisso com a m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; como referência.&lt;br /&gt;
A &amp;quot;compatibilidade&amp;quot; entre DNGS e DGGS (baseados em projeção DT) estaria apenas no uso da projeção de referência e simplicidade nos algoritmos de conversão entre grades. &lt;br /&gt;
 &lt;br /&gt;
== Conversão ISEA ==&lt;br /&gt;
H3 Uber e diversas outras implementações do padrão DGGS fizeram uso da projeção ISEA, que parecia a mais adequada até anos 2020. Segundo [https://doi.org/10.1080/17538947.2024.2324952 Huang et al. 2024], em &#039;&#039;&amp;quot;Bidirectional mapping between rhombic triacontahedron and icosahedral hexagonal discrete global grid systems&amp;quot;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
: The icosahedron is currently the mainstream polyedron in research and application of discrete global grid systems (DGGS). However, compared to the rhombic triacontahedron (RT), the icosahedron has disadvantages, such as lower sphere-fitting accuracy, greater projection distortion, and difficulty in incorporating the matrix structure for geospatial data storage. &lt;br /&gt;
&lt;br /&gt;
O artigo demonstra técnicas eficientes de conversão do &amp;quot;legado ISEA&amp;quot; na projeção DT.&lt;br /&gt;
&lt;br /&gt;
A ilustração abaixo mostra como o losango pode servir de referência para 3 tipos de ladrilhos:&lt;br /&gt;
[[File:Tjde a 2130459 f0004 oc.png|centro|thumb|620x620px]]&lt;br /&gt;
&lt;br /&gt;
PS:   ver também artigo  https://doi.org/10.3390/ijgi11120595&lt;br /&gt;
&lt;br /&gt;
== Ver também ==&lt;br /&gt;
&lt;br /&gt;
* [[DGGS/Proj/ISEA]]&lt;br /&gt;
* Uso em https://www.mdpi.com/2220-9964/11/6/322 para distance transform Canada&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT&amp;diff=18</id>
		<title>DGGS/Proj/DT</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT&amp;diff=18"/>
		<updated>2025-09-14T17:51:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: DGGS/Proj/DT).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
[[File:Disdyakis_30.png|thumb]]&lt;br /&gt;
Projection onto a 120-sided polyhedron, from the English [[wikipedia:Disdyakis triacontahedron|&#039;&#039;&#039;D&#039;&#039;&#039;isdyakis &#039;&#039;&#039;T&#039;&#039;&#039;riacontahedron]] (is a Catalan solid with 120 identical triangular faces), proposed in 2020 by https://www.mdpi.com/2220-9964/9/5/315&lt;br /&gt;
&lt;br /&gt;
Below is the 120-faced polyhedron:&lt;br /&gt;
&lt;br /&gt;
[[file:Disdyakis_30_net.svg|center|580px]]&lt;br /&gt;
&lt;br /&gt;
Each of the 120 faces corresponds to a projection plane of the &amp;quot;Slice and Dice projection&amp;quot; type (van Leeuwen and Strebe).&lt;br /&gt;
&lt;br /&gt;
== Slice and Dice projection ==&lt;br /&gt;
The van Leeuwen and Strebe projection, originally oriented towards equilateral triangles, was optimized for &#039;&#039;&#039;less angular distortion in isosceles triangles&#039;&#039;&#039; in the same year, https://www.arxiv.org/pdf/2008.13670v1 but published only in 2021, https://doi.org/10.1145/3460521&lt;br /&gt;
&lt;br /&gt;
The DT projection uses isosceles triangles, so optimization is pending analysis.&lt;br /&gt;
&lt;br /&gt;
Besides the [https://doi.org/10.1559/152304006779500687 original closed], and some description in the cited articles, the equal-area &amp;quot;Slice and Dice&amp;quot; projection (van Leeuwen and Strebe) is described in https://www.researchgate.net/publication/250016113_A_Slice-and-Dice_Approach_to_Area_Equivalence_in_Polyhedral_Map_Projections (where we can request from the author).&lt;br /&gt;
&lt;br /&gt;
== Modeling the rhombic triacontahedron ==&lt;br /&gt;
The assembly of 4 by 4 faces results in a [[wikipedia:Rhombic triacontahedron|Rhombic triacontahedron]] with 120/4=30 quadrilateral faces, used as L0 of a [[Generalized Geohash/pt|GGeohash]].&lt;br /&gt;
&lt;br /&gt;
[[File:RhombicTriacontahedron-30facesFrom120.png|340px]] [[File:Rhombictriacontahedron_net.svg|340px]]&lt;br /&gt;
&lt;br /&gt;
On the faces of the [[wikipedia:Rhombic triacontahedron]], the smaller angle of the rhombus is 63.43°, closer to 90° than the rhombus of the [[DGGS/Proj/ISEA]] projection, therefore superior (with capacity) also in the cell shape.&lt;br /&gt;
&lt;br /&gt;
Recent works by Liang et al. 2022 re-equated the [[DGGS/Proj/Planos concorrentes|construction]] of the quadrilaterals of the projection, https://doi.org/10.1080/17538947.2022.2130459&lt;br /&gt;
[[File:Tjde a 2130459 f0007 ob.png|center|thumb|680px|Same &#039;&#039;Rhombic triacontahedron&#039;&#039; in alternative construction.]]&lt;br /&gt;
[[File:Fig3-dingEtAll2024.png|center|semmoldura|680x680px]]&lt;br /&gt;
&lt;br /&gt;
== Local country adjustment ==&lt;br /&gt;
[[File:ProjDT-BR-dobras1.png|thumb|380px|Example of possible altitude adjustment over Brazil.]]&lt;br /&gt;
&lt;br /&gt;
Still under study if truly viable... Complementary strategies, using [[DGGS/Proj/Planos_concorrentes#Proposta_da_re-proje%C3%A7%C3%A3o_linear_em_planos_concorrentes|Proposal of linear re-projection (hinges)]], for adjustment to the country&#039;s terrain, or at least its median altitude. The strategy may utilize:&lt;br /&gt;
&lt;br /&gt;
* Change of ellipsoid radius, so that the geoid better tangents the median altitude. Not well-regarded due to causing undesirable side effects in positioning.&lt;br /&gt;
&lt;br /&gt;
* Change in the choice of the &amp;quot;secant plane to the ellipsoid&amp;quot;. This allows some compatibility between the two, DGGS and [[DNGS]], as they use the same polygons in the projection (solid angles are preserved).&lt;br /&gt;
&lt;br /&gt;
In the use of DT for each DNGS (each country), the choice of quadrilaterals no longer has a greater commitment to the &#039;&#039;rhombic triacontahedron&#039;&#039;, it is free. The commitment returns to m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; as a reference.&lt;br /&gt;
The &amp;quot;compatibility&amp;quot; between DNGS and DGGS (based on DT projection) would only be in the use of the reference projection and simplicity in the conversion algorithms between grids.&lt;br /&gt;
&lt;br /&gt;
== ISEA Conversion ==&lt;br /&gt;
H3 Uber and several other implementations of the DGGS standard made use of the ISEA projection, which seemed the most suitable until the 2020s. According to [https://doi.org/10.1080/17538947.2024.2324952 Huang et al. 2024], in &#039;&#039;&amp;quot;Bidirectional mapping between rhombic triacontahedron and icosahedral hexagonal discrete global grid systems&amp;quot;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
: The icosahedron is currently the mainstream polyhedron in research and application of discrete global grid systems (DGGS). However, compared to the rhombic triacontahedron (RT), the icosahedron has disadvantages, such as lower sphere-fitting accuracy, greater projection distortion, and difficulty in incorporating the matrix structure for geospatial data storage.&lt;br /&gt;
&lt;br /&gt;
The article demonstrates efficient techniques for converting the &amp;quot;legacy ISEA&amp;quot; in the DT projection.&lt;br /&gt;
&lt;br /&gt;
The illustration below shows how the rhombus can serve as a reference for 3 types of tiles:&lt;br /&gt;
[[File:Tjde a 2130459 f0004 oc.png|center|thumb|620x620px]]&lt;br /&gt;
&lt;br /&gt;
PS: see also article https://doi.org/10.3390/ijgi11120595&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[DGGS/Proj/ISEA]]&lt;br /&gt;
* Usage in https://www.mdpi.com/2220-9964/11/6/322 for distance transform Canada&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=17</id>
		<title>Test201</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=17"/>
		<updated>2025-09-14T17:50:31Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Idiomas}}&lt;br /&gt;
&lt;br /&gt;
Hello World!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Translation test&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test 02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=16</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=MediaWiki:Common.js&amp;diff=16"/>
		<updated>2025-09-14T17:47:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* Any JavaScript here will be loaded for all users on every page load. */ mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function () {   console.log(&amp;quot;[Language Menu] Script started&amp;quot;);    var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);   console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);    var currentLang = &amp;#039;&amp;#039;;   var base = path;   var langs = [&amp;#039;pt&amp;#039;, &amp;#039;en&amp;#039;, &amp;#039;es&amp;#039;];    // Detecta idioma pelo sufixo   langs.forEach(function (lang) {     var suffix = &amp;#039;/&amp;#039; + lang;     if (path.toLowerCase().endsWit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
mw.hook(&#039;wikipage.content&#039;).add(function () {&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Script started&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  var path = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Current path:&amp;quot;, path);&lt;br /&gt;
&lt;br /&gt;
  var currentLang = &#039;&#039;;&lt;br /&gt;
  var base = path;&lt;br /&gt;
  var langs = [&#039;pt&#039;, &#039;en&#039;, &#039;es&#039;];&lt;br /&gt;
&lt;br /&gt;
  // Detecta idioma pelo sufixo&lt;br /&gt;
  langs.forEach(function (lang) {&lt;br /&gt;
    var suffix = &#039;/&#039; + lang;&lt;br /&gt;
    if (path.toLowerCase().endsWith(suffix)) {&lt;br /&gt;
      currentLang = lang;&lt;br /&gt;
      base = path.slice(0, -suffix.length);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Detected language:&amp;quot;, lang, &amp;quot;Base:&amp;quot;, base);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
  // Se não detectou idioma → assume inglês (default)&lt;br /&gt;
  if (!currentLang) currentLang = &#039;en&#039;;&lt;br /&gt;
&lt;br /&gt;
  // Labels e links&lt;br /&gt;
  var labels = {&lt;br /&gt;
    &#039;pt&#039;: &#039;Português&#039;,&lt;br /&gt;
    &#039;en&#039;: &#039;English&#039;,&lt;br /&gt;
    &#039;es&#039;: &#039;Español&#039;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  var links = {};&lt;br /&gt;
  if (base === &#039;Main_Page&#039; || base === &#039;Página_principal&#039;) {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: &#039;Página_principal/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: &#039;Main_Page&#039;,     // inglês é base&lt;br /&gt;
      &#039;es&#039;: &#039;Main_Page/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  } else {&lt;br /&gt;
    links = {&lt;br /&gt;
      &#039;pt&#039;: base + &#039;/pt&#039;,&lt;br /&gt;
      &#039;en&#039;: base,            // inglês é sem sufixo&lt;br /&gt;
      &#039;es&#039;: base + &#039;/es&#039;&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Monta menu de idiomas&lt;br /&gt;
  function insertContent(id, lang) {&lt;br /&gt;
    var el = document.getElementById(id);&lt;br /&gt;
    if (!el) return;&lt;br /&gt;
&lt;br /&gt;
    if (lang === currentLang) {&lt;br /&gt;
      el.textContent = labels[lang];&lt;br /&gt;
    } else {&lt;br /&gt;
      el.innerHTML = &#039;&amp;lt;a class=&amp;quot;lang-menu-link&amp;quot; href=&amp;quot;&#039; + mw.util.getUrl(links[lang]) + &#039;&amp;quot;&amp;gt;&#039; + labels[lang] + &#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  insertContent(&amp;quot;link-pt&amp;quot;, &amp;quot;pt&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-en&amp;quot;, &amp;quot;en&amp;quot;);&lt;br /&gt;
  insertContent(&amp;quot;link-es&amp;quot;, &amp;quot;es&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // 🌀 Reescreve links do conteúdo&lt;br /&gt;
  console.log(&amp;quot;[Language Menu] Rewriting content links for:&amp;quot;, currentLang);&lt;br /&gt;
&lt;br /&gt;
  document.querySelectorAll(&#039;#mw-content-text a[href^=&amp;quot;/&amp;quot;]&#039;).forEach(function (link) {&lt;br /&gt;
    if (link.classList.contains(&#039;lang-menu-link&#039;)) return; // ignora menu de idiomas&lt;br /&gt;
&lt;br /&gt;
    var href = link.getAttribute(&#039;href&#039;);&lt;br /&gt;
    if (!href) return;&lt;br /&gt;
&lt;br /&gt;
    var hrefNormalized = decodeURIComponent(href.replace(/\/$/, &#039;&#039;));&lt;br /&gt;
&lt;br /&gt;
    // Ignora âncoras e parâmetros&lt;br /&gt;
    if (href.includes(&#039;?&#039;) || href.includes(&#039;#&#039;)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora namespaces especiais&lt;br /&gt;
    if (hrefNormalized.match(/\/(Special:|File:|Category:|Help:|MediaWiki:)/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Ignora se já tem idioma&lt;br /&gt;
    if (hrefNormalized.match(/\/(pt|en|es)$/)) return;&lt;br /&gt;
&lt;br /&gt;
    // Adiciona idioma se não for inglês&lt;br /&gt;
    if (currentLang !== &#039;en&#039;) {&lt;br /&gt;
      var newHref = hrefNormalized + &#039;/&#039; + currentLang;&lt;br /&gt;
      link.setAttribute(&#039;href&#039;, newHref);&lt;br /&gt;
      console.log(&amp;quot;[Language Menu] Link modificado:&amp;quot;, href, &amp;quot;→&amp;quot;, newHref);&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Template:Idiomas&amp;diff=15</id>
		<title>Template:Idiomas</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Template:Idiomas&amp;diff=15"/>
		<updated>2025-09-14T17:46:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;div id=&amp;quot;idioma-menu&amp;quot; style=&amp;quot;background:#f0f4fa; border:1px solid #c2d10; padding:0.5em; border-radius:6px; font-size:95%; margin-bottom:1em;&amp;quot;&amp;gt;   &amp;lt;div id=&amp;quot;idioma-label&amp;quot; style=&amp;quot;font-weight:bold; margin-bottom:0.3em;&amp;quot;&amp;gt;🌐 Idioma / Language:&amp;lt;/div&amp;gt;   &amp;lt;div style=&amp;quot;display: flex; gap: 1em;&amp;quot;&amp;gt;     &amp;lt;div id=&amp;quot;link-pt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;     &amp;lt;div id=&amp;quot;link-en&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;     &amp;lt;div id=&amp;quot;link-es&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;   &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;idioma-menu&amp;quot; style=&amp;quot;background:#f0f4fa; border:1px solid #c2d10; padding:0.5em; border-radius:6px; font-size:95%; margin-bottom:1em;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;div id=&amp;quot;idioma-label&amp;quot; style=&amp;quot;font-weight:bold; margin-bottom:0.3em;&amp;quot;&amp;gt;🌐 Idioma / Language:&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;div style=&amp;quot;display: flex; gap: 1em;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;link-pt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;link-en&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;link-es&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=14</id>
		<title>Test201/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201/pt&amp;diff=14"/>
		<updated>2025-09-14T17:44:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste201).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste de tradução&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Teste 02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=13</id>
		<title>Test201</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test201&amp;diff=13"/>
		<updated>2025-09-14T17:44:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste201).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
Hello World!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Translation test&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Test 02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=12</id>
		<title>Test200/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200/pt&amp;diff=12"/>
		<updated>2025-09-14T17:43:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste200).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
Olá Mundo!!!&lt;br /&gt;
Teste de tradução&lt;br /&gt;
Teste 01&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=11</id>
		<title>Test200</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Test200&amp;diff=11"/>
		<updated>2025-09-14T17:43:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Teste200).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
Hello World!!!&lt;br /&gt;
Translation test&lt;br /&gt;
Test 01&lt;br /&gt;
[[Documentation AFA.codes]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/pt&amp;diff=10</id>
		<title>Documentation AFA.codes/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes/pt&amp;diff=10"/>
		<updated>2025-09-14T17:43:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Documentação AFA.codes).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
[[File:OSMcodes-logo-new.png|320px|thumb|Logotipo &#039;&#039;AFA.codes&#039;&#039; (antigo &#039;&#039;OSM.codes&#039;&#039;), serviço que implementa o padrão DNGS.]]&lt;br /&gt;
&lt;br /&gt;
O &#039;&#039;&#039;AFA Codes&#039;&#039;&#039; (anteriormente OSMcodes) é um [[Projetos|projeto]] do [[Instituto AddressForAll]] com o objetivo de implementar e aperfeiçoar  o sistema de geocodificação do padrão [[Discrete National Grid Systems/pt|Discrete National Grid Systems - &#039;&#039;&#039;DNGS&#039;&#039;&#039;]]. AFA Codes buscam o máximo de qualidade: o máximo compactos, amigáveis, multifinalitários, computacionalmente eficientes.&lt;br /&gt;
&lt;br /&gt;
Principais recursos:&lt;br /&gt;
* &#039;&#039;&#039;Página inicial - seleção de localidade&#039;&#039;&#039; em [http://afa.codes http://afa.codes]&lt;br /&gt;
* &#039;&#039;&#039;Interface&#039;&#039;&#039; (exemplo em BR-SP-Campinas) em [http://afa.codes/BR-SP-Campinas http://afa.codes/BR-SP-Campinas]&lt;br /&gt;
* &#039;&#039;&#039;Repositórios&#039;&#039;&#039; em https://git.afa.codes &amp;amp;nbsp; (ver também [https://api.github.com/orgs/osm-codes/repos API list], [https://github.com/osm-codes/gridMap-draftPages/issues Issues] e [https://github.com/osm-codes/gridMap-draftPages/releases Versão])&lt;br /&gt;
* &#039;&#039;&#039;Separação&#039;&#039;&#039; dos assuntos: padrão DNGS (público) &#039;&#039;vs&#039;&#039; implementação AFA do padrão (potencialmente privado).&lt;br /&gt;
* &#039;&#039;&#039;Endpoints&#039;&#039;&#039; de Camarões documentados e com Swagger, http://dev.api.banoc.coeurduweb.com/docs/&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Seções==&lt;br /&gt;
&lt;br /&gt;
Principais seções de documentação nesta wiki:&lt;br /&gt;
&lt;br /&gt;
*{{ns-xref|afac|Estrutura e licença dos softwares}}: para contratos e descrição&lt;br /&gt;
*{{ns-xref|afac|API}}: Guia oficial da API AFA Codes. &lt;br /&gt;
*{{ns-xref|afac|Metodologia}}: descreve para leigos o que fazemos&lt;br /&gt;
*{{ns-xref|afac|Sobre}}: descreve o projeto, seus produtos e serviços.&lt;br /&gt;
*{{ns-xref|afac|Convenções}}: estabelece convenções e metodologias deste projeto.&lt;br /&gt;
*{{ns-xref|afac|Casos de uso}}: descreve e classifica as diversas aplicações e formas de utilização da solução.&lt;br /&gt;
*{{ns-xref|afac|FAQ}}: Perguntas frequentes.&lt;br /&gt;
*{{ns-xref|afac|Gits}}: repositórios git contendo códigos-fonte.&lt;br /&gt;
*{{ns-xref|afac|Testes}}: roteiro e execução de testes das páginas de consulta &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt;.&lt;br /&gt;
*{{ns-xref|afac|Viz}}: módulo de visualização dos dados e interface de comandos.&lt;br /&gt;
**[[afac:Viz/Navegação|afac:Viz/&#039;&#039;&#039;Navegação&#039;&#039;&#039;]]: manual de referência sobre a interface de navegação por mapas e geocódigos.&lt;br /&gt;
*{{ns-xref|afac|Guias}}: guias rápidos, de uso e instalação.&lt;br /&gt;
*{{ns-xref|afac|Atribuições}}: créditos, licenças e demais informes de atribuição.&lt;br /&gt;
*{{ns-xref|afac|Versões}}: versões dos softwares utilizados em produção.&lt;br /&gt;
*Países com &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; implementados, independentemente do domínio:&lt;br /&gt;
**{{ns-xref|afac|DE}} - Alemanha&lt;br /&gt;
**{{ns-xref|afac|BR}} - Brasil;&lt;br /&gt;
**{{ns-xref|afac|CO}} - Colômbia.&lt;br /&gt;
**{{ns-xref|afac|CM}} - Camarões.&lt;br /&gt;
**{{ns-xref|afac|SV}} - El Salvador.&lt;br /&gt;
**{{ns-xref|afac|EC}} - Equador.&lt;br /&gt;
**{{ns-xref|afac|IN}} - India.&lt;br /&gt;
**{{ns-xref|afac|UY}} - Uruguai.&lt;br /&gt;
** ... - Pendente criar automação para a metodologia, https://gis.stackexchange.com/a/489059/7505&lt;br /&gt;
&lt;br /&gt;
*Outras funções implementadas no domínio:&lt;br /&gt;
**Ver [[afac:Sobre#Outras funções do site]].&lt;br /&gt;
&lt;br /&gt;
== Principais pontos ==&lt;br /&gt;
&lt;br /&gt;
* O AFA Codes é um sistema de geocodificação em que, para cada retângulo do território nacional, desde 1 km² até 1 m², recebe um código alfanumérico o mais curto possível, gerado a partir das coordenadas geográficas.&lt;br /&gt;
* Pode geolocalizar por código qualquer elemento fixo no território, como cidades, bairros, povoados, fazendas, glebas, casas, vagas de veículos, árvores, postes, mobiliário urbano, etc.&lt;br /&gt;
* O sistema respeita a soberania de cada país. É feito sob medida, considerando a estrutura territorial de estados e municípios.&lt;br /&gt;
* O AFA Codes uma vez adotado no país, 100% do seu território é coberto com geocódigos gerados pelo sistema.&lt;br /&gt;
* O sistema é reversível: a coordenada geográfica é convertida para um código curto, como também este código pode ser revertido para a coordenada geográfica que o originou.&lt;br /&gt;
* O código pode ser utilizado como número de cadastro, visto que o mesmo código não se repete no mesmo município.&lt;br /&gt;
* Localidades que carecem de endereço e CEP como sítios, assentamentos e moradias na zona rural, aglomerações subnormais, matas e sertões recebem um geocódigo que pode tanto localizar como identificar o objeto. Mesmo o local mais remoto e inacessível é geocodificável.&lt;br /&gt;
* O AFA Codes é desenvolvido pelo Instituto de Tecnologias Geo-Sociais AddressForAll como uma solução inovadora de tecnologia aberta. Não prende instituições e usuários à desenvolvedora da tecnologia.&lt;br /&gt;
&lt;br /&gt;
== Origem do nome ==&lt;br /&gt;
A sigla AFA vem das iniciais do nome do Instituto &#039;&#039;&#039;A&#039;&#039;&#039;ddress&#039;&#039;&#039;F&#039;&#039;&#039;or&#039;&#039;&#039;A&#039;&#039;&#039;ll, e adota-se um ponto entre esta sigla e a palavra &amp;quot;codes&amp;quot; por uma questão de estratégia de comunicação para tornar conhecido tanto o nome quanto o endereço do website.&lt;br /&gt;
&lt;br /&gt;
Substitui o nome antigo OSMcodes para evitar conflito com OpenStreetMap. A princípio, o nome anterior veio do fato de o projeto ter sido baseado no mapa [[OpenStreetMap]] e com intensão de divulgá-lo.&lt;br /&gt;
&lt;br /&gt;
==Ver também==&lt;br /&gt;
&lt;br /&gt;
*[[Geohash generalizado]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projetos|OSMcodes]]&lt;br /&gt;
[[Category:OSMcodes|*Documentação_OSMcodes]]&lt;br /&gt;
[[Category:Public]]&lt;br /&gt;
[[Category:Public01]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes&amp;diff=9</id>
		<title>Documentation AFA.codes</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=Documentation_AFA.codes&amp;diff=9"/>
		<updated>2025-09-14T17:43:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: Documentação AFA.codes).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
[[File:OSMcodes-logo-new.png|320px|thumb|Logo &#039;&#039;AFA.codes&#039;&#039; (formerly &#039;&#039;OSM.codes&#039;&#039;), a service implementing the DNGS standard.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AFA Codes&#039;&#039;&#039; (formerly OSMcodes) is a [[Projects|project]] by the [[Instituto AddressForAll]] aimed at implementing and enhancing the geocoding system of the [[Discrete National Grid Systems/pt|Discrete National Grid Systems - &#039;&#039;&#039;DNGS&#039;&#039;&#039;]] standard. AFA Codes strive for maximum quality: highly compact, user-friendly, multi-purpose, and computationally efficient.&lt;br /&gt;
&lt;br /&gt;
Main features:&lt;br /&gt;
* &#039;&#039;&#039;Homepage - locality selection&#039;&#039;&#039; at [http://afa.codes http://afa.codes]&lt;br /&gt;
* &#039;&#039;&#039;Interface&#039;&#039;&#039; (example in BR-SP-Campinas) at [http://afa.codes/BR-SP-Campinas http://afa.codes/BR-SP-Campinas]&lt;br /&gt;
* &#039;&#039;&#039;Repositories&#039;&#039;&#039; at https://git.afa.codes &amp;amp;nbsp; (see also [https://api.github.com/orgs/osm-codes/repos API list], [https://github.com/osm-codes/gridMap-draftPages/issues Issues] and [https://github.com/osm-codes/gridMap-draftPages/releases Version])&lt;br /&gt;
* &#039;&#039;&#039;Separation&#039;&#039;&#039; of topics: DNGS standard (public) &#039;&#039;vs&#039;&#039; AFA implementation of the standard (potentially private).&lt;br /&gt;
* &#039;&#039;&#039;Endpoints&#039;&#039;&#039; for Cameroon documented and with Swagger, http://dev.api.banoc.coeurduweb.com/docs/&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Sections==&lt;br /&gt;
&lt;br /&gt;
Main documentation sections in this wiki:&lt;br /&gt;
&lt;br /&gt;
*{{ns-xref|afac|Software structure and license}}: for contracts and description&lt;br /&gt;
*{{ns-xref|afac|API}}: Official AFA Codes API Guide.&lt;br /&gt;
*{{ns-xref|afac|Methodology}}: explains to laypeople what we do&lt;br /&gt;
*{{ns-xref|afac|About}}: describes the project, its products, and services.&lt;br /&gt;
*{{ns-xref|afac|Conventions}}: establishes conventions and methodologies of this project.&lt;br /&gt;
*{{ns-xref|afac|Use cases}}: describes and classifies the various applications and ways to use the solution.&lt;br /&gt;
*{{ns-xref|afac|FAQ}}: Frequently Asked Questions.&lt;br /&gt;
*{{ns-xref|afac|Gits}}: git repositories containing source codes.&lt;br /&gt;
*{{ns-xref|afac|Tests}}: testing script and execution for the &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; query pages.&lt;br /&gt;
*{{ns-xref|afac|Viz}}: data visualization module and command interface.&lt;br /&gt;
**[[afac:Viz/Navegação|afac:Viz/&#039;&#039;&#039;Navigation&#039;&#039;&#039;]]: reference manual on map and geocode navigation interface.&lt;br /&gt;
*{{ns-xref|afac|Guides}}: quick, usage, and installation guides.&lt;br /&gt;
*{{ns-xref|afac|Attributions}}: credits, licenses, and other attribution information.&lt;br /&gt;
*{{ns-xref|afac|Versions}}: versions of the software used in production.&lt;br /&gt;
*Countries with &amp;lt;code&amp;gt;AFA.codes&amp;lt;/code&amp;gt; implemented, regardless of the domain:&lt;br /&gt;
**{{ns-xref|afac|DE}} - Germany&lt;br /&gt;
**{{ns-xref|afac|BR}} - Brazil;&lt;br /&gt;
**{{ns-xref|afac|CO}} - Colombia.&lt;br /&gt;
**{{ns-xref|afac|CM}} - Cameroon.&lt;br /&gt;
**{{ns-xref|afac|SV}} - El Salvador.&lt;br /&gt;
**{{ns-xref|afac|EC}} - Ecuador.&lt;br /&gt;
**{{ns-xref|afac|IN}} - India.&lt;br /&gt;
**{{ns-xref|afac|UY}} - Uruguay.&lt;br /&gt;
** ... - Pending creation of automation for the methodology, https://gis.stackexchange.com/a/489059/7505&lt;br /&gt;
&lt;br /&gt;
*Other functions implemented in the domain:&lt;br /&gt;
**See [[afac:About#Other site functions]].&lt;br /&gt;
&lt;br /&gt;
== Key Points ==&lt;br /&gt;
&lt;br /&gt;
* AFA Codes is a geocoding system where each rectangle of the national territory, from 1 km² to 1 m², receives the shortest possible alphanumeric code, generated from geographic coordinates.&lt;br /&gt;
* It can geolocate by code any fixed element in the territory, such as cities, neighborhoods, villages, farms, plots, houses, vehicle spaces, trees, poles, urban furniture, etc.&lt;br /&gt;
* The system respects the sovereignty of each country. It is tailor-made, considering the territorial structure of states and municipalities.&lt;br /&gt;
* Once adopted in a country, 100% of its territory is covered with geocodes generated by the system.&lt;br /&gt;
* The system is reversible: the geographic coordinate is converted to a short code, and this code can also be reverted to the geographic coordinate that originated it.&lt;br /&gt;
* The code can be used as a registration number, as the same code does not repeat within the same municipality.&lt;br /&gt;
* Locations lacking addresses and postal codes, such as sites, settlements, and dwellings in rural areas, subnormal agglomerations, forests, and wilderness, receive a geocode that can both locate and identify the object. Even the most remote and inaccessible place is geocodable.&lt;br /&gt;
* AFA Codes is developed by the AddressForAll Geo-Social Technologies Institute as an innovative open technology solution. It does not bind institutions and users to the technology developer.&lt;br /&gt;
&lt;br /&gt;
== Origin of the Name ==&lt;br /&gt;
The acronym AFA comes from the initials of the name of the &#039;&#039;&#039;A&#039;&#039;&#039;ddress&#039;&#039;&#039;F&#039;&#039;&#039;or&#039;&#039;&#039;A&#039;&#039;&#039;ll Institute, and a dot is adopted between this acronym and the word &amp;quot;codes&amp;quot; as a communication strategy to make both the name and the website address known.&lt;br /&gt;
&lt;br /&gt;
It replaces the old name OSMcodes to avoid conflict with OpenStreetMap. Initially, the previous name came from the fact that the project was based on the [[OpenStreetMap]] map and intended to promote it.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
*[[Generalized Geohash]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Projects|OSMcodes]]&lt;br /&gt;
[[Category:OSMcodes|*Documentation_OSMcodes]]&lt;br /&gt;
[[Category:Public]]&lt;br /&gt;
[[Category:Public01]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:OSMcodes-logo-new.png&amp;diff=8</id>
		<title>File:OSMcodes-logo-new.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:OSMcodes-logo-new.png&amp;diff=8"/>
		<updated>2025-09-14T17:43:42Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/pt&amp;diff=7</id>
		<title>DGGS/Proj/DT/pt</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT/pt&amp;diff=7"/>
		<updated>2025-09-14T17:43:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: DGGS/Proj/DT).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
[[File:Disdyakis_30.png|thumb]]&lt;br /&gt;
Projeção sobre um poliedro de 120 lados, do inglês [[wikipedia:Disdyakis triacontahedron|&#039;&#039;&#039;D&#039;&#039;&#039;isdyakis &#039;&#039;&#039;T&#039;&#039;&#039;riacontahedron]] (is a Catalan solid with 120 identical triangular faces), proposta em 2020 por https://www.mdpi.com/2220-9964/9/5/315&lt;br /&gt;
&lt;br /&gt;
Abaixo o poliedro de 120 faces:&lt;br /&gt;
&lt;br /&gt;
[[file:Disdyakis_30_net.svg|center|580px]]&lt;br /&gt;
&lt;br /&gt;
Cada uma das 120 faces corresponde a um plano de projeção do tipo &amp;quot;Slice and Dice projection&amp;quot; (van Leeuwen and Strebe). &lt;br /&gt;
&lt;br /&gt;
== Slice and Dice projection ==&lt;br /&gt;
A projeção de van Leeuwen and Strebe, originalmente orientada a triângulos equiláteros, foi otimizada para &#039;&#039;&#039;menor distorção angular em triângulos isosceles&#039;&#039;&#039; no mesmo ano, https://www.arxiv.org/pdf/2008.13670v1 mas publicada só em 2021, https://doi.org/10.1145/3460521&lt;br /&gt;
&lt;br /&gt;
A projeção DT faz uso de triângulos isosceles, portanto está pendente analisar a otimização.&lt;br /&gt;
&lt;br /&gt;
Além do [https://doi.org/10.1559/152304006779500687 original fechado], e alguma descrição nos artigos citados, a projeção igual-área &amp;quot;Slice and Dice&amp;quot; (van Leeuwen and Strebe) é descrita em https://www.researchgate.net/publication/250016113_A_Slice-and-Dice_Approach_to_Area_Equivalence_in_Polyhedral_Map_Projections (onde podemos pedir pro autor).&lt;br /&gt;
&lt;br /&gt;
== Modelagem do triacontaedro rômbico ==&lt;br /&gt;
A reunião de 4 a 4 faces resulta em um [[wikipedia:Rhombic triacontahedron|Triacontaedro rômbico]] de 120/4=30 faces quadriláteras, usadas como L0 de um [[Generalized Geohash/pt|GGeohash]].&lt;br /&gt;
&lt;br /&gt;
[[File:RhombicTriacontahedron-30facesFrom120.png|340px]] [[File:Rhombictriacontahedron_net.svg|340px]]&lt;br /&gt;
&lt;br /&gt;
Nas faces do [[wikipedia:Rhombic triacontahedron]], o  ângulo menor do losango é de 63.43°, mais pŕoximo de 90° do que o losango da projeção [[DGGS/Proj/ISEA]], por isso superior (concapacidade) também no formato da célula.&lt;br /&gt;
&lt;br /&gt;
Trabalhos recentes de Liang et al. 2022 reequacionaram a [[DGGS/Proj/Planos concorrentes|construção]] dos quadriláteros da projeção, https://doi.org/10.1080/17538947.2022.2130459&lt;br /&gt;
[[File:Tjde a 2130459 f0007 ob.png|centro|thumb|680px|Mesmo &#039;&#039;Rhombic triacontahedron&#039;&#039; em construção alternativa. ]]&lt;br /&gt;
[[File:Fig3-dingEtAll2024.png|centro|semmoldura|680x680px]]&lt;br /&gt;
&lt;br /&gt;
== Ajuste local do país ==&lt;br /&gt;
[[File:ProjDT-BR-dobras1.png|thumb|380px|Exemplo de possível ajuste de altitudes sobre o Brasil. ]]&lt;br /&gt;
&lt;br /&gt;
Ainda em estudo se realmente viável... Estratégias complementares, usando [[DGGS/Proj/Planos_concorrentes#Proposta_da_re-proje%C3%A7%C3%A3o_linear_em_planos_concorrentes|Proposta da re-projeção linear (dobradiças)]], para ajuste ao relevo do país, ou pelo menos a sua altitude mediana. A estratégia pode fazer uso de:&lt;br /&gt;
&lt;br /&gt;
* Mudança de raio de elipsoide, para que o geoide tangencie melhor a altitude mediana. Não é bem vista por causar efeitos colaterais indesejados no posicionamento.&lt;br /&gt;
&lt;br /&gt;
* Mudança na escolha do &amp;quot;plano secante ao elipsoide&amp;quot;. Isso permite alguma compatibilidade entre os dois, DGGS e [[DNGS]], por estarem usando os mesmos polígonos na projeção (ângulos sólidos são preservados).&lt;br /&gt;
&lt;br /&gt;
No uso do DT para cada DNGS (cada país), a escolha dos quadriláteros deixa de ter maior compromisso com o &#039;&#039;rhombic triacontahedron&#039;&#039;, é livre. Volta a ser o compromisso com a m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; como referência.&lt;br /&gt;
A &amp;quot;compatibilidade&amp;quot; entre DNGS e DGGS (baseados em projeção DT) estaria apenas no uso da projeção de referência e simplicidade nos algoritmos de conversão entre grades. &lt;br /&gt;
 &lt;br /&gt;
== Conversão ISEA ==&lt;br /&gt;
H3 Uber e diversas outras implementações do padrão DGGS fizeram uso da projeção ISEA, que parecia a mais adequada até anos 2020. Segundo [https://doi.org/10.1080/17538947.2024.2324952 Huang et al. 2024], em &#039;&#039;&amp;quot;Bidirectional mapping between rhombic triacontahedron and icosahedral hexagonal discrete global grid systems&amp;quot;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
: The icosahedron is currently the mainstream polyedron in research and application of discrete global grid systems (DGGS). However, compared to the rhombic triacontahedron (RT), the icosahedron has disadvantages, such as lower sphere-fitting accuracy, greater projection distortion, and difficulty in incorporating the matrix structure for geospatial data storage. &lt;br /&gt;
&lt;br /&gt;
O artigo demonstra técnicas eficientes de conversão do &amp;quot;legado ISEA&amp;quot; na projeção DT.&lt;br /&gt;
&lt;br /&gt;
A ilustração abaixo mostra como o losango pode servir de referência para 3 tipos de ladrilhos:&lt;br /&gt;
[[File:Tjde a 2130459 f0004 oc.png|centro|thumb|620x620px]]&lt;br /&gt;
&lt;br /&gt;
PS:   ver também artigo  https://doi.org/10.3390/ijgi11120595&lt;br /&gt;
&lt;br /&gt;
== Ver também ==&lt;br /&gt;
&lt;br /&gt;
* [[DGGS/Proj/ISEA]]&lt;br /&gt;
* Uso em https://www.mdpi.com/2220-9964/11/6/322 para distance transform Canada&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT&amp;diff=6</id>
		<title>DGGS/Proj/DT</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=DGGS/Proj/DT&amp;diff=6"/>
		<updated>2025-09-14T17:43:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: Migração e tradução automática da Wikifull (Título original: DGGS/Proj/DT).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{idiomas}}&lt;br /&gt;
[[File:Disdyakis_30.png|thumb]]&lt;br /&gt;
Projection onto a 120-sided polyhedron, from the English [[wikipedia:Disdyakis triacontahedron|&#039;&#039;&#039;D&#039;&#039;&#039;isdyakis &#039;&#039;&#039;T&#039;&#039;&#039;riacontahedron]] (a Catalan solid with 120 identical triangular faces), proposed in 2020 by https://www.mdpi.com/2220-9964/9/5/315&lt;br /&gt;
&lt;br /&gt;
Below is the 120-faced polyhedron:&lt;br /&gt;
&lt;br /&gt;
[[file:Disdyakis_30_net.svg|center|580px]]&lt;br /&gt;
&lt;br /&gt;
Each of the 120 faces corresponds to a projection plane of the &amp;quot;Slice and Dice projection&amp;quot; type (van Leeuwen and Strebe).&lt;br /&gt;
&lt;br /&gt;
== Slice and Dice projection ==&lt;br /&gt;
The van Leeuwen and Strebe projection, originally oriented towards equilateral triangles, was optimized for &#039;&#039;&#039;less angular distortion in isosceles triangles&#039;&#039;&#039; in the same year, https://www.arxiv.org/pdf/2008.13670v1 but published only in 2021, https://doi.org/10.1145/3460521&lt;br /&gt;
&lt;br /&gt;
The DT projection uses isosceles triangles, so optimization is pending analysis.&lt;br /&gt;
&lt;br /&gt;
Besides the [https://doi.org/10.1559/152304006779500687 original closed], and some description in the cited articles, the equal-area &amp;quot;Slice and Dice&amp;quot; projection (van Leeuwen and Strebe) is described in https://www.researchgate.net/publication/250016113_A_Slice-and-Dice_Approach_to_Area_Equivalence_in_Polyhedral_Map_Projections (where we can request from the author).&lt;br /&gt;
&lt;br /&gt;
== Modeling the rhombic triacontahedron ==&lt;br /&gt;
The assembly of 4 by 4 faces results in a [[wikipedia:Rhombic triacontahedron|Rhombic Triacontahedron]] with 120/4=30 quadrilateral faces, used as L0 of a [[Generalized Geohash/pt|GGeohash]].&lt;br /&gt;
&lt;br /&gt;
[[File:RhombicTriacontahedron-30facesFrom120.png|340px]] [[File:Rhombictriacontahedron_net.svg|340px]]&lt;br /&gt;
&lt;br /&gt;
On the faces of the [[wikipedia:Rhombic triacontahedron]], the smaller angle of the rhombus is 63.43°, closer to 90° than the rhombus of the [[DGGS/Proj/ISEA]] projection, therefore superior (with capacity) also in the shape of the cell.&lt;br /&gt;
&lt;br /&gt;
Recent works by Liang et al. 2022 re-equated the [[DGGS/Proj/Planos concorrentes|construction]] of the quadrilaterals of the projection, https://doi.org/10.1080/17538947.2022.2130459&lt;br /&gt;
[[File:Tjde a 2130459 f0007 ob.png|center|thumb|680px|Same &#039;&#039;Rhombic triacontahedron&#039;&#039; in alternative construction. ]]&lt;br /&gt;
[[File:Fig3-dingEtAll2024.png|center|semmoldura|680x680px]]&lt;br /&gt;
&lt;br /&gt;
== Local country adjustment ==&lt;br /&gt;
[[File:ProjDT-BR-dobras1.png|thumb|380px|Example of possible altitude adjustment over Brazil. ]]&lt;br /&gt;
&lt;br /&gt;
Still under study if truly viable... Complementary strategies, using [[DGGS/Proj/Planos_concorrentes#Proposta_da_re-proje%C3%A7%C3%A3o_linear_em_planos_concorrentes|Proposal of linear re-projection (hinges)]], for adjustment to the country&#039;s relief, or at least its median altitude. The strategy may make use of:&lt;br /&gt;
&lt;br /&gt;
* Change of ellipsoid radius, so that the geoid better tangents the median altitude. Not well regarded as it causes undesirable side effects in positioning.&lt;br /&gt;
&lt;br /&gt;
* Change in the choice of the &amp;quot;secant plane to the ellipsoid&amp;quot;. This allows some compatibility between the two, DGGS and [[DNGS]], as they use the same polygons in the projection (solid angles are preserved).&lt;br /&gt;
&lt;br /&gt;
In the use of DT for each DNGS (each country), the choice of quadrilaterals ceases to have a greater commitment to the &#039;&#039;rhombic triacontahedron&#039;&#039;, it is free. It returns to being the commitment to m&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; as a reference.&lt;br /&gt;
The &amp;quot;compatibility&amp;quot; between DNGS and DGGS (based on DT projection) would be only in the use of the reference projection and simplicity in the conversion algorithms between grids.&lt;br /&gt;
&lt;br /&gt;
== ISEA Conversion ==&lt;br /&gt;
H3 Uber and several other implementations of the DGGS standard made use of the ISEA projection, which seemed the most suitable until the 2020s. According to [https://doi.org/10.1080/17538947.2024.2324952 Huang et al. 2024], in &#039;&#039;&amp;quot;Bidirectional mapping between rhombic triacontahedron and icosahedral hexagonal discrete global grid systems&amp;quot;&#039;&#039;,&lt;br /&gt;
&lt;br /&gt;
: The icosahedron is currently the mainstream polyhedron in research and application of discrete global grid systems (DGGS). However, compared to the rhombic triacontahedron (RT), the icosahedron has disadvantages, such as lower sphere-fitting accuracy, greater projection distortion, and difficulty in incorporating the matrix structure for geospatial data storage.&lt;br /&gt;
&lt;br /&gt;
The article demonstrates efficient techniques for converting the &amp;quot;legacy ISEA&amp;quot; in the DT projection.&lt;br /&gt;
&lt;br /&gt;
The illustration below shows how the rhombus can serve as a reference for 3 types of tiles:&lt;br /&gt;
[[File:Tjde a 2130459 f0004 oc.png|center|thumb|620x620px]]&lt;br /&gt;
&lt;br /&gt;
PS: see also article https://doi.org/10.3390/ijgi11120595&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[DGGS/Proj/ISEA]]&lt;br /&gt;
* Use in https://www.mdpi.com/2220-9964/11/6/322 for distance transform Canada&lt;br /&gt;
[[Category:Public]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:Tjde_a_2130459_f0004_oc.png&amp;diff=5</id>
		<title>File:Tjde a 2130459 f0004 oc.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:Tjde_a_2130459_f0004_oc.png&amp;diff=5"/>
		<updated>2025-09-14T17:43:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:ProjDT-BR-dobras1.png&amp;diff=4</id>
		<title>File:ProjDT-BR-dobras1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:ProjDT-BR-dobras1.png&amp;diff=4"/>
		<updated>2025-09-14T17:43:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:Fig3-dingEtAll2024.png&amp;diff=3</id>
		<title>File:Fig3-dingEtAll2024.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:Fig3-dingEtAll2024.png&amp;diff=3"/>
		<updated>2025-09-14T17:43:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:Tjde_a_2130459_f0007_ob.png&amp;diff=2</id>
		<title>File:Tjde a 2130459 f0007 ob.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:Tjde_a_2130459_f0007_ob.png&amp;diff=2"/>
		<updated>2025-09-14T17:43:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.addressforall.org/w/index.php?title=File:RhombicTriacontahedron-30facesFrom120.png&amp;diff=1</id>
		<title>File:RhombicTriacontahedron-30facesFrom120.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.addressforall.org/w/index.php?title=File:RhombicTriacontahedron-30facesFrom120.png&amp;diff=1"/>
		<updated>2025-09-14T17:43:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: Cópia da imagem da Wikifull.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cópia da imagem da Wikifull.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>