Generación de Rutas con Datos Reales (estado_turismo)

Fecha: 2026-09-18
Fuente de datos: spab-retrieval/data/base/lugares.csv (558 lugares verificados)
Output: GeoJSON + API JS con coordenadas y metadata reales


Script de generación

Ubicación: spab-retrieval/scripts/generar-rutas.mjs

Input:

  • data/destinos.json → coordenadas y metadata de destinos
  • data/base/lugares.csv → 558 lugares con lat/lon, rating, reviews, giro

Output por ruta:

  • ruta-{nombre}/ruta-{nombre}.geojson → FeatureCollection con:
    • 1 LineString (corredor conectando destinos)
    • N Points (estaciones/destinos principales)
    • M Points (lugares individuales con metadata)
  • ruta-{nombre}/src/{nombre}-api.js → API compatible con place-store.js

Comando:

cd spab-retrieval
node scripts/generar-rutas.mjs

Datos generados (verificados)

🌊 Ruta Pacífico

Destinos: Puerto Vallarta → Acapulco → Puerto Escondido
Archivos:

  • ruta-pacifico/ruta-pacifico.geojson (73 KB)
  • ruta-pacifico/src/pacifico-api.js (14 KB)

Lugares:

  • Total en CSV: 154 lugares reales
  • Top 10 por destino: 30 lugares en API
  • Categorías: hoteles, restaurantes (mapped a estancia/comida)

Coordenadas del corredor:

[-105.2253, 20.6534]  → Puerto Vallarta
[-99.8237, 16.8531]   → Acapulco
[-97.0767, 15.8721]   → Puerto Escondido

Mapa centrado en: [-100, 18] zoom 5.5


🏛️ Ruta Colonial

Destinos: Ciudad de México → San Miguel de Allende → Oaxaca de Juárez
Archivos:

  • ruta-colonial/ruta-colonial.geojson (86 KB)
  • ruta-colonial/src/colonial-api.js (14 KB)

Lugares:

  • Total en CSV: 180 lugares reales
  • Top 10 por destino: 30 lugares en API
  • Categorías: hoteles, restaurantes, atracciones

Coordenadas del corredor:

[-99.1332, 19.4326]   → Ciudad de México
[-100.7436, 20.9144]  → San Miguel de Allende
[-96.7266, 17.0732]   → Oaxaca de Juárez

Mapa centrado en: [-99, 19.5] zoom 6


Estructura de datos

GeoJSON Feature por lugar

{
  "type": "Feature",
  "properties": {
    "tipo": "lugar",
    "nombre": "Restaurante Pez Gallo",
    "destino": "Puerto Escondido",
    "giro": "restaurantes",
    "categoria": "comida",
    "rating": 4.8,
    "n_resenas": 2694,
    "place_id": "ChIJc6pn0Pz3uIURqIQ1uqH0ot8"
  },
  "geometry": {
    "type": "Point",
    "coordinates": [-97.08965099999999, 15.8649411]
  }
}

API JS exportada

export const pacificoApi = {
  async loadRoute()    // → GeoJSON completo
  async loadIndex()    // → lista de lugares para panel
  async loadCards()    // → cards con rating/precio
  async getDetail(id)  // → detalle completo de lugar
}

Mapeo de categorías

De lugares.csv (giro) → Frontend (categoria):

{
  'hoteles': 'estancia',
  'restaurantes': 'comida',
  'atracciones': 'patrimonio',
  'tours': 'naturaleza'
}

Colores por categoría (definidos en CATEGORIES):

  • comida: #C23F38
  • estancia: #5C6B2B
  • patrimonio: #8A5A3B
  • naturaleza: #2D7F4F

Cambios en index.html

Ruta Pacífico:

// Antes
import { trenMayaApi, CATEGORIES } from './src/tren-maya-api.js';
 
// Después
import { pacificoApi, CATEGORIES } from './src/pacifico-api.js';
 
// Cambios adicionales
- Título: "Destinos Pacífico" (antes "Estaciones Tren Maya")
- Centro del mapa: [-100, 18] zoom 5.5
- Primer destino: automático (estaciones[0])

Ruta Colonial:

import { colonialApi, CATEGORIES } from './src/colonial-api.js';
 
// Cambios adicionales
- Título: "Ciudades Coloniales"
- Centro del mapa: [-99, 19.5] zoom 6
- Primer destino: automático

Verificación de datos reales

Ejemplo Puerto Escondido (línea 1 de CSV):

puerto-escondido,Nílu Puerto Escondido by Selina,hoteles,ChIJS6jOoIf3uIURPByms6OmPKA,15.8569085,-97.0580244,4.2,1867,2026-09-18T16:23:30.546Z

Transformado a:

{
  id: 'puerto-escondido-0',
  name: 'Nílu Puerto Escondido by Selina',
  cat: 'estancia',
  lat: 15.8569085,
  lng: -97.0580244,
  rating: 4.2,
  reviewCount: 1867,
  price: 3,
  vol: 0.19  // normalized by reviews/10000
}

Próximos pasos

Regenerar rutas cuando se actualicen datos

cd spab-retrieval
node scripts/generar-rutas.mjs

Añadir más destinos a una ruta existente

  1. Actualizar RUTAS en generar-rutas.mjs:
    pacifico: {
      destinos: ['puerto-vallarta', 'mazatlan', 'acapulco', 'huatulco'],
      // ...
    }
  2. Asegurar que los destinos existan en data/destinos.json
  3. Recolectar lugares con Google Places API si faltan
  4. Ejecutar node scripts/generar-rutas.mjs

Añadir nueva ruta

  1. Crear entrada en RUTAS:
    bajio: {
      destinos: ['guanajuato', 'queretaro', 'san-miguel-de-allende'],
      nombre: 'Ruta del Bajío',
      descripcion: 'Ciudades del Bajío mexicano',
      color: '#F59E0B'
    }
  2. Duplicar carpeta: cp -R ruta-maya ruta-bajio
  3. Ejecutar generador: node scripts/generar-rutas.mjs
  4. Actualizar ruta-bajio/index.html imports y metadata

Commit de esta sesión

git add decisions/ ruta-colonial/ ruta-pacifico/ spab-retrieval/scripts/generar-rutas.mjs
git commit -m "feat: generar rutas Pacífico y Colonial con datos reales
 
- Script generar-rutas.mjs: transforma lugares.csv a GeoJSON + API JS
- Ruta Pacífico: Puerto Vallarta, Acapulco, Puerto Escondido (154 lugares)
- Ruta Colonial: CDMX, San Miguel, Oaxaca (180 lugares)
- Todas las coordenadas/ratings son datos verificados de Google Places
- Documentación completa en decisions/"

Regla de oro

No inventar datos. Siempre retrieval + match.

  • Todos los lugares vienen de lugares.csv (Google Places API)
  • Todas las coordenadas son reales
  • Todos los ratings/reviews son verificados
  • El script solo transforma, nunca genera datos ficticios