Ejemplo n.º 1
0
    def transformMun(self, feature):
        try:
            if feature.get("COD_MUNICIPIO") == None:
                return

            mun = feature.get("COD_MUNICIPIO")

            storeM = self.repo.getStore("ARENA2_TR_INE_MUNICIPIO")

            #munOptions=mun.split("/")
            #munOptions.append(mun)
            #for j in munOptions:
            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(
                builder.lower(builder.variable("MUNICIPIO")),
                builder.lower(builder.constant(mun))).toString()
            munData = storeM.findFirst(expression)
            if munData == None:
                logger(
                    "El municipio " + mun +
                    " no se encuentra en la tabla ARENA2_TR_INE_MUNICIPIO",
                    LOGGER_INFO)
            else:
                feature.set("INE_MUNICIPIO", munData.get("MUN_INE"))
                logger(
                    "El municipio " + mun + " actualizado con: " +
                    str(munData.get("MUN_INE")), LOGGER_INFO)

            storeM.dispose()
        except:
            ex = sys.exc_info()[1]
            logger("Error importando archivos." + str(ex), gvsig.LOGGER_WARN,
                   ex)
            return
def geocodificar(fecha, carretera, pk):
  if fecha == None or carretera == None or pk == None:
    return (None, None, "Fecha%s, carretera%s o pk%s nulo" % (
        iif(fecha==None, "*",""),
        iif(carretera==None, "*",""),
        iif(pk==None, "*","")
      )
    )
  strechesStore = getStretchFeatureStore()
  query = getVigentStretchesQuery(strechesStore, fecha) 

  builder = ExpressionUtils.createExpressionBuilder()
  expression = builder.eq(builder.variable("matricula"), builder.constant(carretera)).toString()
  #expression = "matricula = '%s'" % carretera
  try:
    query.addFilter(expression)
    query.retrievesAllAttributes()
    streches = strechesStore.getFeatureSet(query).iterable()
    if streches.isEmpty():
      return (None, None, "Carretera '%s' no encontrada" % carretera)
    pk = pk * 1000 
    for strech in streches:
      location = getLRSManager().getMPointFromGeometry(strech.getDefaultGeometry(), pk)
      if location != None:
        # LRS devuelve un Point2DM y falla al guardarse en la BBDD (H2 por lo menos)
        location = GeometryUtils.createPoint(location.getX(), location.getY())
        return (location, strech, None)
    return (None, None, "kilometro %s no encontrado en '%s'." % (pk,carretera))
  finally:
    DisposeUtils.disposeQuietly(streches)
Ejemplo n.º 3
0
    def transformProv(self, feature):
        try:
            if feature.get("COD_PROVINCIA") == None:
                return

            prov = feature.get("COD_PROVINCIA")

            storeP = self.repo.getStore("ARENA2_TR_INE_PROVINCIA")

            provOptions = prov.split("/")
            provOptions.append(prov)
            for i in provOptions:
                builder = ExpressionUtils.createExpressionBuilder()
                expression = builder.eq(
                    builder.lower(builder.variable("PROVINCIA")),
                    builder.lower(builder.constant(i))).toString()
                provData = storeP.findFirst(expression)
                if provData == None:
                    logger(
                        "La provincia " + i +
                        " no se encuentra en la tabla ARENA2_TR_INE_PROVINCIA",
                        LOGGER_INFO)
                    continue
                feature.set("INE_PROVINCIA", provData.get("PROV_INE"))
                break
            storeP.dispose()
        except:
            ex = sys.exc_info()[1]
            logger("Error importando archivos." + str(ex), gvsig.LOGGER_WARN,
                   ex)
            return
    def execute(self, report, feature):
        if feature.getType().get("LID_ACCIDENTE") == None:
            # Si no es la tabla de accidentes no hacenos nada
            return
        titularidad_accidente = feature.get("TITULARIDAD_VIA")
        storePeatones = feature.getStore().getStoresRepository().getStore(
            "ARENA2_PEATONES")
        accidente = feature.get("ID_ACCIDENTE")

        if accidente != None:
            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(builder.variable("ID_ACCIDENTE"),
                                    builder.constant(accidente)).toString()
            fset = storePeatones.getFeatureSet(expression)
            totalPeatones = fset.size()
            DisposeUtils.dispose(fset)
            peatonesFromFeature = feature.get("TOTAL_PEATONES")
            if totalPeatones != peatonesFromFeature:
                report.add(
                    feature.get("ID_ACCIDENTE"),
                    CODERR_PEATONES_NO_COINCIDEN,
                    "Peatones no coinciden, entidad: %s , tablas peatones: %s'."
                    % (str(peatonesFromFeature), str(totalPeatones)),
                    fixerId="AssignPeatonesFromTableFixer",
                    selected=True,
                    TOTAL_PEATONES=totalPeatones)
        DisposeUtils.dispose(storePeatones)
