informaticadoslago/censo-vias
Composer 安装命令:
composer require informaticadoslago/censo-vias
包简介
Importa el callejero del Censo Electoral del INE (fichero VIAS de ancho fijo + TiposVia.csv) a las tablas de vías y tipos de vía de una aplicación Laravel, mediante upsert por clave natural (no duplica ni cambia ids existentes).
README 文档
README
Importa el callejero del Censo Electoral del INE a las tablas de vías y tipos de vía de una aplicación Laravel ya existente.
Lee el fichero VIAS (ancho fijo, ISO-8859-1) y, opcionalmente, el
TiposVia.csv, y vuelca su contenido mediante upsert por clave natural:
las filas que ya existen se localizan por su clave (no por id), se actualizan
en su misma fila si algo cambió y conservan su id; las nuevas se
insertan. Nunca duplica, nunca vacía y nunca borra, de modo que las relaciones
que tu aplicación ya tenga contra esas tablas no se rompen.
Compatible con Laravel 10, 11, 12 y 13 y PHP 8.3+.
Qué hace, en detalle
-
Tipos de vía. Recorre el fichero
VIASrecopilando los códigos de tipo (TVIA) presentes. Por cada uno:- si ya existe en tu tabla de tipos (comparando el código sin espacios),
reutiliza su
idy no lo toca (salvo--update-names); - si no existe, lo inserta usando la descripción de
TiposVia.csvsi se aporta (p.ej.KALE → KALEA), o el propio código en su defecto.
- si ya existe en tu tabla de tipos (comparando el código sin espacios),
reutiliza su
-
Vías. Cachea en memoria los municipios (
CPRO|CMUN → id) y las vías existentes por su clave natural (municipio_id|codigo) con una firma de sus campos. Después recorre el fichero:- vía existente y sin cambios → no hace nada;
- vía existente con cambios →
UPDATEde esa fila (mismoid); - vía nueva →
INSERT(por lotes).
Las vías que están en tu base de datos pero ya no aparecen en el censo se dejan intactas (no se borran).
⚠️ Requisitos: tablas que tu aplicación debe tener
Este paquete NO crea ni migra ninguna tabla. Se limita a rellenar tablas que ya deben existir en tu aplicación. Necesita cuatro:
| Tabla | Uso del paquete | Para qué |
|---|---|---|
tiposdevias |
lectura + escritura | Tipos de vía (destino). |
vias |
lectura + escritura | Vías (destino). |
municipios |
solo lectura | Resolver municipio_id a partir de CPRO+CMUN. |
provincias |
solo lectura | Enlazar el CPRO del fichero con el municipio. |
Todos los nombres de tabla y de columna son configurables en
config/censo-vias.php; abajo se documenta el esquema por defecto.
tiposdevias (destino)
Clave natural: la columna codigo1.
| Columna | Tipo | Notas |
|---|---|---|
id |
bigint unsigned PK | Autoincremental. Se conserva en filas existentes. |
codigo1 |
varchar(5) | Código del tipo de vía (TVIA), p.ej. CALLE, KALE. |
codigo2 |
varchar(2) | Código legado de 2 letras. En altas se rellena con el valor extra_defaults (XX por defecto). |
nombre |
varchar(50) | Descripción del tipo (de TiposVia.csv). |
created_at |
timestamp nullable | Solo si tipos.timestamps = true. |
updated_at |
timestamp nullable | " |
vias (destino)
Clave natural: municipio_id + codigo.
| Columna | Tipo | Notas |
|---|---|---|
id |
bigint unsigned PK | Autoincremental. Se conserva en filas existentes. |
municipio_id |
bigint unsigned | FK → municipios.id. Resuelto de CPRO+CMUN. |
codigo |
varchar(5) | Código de vía (CVIA), p.ej. 01001. |
tipodevia_id |
bigint unsigned | FK → tiposdevias.id. |
posiciontvia |
tinyint | En altas se rellena con extra_defaults (0). |
nombre |
varchar(50) | Nombre de la vía (NVIA). |
nombrecorto |
varchar(25) | Nombre corto (NVIAC). |
created_at |
timestamp nullable | Solo si vias.timestamps = true. |
updated_at |
timestamp nullable | " |
municipios y provincias (solo lectura)
El paquete solo lee las columnas necesarias para resolver el municipio:
provincias:id,codigovarchar(2) (=CPRO, p.ej.01).municipios:id,codigovarchar(3) (=CMUN, p.ej.001) y la FK a la provincia (provincia_id).
El callejero del censo no incluye el nombre del municipio ni de la provincia, así que esas tablas debes poblarlas por otra vía (la lista oficial de municipios del INE). Este paquete no las modifica.
Migraciones de ejemplo
Si partes de una aplicación sin estas tablas, estas migraciones crean el esquema por defecto:
Schema::create('provincias', function (Blueprint $t) { $t->id(); $t->string('codigo', 2); $t->string('nombre', 50); $t->timestamps(); }); Schema::create('municipios', function (Blueprint $t) { $t->id(); $t->foreignId('provincia_id')->nullable()->constrained('provincias'); $t->string('codigo', 3); $t->string('nombre', 50); $t->timestamps(); }); Schema::create('tiposdevias', function (Blueprint $t) { $t->id(); $t->string('codigo1', 5); $t->string('codigo2', 2); $t->string('nombre', 50); $t->timestamps(); }); Schema::create('vias', function (Blueprint $t) { $t->id(); $t->foreignId('municipio_id')->nullable()->constrained('municipios'); $t->string('codigo', 5); $t->foreignId('tipodevia_id')->nullable()->constrained('tiposdevias'); $t->tinyInteger('posiciontvia')->default(0); $t->string('nombre', 50); $t->string('nombrecorto', 25); $t->timestamps(); });
Instalación
composer require informaticadoslago/censo-vias
El service provider se registra solo (package discovery); no hay que añadir
nada más al composer.json.
Si el paquete aún no está en Packagist y lo instalas directamente desde su repositorio git, añade antes el repositorio a tu
composer.json:"repositories": [ { "type": "vcs", "url": "https://github.com/informaticadoslago/censo-vias.git" } ]
Configuración
La config se fusiona automáticamente (config('censo-vias.*') funciona sin
publicar nada). Publícala solo si necesitas adaptar nombres de tabla/columna:
php artisan vendor:publish --tag=censo-vias-config
En config/censo-vias.php defines: codificación, posiciones de los campos del
fichero VIAS, mapeo de columnas de tiposdevias y vias, y cómo resolver el
municipio a partir de provincias + municipios.
Uso
php artisan informaticadoslago:censo-vias {ruta-al-fichero-VIAS} [opciones]
| Opción | Descripción |
|---|---|
--tipos= |
Ruta a TiposVia.csv (descripciones de los tipos). |
--chunk=2000 |
Nº de vías por lote de inserción. |
--update-names |
Actualiza también el nombre de los tipos ya existentes. |
--dry |
No escribe nada; solo informa de lo que haría. |
Ejemplo
php artisan informaticadoslago:censo-vias \
storage/app/censo/VIAS.D251231.G260303 \
--tipos=storage/app/censo/TiposVia.csv \
--dry
Salida:
Tipos de vía → nuevos: 21, nombres actualizados: 0, existentes reutilizados: 251.
Municipios cargados: 8135
Vías existentes en BD: 886314
== Resumen de vías ==
+------------+--------------+-------------+---------------+
| Insertadas | Actualizadas | Sin cambios | Sin municipio |
+------------+--------------+-------------+---------------+
| 29602 | 113574 | 762992 | 26 |
+------------+--------------+-------------+---------------+
Sin municipio cuenta las vías cuyo CPRO|CMUN no existe en tu tabla
municipios (códigos especiales del INE); se informan y se omiten.
Notas sobre el formato del INE
- Los ficheros vienen en ISO-8859-1; cada campo se convierte a UTF-8.
- Del fichero
VIASse leen los campos del bloque de situación actual (posiciones 48–132):CVIA,TVIA,NVIA,NVIAC. - La ruta del fichero es un argumento: puede ser absoluta o relativa a la
raíz de la aplicación (donde ejecutas
php artisan).
Licencia
MIT © Alberto Lago Rodríguez (Informática dos Lago).
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-07-09