承接 informaticadoslago/censo-vias 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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

  1. Tipos de vía. Recorre el fichero VIAS recopilando 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 id y no lo toca (salvo --update-names);
    • si no existe, lo inserta usando la descripción de TiposVia.csv si se aporta (p.ej. KALE → KALEA), o el propio código en su defecto.
  2. 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 → UPDATE de esa fila (mismo id);
    • 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, codigo varchar(2) (= CPRO, p.ej. 01).
  • municipios: id, codigo varchar(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 VIAS se 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
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固