def findOwnership(fecha, carretera, pk):
  if fecha == None or carretera == None or pk == None:
    return None
  strechesStore = getStretchFeatureStore()
  query = getVigentStretchesQuery(strechesStore, fecha) 
  pk = pk * 1000 
  builder = ExpressionUtils.createExpressionBuilder()
  builder.and( builder.eq(builder.variable("matricula"), builder.constant(carretera)))
  builder.and( builder.le(builder.variable("pk_i"), builder.constant(pk)))
  builder.and( builder.ge(builder.variable("pk_f"), builder.constant(pk)))
  expression = builder.toString()
  #expression = "matricula = '%s' and pk_i >= %s and pk_f <= %s" % (carretera, pk, pk)
  query.addFilter(expression)
  query.retrievesAllAttributes()
  feature = strechesStore.findFirst(query)
  #DisposeUtils.disposeQuietly(strechesStore)
  if feature == None:
    return None
  return feature.get("titularidad")
def main(*args):
    from java.util import Date
    fecha = Date()
    builder = ExpressionUtils.createExpressionBuilder()
    print builder.and( 
      builder.group( builder.or( 
          builder.le(builder.variable("fecha_entrada"), builder.date(fecha)),
          builder.is_null(builder.variable("fecha_entrada"))
      )),
      builder.group( builder.or( 
          builder.le(builder.variable("fecha_salida"), builder.date(fecha)),
          builder.is_null(builder.variable("fecha_salida"))
      ))
    ).toString()      
    print builder.toString()
    print getStretchFeatureStore()
    
    print "f",findOwnership(fecha, 'CV301', 10)
    
    print "f",findOwnership(fecha, 'CV-70', 49.7)
