예제 #1
0
    def handle(self, *args, **options):
        obj = json.loads(open('mendoza-all.json').read())

        lineas = list(set([o['grupo'] for o in obj]))
        print(lineas)
        ci = Ciudad.objects.get(slug='mendoza')

        ls = []
        for l in lineas:
            li = Linea(nombre=l)
            li.save()
            ls.append(li)

        for o in obj:
            for l in ls:
                if o['grupo'].startswith(l.nombre):
                    print("Agregando recorrido " + o['grupo'] + " - " + o['recorrido'])
                    sys.stdout.flush()

                    poly = []
                    for p in o['route']:
                        poly.append((float(p.split(",")[1]), float(p.split(",")[0])))
                    poly = LineString(poly)

                    # IDA
                    recorrido = Recorrido(
                        nombre=o['recorrido'] + " - " + o['nombre'],
                        # DatabaseError: value too long for type character varying(100)
                        sentido='IDA-VUELTA',
                        linea=l,
                        inicio=o['desde'],
                        fin=o['hasta'],
                        ruta=poly,
                        descripcion=o['nombre'],
                        paradas_completas=False
                    )
                    recorrido.save()
                    for p in o['stops']:
                        sys.stdout.flush()
                        p = Point((float(p["lng"]), float(p["lat"])))
                        try:
                            parada = Parada.objects.get(latlng=p)
                            print("-")
                        except ObjectDoesNotExist:
                            print('+')
                            parada = Parada(latlng=p)
                            parada.save()
                        horario = Horario(recorrido=recorrido, parada=parada)
                        horario.save()

                    print("")
                    sys.stdout.flush()
예제 #2
0
    def handle(self, *args, **options):
        stats = {"lineas": 0, "recorridos": 0}
        tucuman = Ciudad.objects.get(slug="san-miguel-de-tucuman")

        with open("/path/to/json/file.json") as fixture:
            recorridos = json.loads(fixture.read())

        for recorrido in recorridos:
            try:
                linea = Linea.objects.get(
                    nombre=recorrido["linea"], ciudad=tucuman)
            except Linea.DoesNotExist:
                print("Creando linea '{0}'...".format(recorrido["linea"]))
                linea = Linea(nombre=recorrido["linea"])
                linea.save()
                tucuman.lineas.add(linea)
                stats["lineas"] += 1

            print("Creando recorrido '{0}' de linea '{1}'...".format(
                recorrido["nombre"], recorrido["linea"]))
            try:
                Recorrido.objects.get(
                    nombre=recorrido["nombre"],
                    linea=linea,
                    ciudad=tucuman
                )
                continue
            except Recorrido.DoesNotExist:
                recorrido = Recorrido(
                    nombre=recorrido["nombre"],
                    linea=linea,
                    ruta=recorrido["wkt"],
                    inicio=recorrido["inicio"],
                    fin=recorrido["fin"],
                    color_polilinea=recorrido["color"]
                )
                recorrido.save()
                tucuman.recorridos.add(recorrido)
                stats["recorridos"] += 1

        print(stats)
예제 #3
0
    def handle(self, *args, **options):
        obj = json.loads(open('rosario-all.json').read())

        lineas = ['101', '102', '103', '106', '107', '110', '112', '113', '115', '116', '120', '121', '122', '123',
                  '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138',
                  '139', '140', '141', '142', '143', '144', '145', '146', '153', '35/9', 'Enlace', 'K',
                  'Linea de la Costa', 'Ronda del Centro', 'Expreso', 'Las Rosas', 'M', 'Metropolitana', 'Monticas',
                  'Serodino', 'TIRSA']

        ci = Ciudad.objects.get(slug='rosario')

        ls = []
        for l in lineas:
            li = Linea(nombre=l)
            li.save()
            ls.append(li)

        for o in obj:
            for l in ls:
                if o['linea'].startswith(l.nombre):
                    print("Agregando recorrido " + o['linea'])
                    print("IDA: ")
                    sys.stdout.flush()

                    # IDA
                    recorrido = Recorrido(
                        nombre=o['linea'].replace(l.nombre, ''),
                        sentido='IDA',
                        linea=l,
                        inicio=o['descripcionIDA'].split(',')[0].replace('Desde', '').strip().capitalize(),
                        fin=o['descripcionIDA'].split(',')[-1].replace('Hasta', '').strip().capitalize(),
                        ruta=WKTReader().read(o['ida']),
                        descripcion=o['descripcionIDA'],
                        paradas_completas=True
                    )
                    recorrido.save()
                    for p in o['paradas']:
                        if WKTReader().read(p['point']).distance(recorrido.ruta) < 0.0005555:  # ~50 metros
                            print(p['codigo'])
                            sys.stdout.flush()
                            try:
                                parada = Parada.objects.get(codigo=p['codigo'])
                            except ObjectDoesNotExist:
                                parada = Parada(codigo=p['codigo'], latlng=WKTReader().read(p['point']))
                                parada.save()
                            horario = Horario(recorrido=recorrido, parada=parada)
                            horario.save()

                    print("")
                    print("VUELTA: ")
                    sys.stdout.flush()
                    # VUELTA
                    recorrido = Recorrido(
                        nombre=o['linea'].replace(l.nombre, ''),
                        sentido='VUELTA',
                        linea=l,
                        inicio=o['descripcionVUELTA'].split(',')[-1].replace('Hasta', '').strip().capitalize(),
                        fin=o['descripcionVUELTA'].split(',')[0].replace('Desde', '').strip().capitalize(),
                        ruta=WKTReader().read(o['vuelta']),
                        descripcion=o['descripcionVUELTA'],
                        paradas_completas=True
                    )
                    recorrido.save()
                    for p in o['paradas']:
                        print(p['codigo'])
                        sys.stdout.flush()
                        if WKTReader().read(p['point']).distance(recorrido.ruta) < 0.0005555:  # ~50 metros
                            try:
                                parada = Parada.objects.get(codigo=p['codigo'])
                            except ObjectDoesNotExist:
                                parada = Parada(codigo=p['codigo'], latlng=WKTReader().read(p['point']))
                                parada.save()
                            horario = Horario(recorrido=recorrido, parada=parada)
                            horario.save()
                    print("")
                    print("--------------------------------")
