ES:Key:ref:ine
| Descripción |
|---|
| Código asignado a las entidades de población por el Instituto Nacional de Estadística de España. |
| Grupo: referencias |
| Usado en estos elementos |
| Combinaciones útiles |
|
| Estado: de facto |
| Herramientas para esta etiqueta |
Es una subclave de ref=* y sus valores son números utilizados como identificadores de las unidades de población españolas por el Instituto Nacional de Estadística (
INE),
P772.
| Subdivisión | Cifras | Formación de la referencia | Notas |
|---|---|---|---|
| Provincia | PP | -- | No existe clave ref:ine=* para provincias admin_level=6
|
| Municipio | MMM | ine:municipio=* (PP + MMM) + "000000"
|
Sólo para relaciones boundary=administrative y admin_level=8
|
| Entidad colectiva | CC | ine:municipio=* (PP + MMM) + CC + "0000"
|
Sólo para relaciones boundary=administrative y admin_level=9
|
| Entidad singular | SS | ine:municipio=* (PP + MMM) + CC + SS + "00"
|
Si la entidad es un nodo, no usar este código, es preferible el código del núcleo |
| Núcleo/diseminado | NN | ine:municipio=* (PP + MMM) + CC + SS + NN
|
Sólo para nodos: en núcleos NN es 01, 02, 03, 04, etc... y en diseminados NN es igual a 99 |
Mapa interactivo
Puede consultar el estado actual de las referencias faltantes y sobrantes a través de la siguiente visualización: https://osm-es.github.io/validador-ine/
Consultas de validación
Nodos
El código de las localidades españolas (es decir, place=*) ref:ine=* reside en el valor de ine:municipio=* más 6 dígitos, por lo que podemos comprobarlo usando matemáticas.
La siguiente consulta de overpass verifica si los nodos contienen el valor adecuado, es decir ine:municipio * 1e6 < ref:ine < ine:municipio * 1e6 + 1e6. Si la siguiente consulta no devuelve nada, significa que todo está bien.
Aviso: la siguiente consulta tarda varios minutos en ejecutarse.

[out:xml][timeout:900];
area["ISO3166-1"="ES"]->.searchArea;
relation["admin_level"="8"]["ine:municipio"]["boundary"="administrative"](area.searchArea);
map_to_area;
foreach->.mun(
(
// como no existe un operador de substring, convertimos ambas etiquetas a números
// (debido a un error de parseo de variables que empiezan en cero, se añade y luego se resta, un número superior a los códigos)
// como el ref:ine tiene 6 cifras añadidas a su ine:municipio, multiplicamos por 1 millón
// de tal modo que los ref:ine deberá pertenecer al rango:
// ine:municipio * 1e6 < ref:ine < ine:municipio * 1e6 + 1e6
//
// ejemplo:
// ine:municipio=47140
// ref:ine=47140000100
//
// 47140 * 1e6 < 47140000100 < 47140 * 1e6 + 1e6
node(area.mun)["ref:ine"](if: (number(1e12 + t["ref:ine"]) - 1e12) < ((number(1e12 + mun.u(t["ine:municipio"])) - 1e12) * 1e6));
node(area.mun)["ref:ine"](if: (number(1e12 + t["ref:ine"]) - 1e12) > ((number(1e12 + mun.u(t["ine:municipio"])) - 1e12) * 1e6 + 1e6));
);
out;
);
De igual manera, podemos afinar todavía más la validación de entidades, si en vez de consultar por municipio lo hacemos por una unidad inferior, como por ejemplo, las parroquias para Galicia (ES-GA) y Asturias (ES-AS), o las diputaciones/pedanías en Región de Murcia (ES-MU). Una referencia será correcta siempre que: ref:ine parroquia < ref:ine localidad < ref:ine parroquia + 1e4. Si la siguiente consulta no devuelve nada, significa que todo está bien.
Aviso: para que esta consulta tenga sentido, los municipios deben contener relaciones boundary=administrative y admin_level=9.

[out:xml][timeout:900];
area["ISO3166-2"="ES-GA"]->.searchArea;
relation["admin_level"="9"]["boundary"="administrative"](area.searchArea);
map_to_area;
foreach->.mun(
(
node(area.mun)["ref:ine"](if: (number(1e12 + t["ref:ine"]) - 1e12) < (number(1e12 + mun.u(t["ref:ine"])) - 1e12));
node(area.mun)["ref:ine"](if: (number(1e12 + t["ref:ine"]) - 1e12) > (number(1e12 + mun.u(t["ref:ine"])) - 1e12 + 1e4));
);
out;
);
Relaciones
El código de los municipios españoles (es decir, admin_level=8) ref:ine=* está en el valor de ine:municipio=* más 6 ceros, por lo que podemos comprobarlo usando matemáticas.
La siguiente consulta overpass comprueba si las relaciones contienen el valor adecuado, es decir ine:municipio * 1e6 = ref:ine. Si la siguiente consulta no devuelve nada, significa que todo está bien.

[out:xml][timeout:900];
area["ISO3166-1"="ES"]->.searchArea;
relation["admin_level"="8"]["ine:municipio"]["boundary"="administrative"](area.searchArea)->.all;
relation.all["ref:ine"]->.ok;
// relaciones cuyo código ref:ine difiere del ine:municipio
// (debido a un error de parseo de variables que empiezan en cero, se añade y luego se resta, un número superior a los códigos)
//
// ejemplo:
// ine:municipio=47140
// ref:ine=47140000000
//
// 47140 * 1e6 = 47140000000
relation.ok(if: ((number(1e12 + _.set(t["ine:municipio"])) - 1e12) * 1e6) != (number(1e12 + _.set(t["ref:ine"])) - 1e12))->.wrong;
// relaciones sin código ref:ine
(.all; - .ok;)->.missing;
(.missing;.wrong;);
out geom;