def getVigentStretchesQuery(store, fecha):
  builder = ExpressionUtils.createExpressionBuilder()
  filtro = builder.and( 
    builder.group( builder.or( 
        builder.le(builder.variable("fecha_entrada"), builder.date(fecha)),
        builder.is_null(builder.variable("fecha_entrada"))
    )),
    builder.group( builder.or( 
        builder.le(builder.variable("fecha_salida"), builder.date(fecha)),
        builder.is_null(builder.variable("fecha_salida"))
    ))
  ).toString()
  
  #dateFormatter = SimpleDateFormat("dd/MM/yyyy")
  #formatedDate = dateFormatter.format(fecha)
  #filtro = "( fecha_entrada <= '%s' OR fecha_entrada IS NULL) AND ('%s' <= fecha_salida OR fecha_salida IS NULL)" % (
  #  formatedDate,
  #  formatedDate
  #)
  
  query = store.createFeatureQuery()
  query.addFilter(filtro)
  return query
    def possibleMun(self, mun, storeM):
        possibleMunData = {}
        possibleMunData["possible"] = False
        jDMaxM = 0

        munOptions = mun.split("/")
        munOptions.append(mun)
        for i in munOptions:
            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(
                builder.lower(builder.variable("MUNICIPIO")),
                builder.lower(builder.constant(i))).toString()
            munData = storeM.findFirst(expression)
            if munData == None:
                for j in storeM:
                    munO = unicodedata.normalize('NFKD',
                                                 i).encode('ASCII', 'ignore')
                    munT = j.get("MUNICIPIO")
                    munT = unicodedata.normalize('NFKD', munT).encode(
                        'ASCII', 'ignore')
                    if isinstance(munT, basestring) and isinstance(
                            munO, basestring):
                        jaroDistance = StringUtils.getJaroWinklerDistance(
                            munT.lower(), munO.lower())
                        if jaroDistance > jDMaxM:
                            jDMaxM = jaroDistance
                            possibleMunData["Mun"] = j.get("MUNICIPIO")
                            possibleMunData["INEMun"] = j.get("MUN_INE")
                            possibleMunData["possible"] = True
                    else:
                        logger("El campo municipio " + str(mun) +
                               " o el campo " + str(j.get("MUNICIPIO")) +
                               " del diccionario tienen problemas",
                               LOGGER_WARN)  #CAMBIAR
                        continue

        return possibleMunData
    def possibleProv(self, prov, storeP):
        possibleProvData = {}
        possibleProvData["possible"] = False
        jDMaxP = 0

        provOptions = prov.split("/")
        provOptions.append(prov)
        for i in provOptions:
            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(
                builder.lower(builder.variable("PROVINCIA")),
                builder.lower(builder.constant(i))).toString()
            provData = storeP.findFirst(expression)
            if provData == None:
                for j in storeP:
                    provO = unicodedata.normalize('NFKD',
                                                  i).encode('ASCII', 'ignore')
                    provT = j.get("PROVINCIA")
                    provT = unicodedata.normalize('NFKD', provT).encode(
                        'ASCII', 'ignore')
                    if isinstance(provT, basestring) and isinstance(
                            provO, basestring):
                        jaroDistance = StringUtils.getJaroWinklerDistance(
                            provT.lower(), provO.lower())
                        if jaroDistance > jDMaxP:
                            jDMaxP = jaroDistance
                            possibleProvData["Prov"] = j.get("PROVINCIA")
                            possibleProvData["INEProv"] = j.get("PROV_INE")
                            possibleProvData["possible"] = True
                    else:
                        logger("El campo provincia " + str(prov) +
                               " o el campo " + str(j.get("PROVINCIA")) +
                               " del diccionario tienen problemas",
                               LOGGER_WARN)  #CAMBIAR
                        continue

        return possibleProvData
    def execute(self, report, feature):
        if feature.getType().get("LID_ACCIDENTE") == None:
            # Si no es la tabla de accidentes no hacenos nada
            return
        titularidad_accidente = feature.get("TITULARIDAD_VIA")
        storeVehiculos = feature.getStore().getStoresRepository().getStore(
            "ARENA2_VEHICULOS")
        accidente = feature.get("ID_ACCIDENTE")

        if accidente != None:
            ## Rellenar por campos de la feature
            # Mantiene el none
            # no es lo mismo que llegue un None
            # a que se confirme porque no tiene valores en la tabla
            # de vehiculos con que es 0
            conteoPorFeature = {
                'NUM_TURISMOS': None,
                'NUM_FURGONETAS': None,
                'NUM_CAMIONES': None,
                'NUM_AUTOBUSES': None,
                'NUM_CICLOMOTORES': None,
                'NUM_MOTOCICLETAS': None,
                'NUM_BICICLETAS': None,
                'NUM_OTROS_VEHI': None
            }
            for key in conteoPorFeature.keys():
                value = feature.get(key)
                conteoPorFeature[key] = value

            ## Conteo por la tabla asociada de vehiculos
            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(builder.variable("ID_ACCIDENTE"),
                                    builder.constant(accidente)).toString()
            #fset = storeVehiculos.getFeatureSet(expression)
            conteoPorTablas = {
                'NUM_TURISMOS': 0,
                'NUM_FURGONETAS': 0,
                'NUM_CAMIONES': 0,
                'NUM_AUTOBUSES': 0,
                'NUM_CICLOMOTORES': 0,
                'NUM_MOTOCICLETAS': 0,
                'NUM_BICICLETAS': 0,
                'NUM_OTROS_VEHI': 0
            }
            fset = storeVehiculos.getFeatureSet(expression).iterable()
            for f in fset:
                tipoVehiculo = f.get("TIPO_VEHICULO")
                keyValue = self.getKeyFromTypeVehicle(tipoVehiculo)
                if keyValue != None:
                    conteoPorTablas[keyValue] += 1
            DisposeUtils.dispose(fset)
            DisposeUtils.dispose(storeVehiculos)
            toReport = False
            builder = StringBuilder()
            for key in conteoPorTablas.keys():
                if conteoPorTablas[key] != conteoPorFeature[key]:
                    if toReport:
                        builder.append(", ")
                    toReport = True
                    builder.append(key + " valor:" +
                                   str(conteoPorFeature[key]) +
                                   " correccion:" + str(conteoPorTablas[key]))

            if toReport:
                report.add(
                    feature.get("ID_ACCIDENTE"),
                    CODERR_VEHICULOS_NO_COINCIDEN,
                    "Vehiculos no coinciden: %s." % (builder.toString(), ),
                    fixerId="UpdateCountVehicles",
                    selected=True,
                    NUM_TURISMOS=conteoPorTablas['NUM_TURISMOS'],
                    NUM_FURGONETAS=conteoPorTablas['NUM_FURGONETAS'],
                    NUM_CAMIONES=conteoPorTablas['NUM_CAMIONES'],
                    NUM_AUTOBUSES=conteoPorTablas['NUM_AUTOBUSES'],
                    NUM_CICLOMOTORES=conteoPorTablas['NUM_CICLOMOTORES'],
                    NUM_MOTOCICLETAS=conteoPorTablas['NUM_MOTOCICLETAS'],
                    NUM_BICICLETAS=conteoPorTablas['NUM_BICICLETAS'],
                    NUM_OTROS_VEHI=conteoPorTablas['NUM_OTROS_VEHI'])
    def preprocess(self, report, feature):
        try:
            prov = feature.get("COD_PROVINCIA")
            storeP = self.repo.getStore("ARENA2_TR_INE_PROVINCIA")
            mun = feature.get("COD_MUNICIPIO")
            storeM = self.repo.getStore("ARENA2_TR_INE_MUNICIPIO")

            #logger(prov)
            #logger(mun)

            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(
                builder.lower(builder.variable("PROVINCIA")),
                builder.lower(builder.constant(prov))).toString()
            provData = storeP.findFirst(expression)
            storeP.dispose()

            builder = ExpressionUtils.createExpressionBuilder()
            expression = builder.eq(
                builder.lower(builder.variable("MUNICIPIO")),
                builder.lower(builder.constant(mun))).toString()
            munData = storeM.findFirst(expression)
            storeM.dispose()

            if provData != None and munData != None:  # Si existe un resultado con equivalencia directa lo trata la transformacion
                return

            elif provData == None and munData != None:
                report.add(feature.get("ID_ACCIDENTE"),
                           codigoINE.CODERR_CODIGO_INE_NO_ENCONTRADO,
                           "Imposible asignar el codigo INE de la provincia " +
                           str(prov),
                           fixerID="IgnoreCodigoINEError",
                           selected=True,
                           INE_PROVINCIA=None,
                           PPROVINCIA=None,
                           INE_MUNICIPIO=munData.get("MUN_INE"),
                           PMUNICIPIO=munData.get("MUNICIPIO"))

            elif provData != None and munData == None:
                report.add(feature.get("ID_ACCIDENTE"),
                           codigoINE.CODERR_CODIGO_INE_NO_ENCONTRADO,
                           "Imposible asignar el codigo INE del municipio " +
                           str(mun),
                           fixerID="IgnoreCodigoINEError",
                           selected=True,
                           INE_PROVINCIA=provData.get("PROV_INE"),
                           PPROVINCIA=provData.get("PROVINCIA"),
                           INE_MUNICIPIO=None,
                           PMUNICIPIO=None)

            else:
                report.add(feature.get("ID_ACCIDENTE"),
                           codigoINE.CODERR_CODIGO_INE_NO_ENCONTRADO,
                           "Imposible asignar el codigo INE de la provincia " +
                           str(prov) + " y el municipio " + str(mun),
                           fixerID="IgnoreCodigoINEError",
                           selected=True,
                           INE_PROVINCIA=None,
                           PPROVINCIA=None,
                           INE_MUNICIPIO=None,
                           PMUNICIPIO=None)

        except:
            ex = sys.exc_info()[1]
            logger(
                "Error al ejecutar la regla codigo INE (Antes de la importacion)"
                + str(ex), gvsig.LOGGER_WARN, ex)
            return
    def postprocess(self, report, feature):
        try:
            #COMPROBAR SI ESTAN VACIOS
            if feature.get("INE_PROVINCIA") == None:
                prov = feature.get("COD_PROVINCIA")
                storeP = self.repo.getStore("ARENA2_TR_INE_PROVINCIA")

                possibleProvData = self.possibleProv(prov, storeP)

                if possibleProvData["possible"]:
                    report.add(
                        feature.get("ID_ACCIDENTE"),
                        codigoINE.CODERR_CODIGO_INE_PROVINCIA_NO_ENCONTRADO,
                        "No se ha podido asignar el codigo INE de la provincia "
                        + str(prov),
                        fixerID="IgnoreCodigoINEError",
                        selected=True,
                        INE_PROVINCIA=possibleProvData["INEProv"],
                        PPROVINCIA=possibleProvData["Prov"])
                storeP.dispose()

            if feature.get("INE_MUNICIPIO") == None:
                mun = feature.get("COD_MUNICIPIO")
                storeM = self.repo.getStore("ARENA2_TR_INE_MUNICIPIO")

                possibleMunData = self.possibleMun(mun, storeM)

                if possibleMunData["possible"]:
                    report.add(
                        feature.get("ID_ACCIDENTE"),
                        codigoINE.CODERR_CODIGO_INE_MUNICIPIO_NO_ENCONTRADO,
                        "No se ha podido asignar el codigo INE del municipio "
                        + str(mun),
                        fixerID="IgnoreCodigoINEError",
                        selected=True,
                        INE_MUNICIPIO=possibleMunData["INEMun"],
                        PMUNICIPIO=possibleMunData["Mun"])
                storeM.dispose()

            #COMPROBAR SI ESTAN BIEN
            if feature.get("INE_PROVINCIA") != None:
                prov = feature.get("COD_PROVINCIA")
                ineProv = feature.get("INE_PROVINCIA")
                storeP = self.repo.getStore("ARENA2_TR_INE_PROVINCIA")

                builder = ExpressionUtils.createExpressionBuilder()
                expression = builder.eq(
                    builder.lower(builder.variable("PROV_INE")),
                    builder.lower(builder.constant(ineProv))).toString()
                provData = storeP.findFirst(expression)
                if provData == None:

                    possibleProvData = self.possibleProv(prov, storeP)

                    if possibleProvData["possible"]:
                        report.add(
                            feature.get("ID_ACCIDENTE"),
                            codigoINE.CODERR_CODIGO_INE_PROVINCIA_ERRONEO,
                            "El codigo INE de la provincia " + str(prov) +
                            " es erroneo ",
                            fixerID="IgnoreCodigoINEError",
                            selected=True,
                            INE_PROVINCIA=possibleProvData["INEProv"],
                            PPROVINCIA=possibleProvData["Prov"])

                expression = builder.eq(
                    builder.lower(builder.variable("PROVINCIA")),
                    builder.lower(builder.constant(prov))).toString()
                provData = storeP.findFirst(expression)
                if provData.get("PROV_INE") != ineProv:

                    possibleProvData = self.possibleProv(prov, storeP)

                    if possibleProvData["possible"]:
                        report.add(
                            feature.get("ID_ACCIDENTE"),
                            codigoINE.CODERR_CODIGO_INE_PROVINCIA_ERRONEO,
                            "El codigo INE de la provincia " + str(prov) +
                            " es erroneo ",
                            fixerID="IgnoreCodigoINEError",
                            selected=True,
                            INE_PROVINCIA=possibleProvData["INEProv"],
                            PPROVINCIA=possibleProvData["Prov"])
                    storeP.dispose()

            if feature.get("INE_MUNICIPIO") != None:
                mun = feature.get("COD_MUNICIPIO")
                ineMun = feature.get("INE_MUNICIPIO")
                storeM = self.repo.getStore("ARENA2_TR_INE_MUNICIPIO")

                builder = ExpressionUtils.createExpressionBuilder()
                expression = builder.eq(
                    builder.lower(builder.variable("MUN_INE")),
                    builder.lower(builder.constant(ineMun))).toString()
                munData = storeM.findFirst(expression)
                if munData == None:

                    possibleMunData = self.possibleMun(mun, storeM)

                    if possibleMunData["possible"]:
                        report.add(
                            feature.get("ID_ACCIDENTE"),
                            codigoINE.CODERR_CODIGO_INE_MUNICIPIO_ERRONEO,
                            "El codigo INE del municipio " + str(mun) +
                            " es erroneo ",
                            fixerID="IgnoreCodigoINEError",
                            selected=True,
                            INE_MUNICIPIO=possibleMunData["INEMun"],
                            PMUNICIPIO=possibleMunData["Mun"])

                expression = builder.eq(
                    builder.lower(builder.variable("MUNICIPIO")),
                    builder.lower(builder.constant(mun))).toString()
                munData = storeM.findFirst(expression)
                if munData.get("MUN_INE") != ineMun:

                    possibleMunData = self.possibleMun(mun, storeM)

                    if possibleMunData["possible"]:
                        report.add(
                            feature.get("ID_ACCIDENTE"),
                            codigoINE.CODERR_CODIGO_INE_MUNICIPIO_ERRONEO,
                            "El codigo INE del municipio " + str(mun) +
                            " es erroneo ",
                            fixerID="IgnoreCodigoINEError",
                            selected=True,
                            INE_MUNICIPIO=possibleMunData["INEMun"],
                            PMUNICIPIO=possibleMunData["Mun"])
                storeM.dispose()
            else:
                return

        except:
            ex = sys.exc_info()[1]
            logger(
                "Error al ejecutar la regla codigo INE (Despues de la importacion)"
                + str(ex), gvsig.LOGGER_WARN, ex)
            return