예제 #4
0
    def handle(self, *args, **options):
        cursor = connection.cursor()
        db = psycopg2.connect(host='127.0.0.1',
                              database='colectivos',
                              user='******',
                              password='******')
        cursor = db.cursor(cursor_factory=RealDictCursor)
        stats = {'ciudades': 0, 'lineas': 0, 'recorridos': 0}

        # agrego una provincia falsa para referenciar las ciudades
        provincia = Provincia(nombre="fake")
        provincia.save()

        cursor.execute("""
            SELECT id
            FROM ciudad;
        """)

        for row in cursor.fetchall():
            try:
                Ciudad.objects.get(slug=row['id'])
            except ObjectDoesNotExist:
                nombre = row['id'].replace("-", " ").title()
                ciudad = Ciudad(nombre=nombre, provincia=provincia)
                ciudad.save()
                stats['ciudades'] += 1

        cursor.execute("""
            SELECT nombre, descripcion, foto, info_empresa, info_terminal,
                   id, semirrapido, localidad, cp, telefono
            FROM linea;
        """)

        for row in cursor.fetchall():
            try:
                Linea.objects.get(id=row['id'])
            except ObjectDoesNotExist:
                linea = Linea(id=row['id'],
                              nombre=row['nombre'],
                              descripcion=row['descripcion'],
                              foto=row['foto'],
                              info_empresa=row['info_empresa'],
                              info_terminal=row['info_terminal'],
                              localidad=row['localidad'],
                              cp=row['cp'],
                              telefono=row['telefono'])
                linea.save()
                stats['lineas'] += 1

        cursor.execute("""
            SELECT
                ra.nombre as ra_nombre,
                ra.descripcion as ra_descripcion,
                ra.id_linea as ra_id_linea,
                ra.id as ra_id,
                re.nombre as re_nombre,
                re.zona_inicio as re_zona_inicio,
                re.zona_fin as re_zona_fin,
                re.descripcion as re_descripcion,
                re.id_ramal as re_id_ramal,
                re.color_polilinea as re_color_polilinea,
                re.horarios as re_horarios,
                re.id as re_id,
                ST_Affine(re.camino,
                    cos(pi()/2), sin(pi()/2),
                    sin(pi()/2), cos(pi()/2),
                    0,          0
                ) as re_camino,
                re.edicion_fuente_nombre as re_edicion_fuente_nombre,
                re.edicion_fuente_contacto as re_edicion_fuente_contacto,
                re.edicion_id_usuario as re_edicion_id_usuario,
                re.save_timestamp as re_save_timestamp,
                re.edicion_datatimestamp as re_edicion_datatimestamp
            FROM recorrido re
            JOIN ramal ra on (ra.id = re.id_ramal);
        """)

        for row in cursor.fetchall():
            try:
                Recorrido.objects.get(id=row['re_id'])
            except ObjectDoesNotExist:
                recorrido = Recorrido(
                    id=row['re_id'],
                    nombre=row['ra_nombre'],
                    sentido=row['re_nombre'],
                    linea=Linea.objects.get(id=row['ra_id_linea']),
                    inicio=row['re_zona_inicio'],
                    fin=row['re_zona_fin'],
                    ruta=row['re_camino'],
                    color_polilinea=row['re_color_polilinea'],
                    horarios=row['re_horarios'],
                    pois=row['ra_descripcion'],
                    descripcion=row['re_descripcion'])
                recorrido.save()
                stats['recorridos'] += 1

        print("Se han agregado:", stats)