ES:Key:ref:ine
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 |
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 y Asturias, o las diputaciones/pedanías en Región de Murcia. 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;