Ejemplo n.º 1
0
def makeAtlas(qptChapter,
              qptDivision,
              qptForm,
              zl_layer,
              zl_field,
              di_layer,
              di_field,
              di_name,
              scale,
              form_file=None,
              form=False,
              project_name='',
              root_out='',
              pbar=False,
              isTest=True):

    root_code = os.path.dirname(os.path.realpath(__file__))

    ## getpapersize
    template_file = open(qptDivision, 'r')
    template_content = template_file.read()
    template_file.close()
    document = QDomDocument()
    document.setContent(template_content)
    p = QgsProject().instance()
    composition = QgsLayout(p)
    composition.loadFromTemplate(document, QgsReadWriteContext())
    map_item = composition.itemById('mapa')
    paper = [
        map_item.sizeWithUnits().width(),
        map_item.sizeWithUnits().height()
    ]

    ##get visible layers
    visibleLayers = p.mapThemeCollection().masterVisibleLayers()

    ## get project srid...
    crs = zl_layer.dataProvider().sourceCrs().authid()

    ## zones 1 layer
    zvl = zl_layer.clone()
    global ZVL
    ZVL = zvl.id()
    QgsProject.instance().addMapLayer(zvl)
    #pr = zvl.dataProvider()
    QgsProject.instance().mapLayer(ZVL).loadNamedStyle(
        root_code + '/templates/layerstyles/zones.qml')

    ## divisions 1 layer
    dvl = QgsVectorLayer("Polygon?crs=" + crs, "divisions_layer", "memory")
    global DVL
    DVL = dvl.id()
    QgsProject.instance().addMapLayer(dvl)
    #pr = dvl.dataProvider()
    QgsProject.instance().mapLayer(DVL).startEditing()
    QgsProject.instance().mapLayer(DVL).loadNamedStyle(
        root_code + '/templates/layerstyles/div1.qml')

    pr_dvl = QgsProject.instance().mapLayer(DVL).dataProvider()
    pr_dvl.addAttributes([
        QgsField('id', QVariant.String),
        QgsField('name', QVariant.String),
        QgsField('ang', QVariant.String),
        QgsField('x', QVariant.String),
        QgsField('y', QVariant.String),
    ])

    QgsProject.instance().mapLayer(DVL).commitChanges()

    ## divisions 2 layer
    dvl2 = QgsVectorLayer("Polygon?crs=" + crs, "divisions_layer", "memory")
    global DVL2
    DVL2 = dvl2.id()
    QgsProject.instance().addMapLayer(dvl2)
    #pr = dvl2.dataProvider()
    QgsProject.instance().mapLayer(DVL2).startEditing()
    QgsProject.instance().mapLayer(DVL2).loadNamedStyle(
        root_code + '/templates/layerstyles/div2.qml')
    pr_dvl2 = QgsProject.instance().mapLayer(DVL2).dataProvider()
    pr_dvl2.addAttributes([
        QgsField('id', QVariant.String),
        QgsField('name', QVariant.String),
        QgsField('ang', QVariant.String),
        QgsField('x', QVariant.String),
        QgsField('y', QVariant.String),
    ])
    QgsProject.instance().mapLayer(DVL2).commitChanges()

    debug('>> layers setted')

    ##makestyles::
    p = QgsProject.instance()

    #_zona_big
    p.mapThemeCollection().removeMapTheme('_zona_big')
    rec = QgsMapThemeCollection().MapThemeRecord()
    recList = []
    vl = visibleLayers
    for v in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(v))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(zvl))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(dvl))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(dvl2))
    rec.setLayerRecords(recList)
    p.mapThemeCollection().insert('_zona_big', rec)

    #_zona_small
    p.mapThemeCollection().removeMapTheme('_zona_small')
    rec = QgsMapThemeCollection().MapThemeRecord()
    recList = []
    vl = visibleLayers
    for v in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(v))
    if di_layer not in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(di_layer))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(zvl))
    rec.setLayerRecords(recList)
    p.mapThemeCollection().insert('_zona_small', rec)

    #_szona_big
    p.mapThemeCollection().removeMapTheme('_szona_big')
    rec = QgsMapThemeCollection().MapThemeRecord()
    recList = []
    vl = visibleLayers
    for v in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(v))
    if di_layer not in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(di_layer))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(zvl))
    rec.setLayerRecords(recList)
    p.mapThemeCollection().insert('_szona_big', rec)

    #_szona_small
    p.mapThemeCollection().removeMapTheme('_szona_small')
    rec = QgsMapThemeCollection().MapThemeRecord()
    recList = []
    vl = visibleLayers
    for v in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(v))
    if di_layer not in vl:
        recList.append(QgsMapThemeCollection().MapThemeLayerRecord(di_layer))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(zvl))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(dvl))
    recList.append(QgsMapThemeCollection().MapThemeLayerRecord(dvl2))
    rec.setLayerRecords(recList)
    p.mapThemeCollection().insert('_szona_small', rec)

    global mapL
    mapLmake()

    ##se puede agilizar
    #Lz = zl_layer #QgsProject.instance().mapLayer(mapL['zones'])

    #Lb = QgsProject.instance().mapLayer(mapL['bounds'])
    #Ld = QgsProject.instance().mapLayer(mapL['divisions'])

    ###########################################################################

    x = 0
    global pag
    pag = 1
    #for b in Lb.getFeatures():
    fr = 0
    zones_f = [zzz for zzz in zl_layer.getFeatures()]
    if pbar:
        pbar.setValue(1)
    for b in zones_f:
        if pbar:
            pbar.setValue(100 / len(zones_f) * fr)
        fr += 1
        debug('>>>> chapter: ')
        debug(b.attributes())

        #isTest
        #self.dlg.progressBar.setValue(int(10))
        szs = getSubzones(b, paper, scale)
        mkChapter(b, qptChapter, project_name, root_out, zl_layer, zl_field,
                  di_layer, di_field, di_name)
        szfr = 0
        for sz in szs:
            szfr += 1
            if pbar:
                pbar.setValue(100 / len(zones_f) * fr +
                              100 / len(zones_f) / len(szs) * szfr)
            debug('>>>> division: ')
            mkDiv(sz, b.geometry(), qptDivision, project_name, root_out,
                  zl_layer, zl_field, di_layer, di_field, di_name)
            if form:
                mkForm(sz, qptForm, form_file, project_name, root_out,
                       zl_layer, zl_field, di_layer, di_field, di_name)
            if isTest:
                break
        if isTest:
            break
        x += 1

    #emptyTemp()

    # #remove styles
    p.mapThemeCollection().removeMapTheme('_zona_big')
    p.mapThemeCollection().removeMapTheme('_zona_small')
    p.mapThemeCollection().removeMapTheme('_szona_big')
    p.mapThemeCollection().removeMapTheme('_szona_small')

    #remove layers
    QgsProject.instance().removeMapLayer(ZVL)
    QgsProject.instance().removeMapLayer(DVL)
    QgsProject.instance().removeMapLayer(DVL2)

    debug('end')

    return