Beispiel #1
0
 def __init__(self, interface, settings):
     QObject.__init__(self)
     self.iface = interface
     self.settings = settings
     self.stop = False
     self.util = Util(self.iface)
     self.intersections = []
Beispiel #2
0
 def __init__(self, iface, hekto, attribs, delimiter, decimalDelimiter,
              fileName, settings, profiles):
     self.iface = iface
     self.hekto = hekto
     self.attribs = attribs
     self.delimiter = delimiter
     self.decimalDelimiter = decimalDelimiter
     self.fileName = fileName
     self.settings = settings
     self.profiles = profiles
     self.u = Util(self.iface)
 def __init__(self, interface, settings):
     QObject.__init__(self)
     self.iface = interface
     self.settings = settings
     self.stop = False
     self.util = Util(self.iface)
     self.intersections = []
 def __init__(self, iface, hekto, attribs, delimiter, decimalDelimiter, fileName, settings, profiles):
     self.iface = iface
     self.hekto = hekto
     self.attribs = attribs
     self.delimiter = delimiter
     self.decimalDelimiter = decimalDelimiter
     self.fileName = fileName
     self.settings = settings
     self.profiles = profiles
     self.u = Util(self.iface)
class ExportShape:

    def __init__(self, iface, hekto, attribs, delimiter, decimalDelimiter, fileName, settings, profiles):
        self.iface = iface
        self.hekto = hekto
        self.attribs = attribs
        self.delimiter = delimiter
        self.decimalDelimiter = decimalDelimiter
        self.fileName = fileName
        self.settings = settings
        self.profiles = profiles
        self.u = Util(self.iface)

    def exportPoint(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        #self.settings.mapData.selectedLineLyr.line.crs().epsg()
        if QGis.QGIS_VERSION_INT < 10900:
            #epsg = self.iface.mapCanvas().mapRenderer().destinationCrs().epsg()
            wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        else:
            #u'EPSG:31254'
            #authid = self.iface.mapCanvas().mapRenderer().destinationCrs().authid().split(":")[1]
            #epsg = int(authid)
            wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        #ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile', self.fileName, epsg, ogr.wkbPoint25D)
        ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile', self.fileName, wkt, ogr.wkbPoint25D)
        if ds is None:
            return

        flds = ['Profillaenge', 'Segmentlaenge', 'Rechtswert', 'Hochwert']
        for fld in flds:
            fldDfn = ogr.FieldDefn(fld, ogr.OFTReal)
            fldDfn.SetWidth(12)
            fldDfn.SetPrecision(3)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld))
                return

        #raster
        for r in self.settings.mapData.rasters.selectedRasters():
            #QgsMessageLog.logMessage('rasterName: {0}'.format(r.name), 'VoGis')
            fldDfn = ogr.FieldDefn(r.name, ogr.OFTReal)
            fldDfn.SetWidth(8)
            fldDfn.SetPrecision(2)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(r.name))
                return

        #Punkttypen
        flds = ['ProfilNr', 'SegNr', 'PktNr']
        for fld in flds:
            fldDfn = ogr.FieldDefn(fld, ogr.OFTInteger)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld))
                return

        #PktKlasse
        fldDfn = ogr.FieldDefn('PktKlasse', ogr.OFTString)
        fldDfn.SetWidth(1)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format('PktKlasse'))
            return

        if self.hekto is True:
            QgsMessageLog.logMessage('Creating HEKTO field', 'VoGis')
            fldDfn = ogr.FieldDefn('Hekto', ogr.OFTString)
            fldDfn.SetWidth(10)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format('Hekto'))
                return

        if self.attribs is True:
            #QgsMessageLog.logMessage('EXPORT POINT attribs TRUE', 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
                if QGis.QGIS_VERSION_INT < 10900:
                    for(idx, fld) in provider.fields().iteritems():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld.name()))
                            return
                else:
                    for fld in provider.fields():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld.name()))
                            return
        else:
            QgsMessageLog.logMessage('attribs FALSE', 'VoGis')

        segOld = None
        for p in self.profiles:
            for s in p.segments:
                if segOld is not None:
                    v = segOld.vertices[len(segOld.vertices) - 1]
                    feat = self.u.createOgrPointFeature(lyr, v)
                    feat = self.__addValues(feat, v, s.id)
                    if lyr.CreateFeature(feat) != 0:
                        QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Feature nicht erstellen: {0}'.format(v.id))
                        return
                    feat.Destroy()
                for v in s.vertices:
                    feat = self.u.createOgrPointFeature(lyr, v)
                    feat = self.__addValues(feat, v, None)
                    if lyr.CreateFeature(feat) != 0:
                        QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Feature nicht erstellen: {0}'.format(v.id))
                        return
                    feat.Destroy()
                segOld = s
            segOld = None

        ds.Destroy()
        ds = None
        self.u.loadVectorFile(self.fileName)

    def __addValues(self, feat, v, sId):
        feat.SetField(0, round(v.distanceProfile, 3))
        if sId is None:
            feat.SetField(1, round(v.distanceSegment, 3))
        else:
            feat.SetField(1, 0)
        #feat.SetField(2, round(v.x, 3))
        feat.SetField(2, v.x * 1000 / 1000)
        feat.SetField(3, round(v.y, 3))
        fldCnt = 4
        if len(v.zvals) > 0:
            for z in v.zvals:
                zVal = self.settings.nodata_value
                if z is not None:
                    zVal = z
                feat.SetField(fldCnt, round(zVal, 3))
                fldCnt += 1
        feat.SetField(fldCnt, v.profileId)
        fldCnt += 1
        if sId is None:
            feat.SetField(fldCnt, v.segmentId)
        else:
            feat.SetField(fldCnt, sId)
        fldCnt += 1
        feat.SetField(fldCnt, v.vertexId)
        fldCnt += 1
        feat.SetField(fldCnt, v.getType())
        fldCnt += 1
        if self.hekto is True:
            #QgsMessageLog.logMessage('fldIdx:{0} {1}'.format(fldCnt, v.getHekto(self.decimalDelimiter)), 'VoGis')
            #feat.SetField(fldCnt, 'HEKTO')
            if QGis.QGIS_VERSION_INT < 10900:
                feat.SetField(fldCnt, v.getHekto(self.decimalDelimiter))
            else:
                feat.SetField(fldCnt, str(v.getHekto(self.decimalDelimiter)))
            fldCnt += 1
        if self.attribs is True:
            #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                for a in v.getAttributeVals():
                    feat.SetField(fldCnt, a)
                    fldCnt += 1
        return feat

    def exportLine(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        #self.settings.mapData.selectedLineLyr.line.crs().epsg()
        wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile', self.fileName, wkt, ogr.wkbLineString25D)
        if ds is None:
            return

        fld = 'Profillaenge'
        fldDfn = ogr.FieldDefn(fld, ogr.OFTReal)
        fldDfn.SetWidth(12)
        fldDfn.SetPrecision(3)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld))
            return

        fld = 'DHM'
        fldDfn = ogr.FieldDefn(fld, ogr.OFTString)
        fldDfn.SetWidth(20)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld))
            return

        if self.attribs is True:
            QgsMessageLog.logMessage('EXPORT LINE attribs TRUE', 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
                if QGis.QGIS_VERSION_INT < 10900:
                    for(idx, fld) in provider.fields().iteritems():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld.name()))
                            return
                else:
                    for fld in provider.fields():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()), ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", 'Konnte Attribut nicht erstellen: {0}'.format(fld.name()))
                            return
        else:
            QgsMessageLog.logMessage('attribs FALSE', 'VoGis')

        if self.settings.onlyHektoMode is True:
            for p in self.profiles:
                feat = ogr.Feature(lyr.GetLayerDefn())
                lineGeom = ogr.Geometry(ogr.wkbLineString25D)
                lastV = None
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        lastV = v
                        lineGeom.AddPoint(v.x, v.y, 0)
                feat.SetField(0, lastV.distanceProfile)
                fldCnt = 1
                if self.attribs is True:
                    #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
                    if self.settings.modeLine == enumModeLine.line:
                        for a in v.getAttributeVals():
                            feat.SetField(fldCnt, a)
                            fldCnt += 1
                feat.SetGeometry(lineGeom)
                if lyr.CreateFeature(feat) != 0:
                    QMessageBox.warning(self.iface.mainWindow(),
                                        "VoGIS-Profiltool",
                                        'Konnte Feature nicht erstellen: {0}'.format(p.id)
                                        )
                    return
                lineGeom.Destroy()
                feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                feats = {}
                lineGeoms = {}
                lastV = {}
                for idx in range(len(selRstrs)):
                    feats[idx] = ogr.Feature(lyr.GetLayerDefn())
                    lineGeoms[idx] = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        for idx in range(len(selRstrs)):
                            lastV[idx] = v
                            #QgsMessageLog.logMessage('zVal: {0}'.format(v.zvals[idx]), 'VoGis')
                            lineGeoms[idx].AddPoint(v.x, v.y, v.zvals[idx])
                for idx in range(len(selRstrs)):
                    feats[idx].SetField(0, round(lastV[idx].distanceProfile, 3))
                    feats[idx].SetField(1, selRstrs[idx].name)
                    fldCnt = 2
                    if self.attribs is True:
                        #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
                        if self.settings.modeLine == enumModeLine.line:
                            for a in v.getAttributeVals():
                                feats[idx].SetField(fldCnt, a)
                                fldCnt += 1
                    feats[idx].SetGeometry(lineGeoms[idx])
                    if lyr.CreateFeature(feats[idx]) != 0:
                        QMessageBox.warning(self.iface.mainWindow(),
                                            "VoGIS-Profiltool",
                                            'Konnte Feature nicht erstellen: {0}'.format(p.id)
                                            )
                        return
                    lineGeoms[idx].Destroy()
                    feats[idx].Destroy()
        ds.Destroy()
        ds = None
        self.u.loadVectorFile(self.fileName)
Beispiel #6
0
class ExportShape:
    def __init__(self, iface, hekto, attribs, delimiter, decimalDelimiter,
                 fileName, settings, profiles):
        self.iface = iface
        self.hekto = hekto
        self.attribs = attribs
        self.delimiter = delimiter
        self.decimalDelimiter = decimalDelimiter
        self.fileName = fileName
        self.settings = settings
        self.profiles = profiles
        self.u = Util(self.iface)

    def exportPoint(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        #self.settings.mapData.selectedLineLyr.line.crs().epsg()
        if QGis.QGIS_VERSION_INT < 10900:
            #epsg = self.iface.mapCanvas().mapRenderer().destinationCrs().epsg()
            wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        else:
            #u'EPSG:31254'
            #authid = self.iface.mapCanvas().mapRenderer().destinationCrs().authid().split(":")[1]
            #epsg = int(authid)
            wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        #ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile', self.fileName, epsg, ogr.wkbPoint25D)
        ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile',
                                                self.fileName, wkt,
                                                ogr.wkbPoint25D)
        if ds is None:
            return

        flds = ['Profillaenge', 'Segmentlaenge', 'Rechtswert', 'Hochwert']
        for fld in flds:
            fldDfn = ogr.FieldDefn(fld, ogr.OFTReal)
            fldDfn.SetWidth(12)
            fldDfn.SetPrecision(3)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(
                    self.iface.mainWindow(), "VoGIS-Profiltool",
                    'Konnte Attribut nicht erstellen: {0}'.format(fld))
                return

        #raster
        for r in self.settings.mapData.rasters.selectedRasters():
            #QgsMessageLog.logMessage('rasterName: {0}'.format(r.name), 'VoGis')
            fldDfn = ogr.FieldDefn(r.name, ogr.OFTReal)
            fldDfn.SetWidth(8)
            fldDfn.SetPrecision(2)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(
                    self.iface.mainWindow(), "VoGIS-Profiltool",
                    'Konnte Attribut nicht erstellen: {0}'.format(r.name))
                return

        #Punkttypen
        flds = ['ProfilNr', 'SegNr', 'PktNr']
        for fld in flds:
            fldDfn = ogr.FieldDefn(fld, ogr.OFTInteger)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(
                    self.iface.mainWindow(), "VoGIS-Profiltool",
                    'Konnte Attribut nicht erstellen: {0}'.format(fld))
                return

        #PktKlasse
        fldDfn = ogr.FieldDefn('PktKlasse', ogr.OFTString)
        fldDfn.SetWidth(1)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(
                self.iface.mainWindow(), "VoGIS-Profiltool",
                'Konnte Attribut nicht erstellen: {0}'.format('PktKlasse'))
            return

        if self.hekto is True:
            QgsMessageLog.logMessage('Creating HEKTO field', 'VoGis')
            fldDfn = ogr.FieldDefn('Hekto', ogr.OFTString)
            fldDfn.SetWidth(10)
            if lyr.CreateField(fldDfn) != 0:
                QMessageBox.warning(
                    self.iface.mainWindow(), "VoGIS-Profiltool",
                    'Konnte Attribut nicht erstellen: {0}'.format('Hekto'))
                return

        if self.attribs is True:
            #QgsMessageLog.logMessage('EXPORT POINT attribs TRUE', 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                provider = self.settings.mapData.selectedLineLyr.line.dataProvider(
                )
                if QGis.QGIS_VERSION_INT < 10900:
                    for (idx, fld) in provider.fields().iteritems():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(
                                self.iface.mainWindow(), "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format(
                                    fld.name()))
                            return
                else:
                    for fld in provider.fields():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(
                                self.iface.mainWindow(), "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format(
                                    fld.name()))
                            return
        else:
            QgsMessageLog.logMessage('attribs FALSE', 'VoGis')

        segOld = None
        for p in self.profiles:
            for s in p.segments:
                if segOld is not None:
                    v = segOld.vertices[len(segOld.vertices) - 1]
                    feat = self.u.createOgrPointFeature(lyr, v)
                    feat = self.__addValues(feat, v, s.id)
                    if lyr.CreateFeature(feat) != 0:
                        QMessageBox.warning(
                            self.iface.mainWindow(), "VoGIS-Profiltool",
                            'Konnte Feature nicht erstellen: {0}'.format(v.id))
                        return
                    feat.Destroy()
                for v in s.vertices:
                    feat = self.u.createOgrPointFeature(lyr, v)
                    feat = self.__addValues(feat, v, None)
                    if lyr.CreateFeature(feat) != 0:
                        QMessageBox.warning(
                            self.iface.mainWindow(), "VoGIS-Profiltool",
                            'Konnte Feature nicht erstellen: {0}'.format(v.id))
                        return
                    feat.Destroy()
                segOld = s
            segOld = None

        ds.Destroy()
        ds = None
        self.u.loadVectorFile(self.fileName)

    def __addValues(self, feat, v, sId):
        feat.SetField(0, round(v.distanceProfile, 3))
        if sId is None:
            feat.SetField(1, round(v.distanceSegment, 3))
        else:
            feat.SetField(1, 0)
        #feat.SetField(2, round(v.x, 3))
        feat.SetField(2, v.x * 1000 / 1000)
        feat.SetField(3, round(v.y, 3))
        fldCnt = 4
        if len(v.zvals) > 0:
            for z in v.zvals:
                zVal = -9999
                if z is not None:
                    zVal = z
                feat.SetField(fldCnt, round(zVal, 3))
                fldCnt += 1
        feat.SetField(fldCnt, v.profileId)
        fldCnt += 1
        if sId is None:
            feat.SetField(fldCnt, v.segmentId)
        else:
            feat.SetField(fldCnt, sId)
        fldCnt += 1
        feat.SetField(fldCnt, v.vertexId)
        fldCnt += 1
        feat.SetField(fldCnt, v.getType())
        fldCnt += 1
        if self.hekto is True:
            #QgsMessageLog.logMessage('fldIdx:{0} {1}'.format(fldCnt, v.getHekto(self.decimalDelimiter)), 'VoGis')
            #feat.SetField(fldCnt, 'HEKTO')
            if QGis.QGIS_VERSION_INT < 10900:
                feat.SetField(fldCnt, v.getHekto(self.decimalDelimiter))
            else:
                feat.SetField(fldCnt, str(v.getHekto(self.decimalDelimiter)))
            fldCnt += 1
        if self.attribs is True:
            #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                for a in v.getAttributeVals():
                    feat.SetField(fldCnt, a)
                    fldCnt += 1
        return feat

    def exportLine(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        #self.settings.mapData.selectedLineLyr.line.crs().epsg()
        wkt = self.iface.mapCanvas().mapRenderer().destinationCrs().toWkt()
        ds, lyr = self.u.createOgrDataSrcAndLyr('ESRI Shapefile',
                                                self.fileName, wkt,
                                                ogr.wkbLineString25D)
        if ds is None:
            return

        fld = 'Profillaenge'
        fldDfn = ogr.FieldDefn(fld, ogr.OFTReal)
        fldDfn.SetWidth(12)
        fldDfn.SetPrecision(3)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(
                self.iface.mainWindow(), "VoGIS-Profiltool",
                'Konnte Attribut nicht erstellen: {0}'.format(fld))
            return

        fld = 'DHM'
        fldDfn = ogr.FieldDefn(fld, ogr.OFTString)
        fldDfn.SetWidth(20)
        if lyr.CreateField(fldDfn) != 0:
            QMessageBox.warning(
                self.iface.mainWindow(), "VoGIS-Profiltool",
                'Konnte Attribut nicht erstellen: {0}'.format(fld))
            return

        if self.attribs is True:
            QgsMessageLog.logMessage('EXPORT LINE attribs TRUE', 'VoGis')
            if self.settings.modeLine == enumModeLine.line:
                provider = self.settings.mapData.selectedLineLyr.line.dataProvider(
                )
                if QGis.QGIS_VERSION_INT < 10900:
                    for (idx, fld) in provider.fields().iteritems():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(
                                self.iface.mainWindow(), "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format(
                                    fld.name()))
                            return
                else:
                    for fld in provider.fields():
                        fldTyp = fld.type()
                        if fldTyp == QVariant.Double:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTReal)
                        elif fldTyp == QVariant.Int:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTInteger)
                        else:
                            fldDfn = ogr.FieldDefn(str(fld.name()),
                                                   ogr.OFTString)
                            fldDfn.SetWidth(50)
                        if lyr.CreateField(fldDfn) != 0:
                            QMessageBox.warning(
                                self.iface.mainWindow(), "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format(
                                    fld.name()))
                            return
        else:
            QgsMessageLog.logMessage('attribs FALSE', 'VoGis')

        if self.settings.onlyHektoMode is True:
            for p in self.profiles:
                feat = ogr.Feature(lyr.GetLayerDefn())
                lineGeom = ogr.Geometry(ogr.wkbLineString25D)
                lastV = None
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        lastV = v
                        lineGeom.AddPoint(v.x, v.y, 0)
                feat.SetField(0, lastV.distanceProfile)
                fldCnt = 1
                if self.attribs is True:
                    #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
                    if self.settings.modeLine == enumModeLine.line:
                        for a in v.getAttributeVals():
                            feat.SetField(fldCnt, a)
                            fldCnt += 1
                feat.SetGeometry(lineGeom)
                if lyr.CreateFeature(feat) != 0:
                    QMessageBox.warning(
                        self.iface.mainWindow(), "VoGIS-Profiltool",
                        'Konnte Feature nicht erstellen: {0}'.format(p.id))
                    return
                lineGeom.Destroy()
                feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                feats = {}
                lineGeoms = {}
                lastV = {}
                for idx in range(len(selRstrs)):
                    feats[idx] = ogr.Feature(lyr.GetLayerDefn())
                    lineGeoms[idx] = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        for idx in range(len(selRstrs)):
                            lastV[idx] = v
                            #QgsMessageLog.logMessage('zVal: {0}'.format(v.zvals[idx]), 'VoGis')
                            lineGeoms[idx].AddPoint(v.x, v.y, v.zvals[idx])
                for idx in range(len(selRstrs)):
                    feats[idx].SetField(0, round(lastV[idx].distanceProfile,
                                                 3))
                    feats[idx].SetField(1, selRstrs[idx].name)
                    fldCnt = 2
                    if self.attribs is True:
                        #QgsMessageLog.logMessage('modeLine:{0}'.format(self.settings.modeLine), 'VoGis')
                        if self.settings.modeLine == enumModeLine.line:
                            for a in v.getAttributeVals():
                                feats[idx].SetField(fldCnt, a)
                                fldCnt += 1
                    feats[idx].SetGeometry(lineGeoms[idx])
                    if lyr.CreateFeature(feats[idx]) != 0:
                        QMessageBox.warning(
                            self.iface.mainWindow(), "VoGIS-Profiltool",
                            'Konnte Feature nicht erstellen: {0}'.format(p.id))
                        return
                    lineGeoms[idx].Destroy()
                    feats[idx].Destroy()
        ds.Destroy()
        ds = None
        self.u.loadVectorFile(self.fileName)
 def __init__(self, iface, fileName, settings, profiles):
     self.iface = iface
     self.fileName = fileName
     self.settings = settings
     self.profiles = profiles
     self.u = Util(self.iface)
class ExportDxf:
    def __init__(self, iface, fileName, settings, profiles):
        self.iface = iface
        self.fileName = fileName
        self.settings = settings
        self.profiles = profiles
        self.u = Util(self.iface)

    def exportPoint(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        ds, lyr = self.u.createOgrDataSrcAndLyr("DXF", self.fileName, None,
                                                ogr.wkbPoint25D)
        if ds is None:
            return

        field_defn = ogr.FieldDefn('Layer', ogr.OFTString)
        field_defn.SetWidth(32)

        if lyr.CreateField(field_defn) != 0:
            QMessageBox.warning(
                self.iface.mainWindow(), "VoGIS-Profiltool",
                'Konnte Attribut nicht erstellen: {0}'.format('Layer'))
            return

        if self.settings.onlyHektoMode is True:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                for s in p.segments:
                    for v in s.vertices:
                        #QgsMessageLog.logMessage('rasterName: {0}'.format(selRstrs[idx].name), 'VoGis')
                        feat = ogr.Feature(lyr.GetLayerDefn())
                        #feat.SetField('Layer', selRstrs[idx].name)
                        pt = ogr.Geometry(ogr.wkbPoint25D)
                        pt.SetPoint(0, v.x, v.y, 0)
                        feat.SetGeometry(pt)
                        if lyr.CreateFeature(feat) != 0:
                            QMessageBox.warning(
                                self.iface.mainWindow(), "VoGIS-Profiltool",
                                'Konnte Feature nicht erstellen: {0}'.format(
                                    v.id))
                            return
                        feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                for s in p.segments:
                    for v in s.vertices:
                        for idx in range(len(selRstrs)):
                            #QgsMessageLog.logMessage('rasterName: {0}'.format(selRstrs[idx].name), 'VoGis')
                            feat = ogr.Feature(lyr.GetLayerDefn())
                            feat.SetField('Layer', selRstrs[idx].name)
                            pt = ogr.Geometry(ogr.wkbPoint25D)
                            pt.SetPoint(0, v.x, v.y, v.zvals[idx])
                            feat.SetGeometry(pt)
                            if lyr.CreateFeature(feat) != 0:
                                QMessageBox.warning(
                                    self.iface.mainWindow(),
                                    "VoGIS-Profiltool",
                                    'Konnte Feature nicht erstellen: {0}'.
                                    format(v.id))
                                return
                            feat.Destroy()
        ds = None
        #crashes QGIS: why?
        #self.u.loadVectorFile(self.fileName)

    def exportLine(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        ds, lyr = self.u.createOgrDataSrcAndLyr("DXF", self.fileName, None,
                                                ogr.wkbLineString25D)
        if ds is None:
            return

        field_defn = ogr.FieldDefn('Layer', ogr.OFTString)
        field_defn.SetWidth(32)

        if lyr.CreateField(field_defn) != 0:
            QMessageBox.warning(
                self.iface.mainWindow(), "VoGIS-Profiltool",
                'Konnte Attribut nicht erstellen: {0}'.format('Layer'))
            return

        if self.settings.onlyHektoMode is True:
            for p in self.profiles:
                feat = ogr.Feature(lyr.GetLayerDefn())
                lineGeom = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        lineGeom.AddPoint(v.x, v.y, 0)
                feat.SetGeometry(lineGeom)
                if lyr.CreateFeature(feat) != 0:
                    QMessageBox.warning(
                        self.iface.mainWindow(), "VoGIS-Profiltool",
                        'Konnte Feature nicht erstellen: {0}'.format(p.id))
                    return
                lineGeom.Destroy()
                feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                feats = {}
                lineGeoms = {}
                for idx in range(len(selRstrs)):
                    feats[idx] = ogr.Feature(lyr.GetLayerDefn())
                    feats[idx].SetField(
                        'Layer', str('{0} {1}'.format(selRstrs[idx].name,
                                                      p.id)))
                    lineGeoms[idx] = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        for idx in range(len(selRstrs)):
                            #QgsMessageLog.logMessage('zVal: {0}'.format(v.zvals[idx]), 'VoGis')
                            lineGeoms[idx].AddPoint(v.x, v.y, v.zvals[idx])
                for idx in range(len(selRstrs)):
                    feats[idx].SetGeometry(lineGeoms[idx])
                    if lyr.CreateFeature(feats[idx]) != 0:
                        QMessageBox.warning(
                            self.iface.mainWindow(), "VoGIS-Profiltool",
                            'Konnte Feature nicht erstellen: {0}'.format(p.id))
                        return
                    lineGeoms[idx].Destroy()
                    feats[idx].Destroy()
        ds.Destroy()
        ds = None
Beispiel #9
0
    def create(self):

        profiles = []

        #Line aus den Textboxwerten erstellen
        if self.settings.modeLine == enumModeLine.straightLine:
            profiles.append(
                self.processFeature(None, 1, 1,
                                    self.settings.mapData.customLine))
            return profiles

        #Line aus gezeichneter Linie erstellen
        if self.settings.modeLine == enumModeLine.customLine:
            profiles.append(
                self.processFeature(None, 1, 1,
                                    self.settings.mapData.customLine))
            return profiles

        #Shapefile Geometrien abarbeiten
        if self.settings.modeLine == enumModeLine.line:

            #feat = QgsFeature()
            #if self.settings.onlySelectedFeatures is True:
            #    for feat in self.settings.mapData.selectedLineLyr.line.selectedFeatures():
            #        profiles.append(self.processFeature(len(profiles) + 1,
            #                                            self.settings.mapData.selectedLineLyr.line.id(),
            #                                            feat
            #                                            )
            #                        )
            #else:
            #    provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
            #    attrIndices = provider.attributeIndexes()
            #    provider.select(attrIndices)
            #    while (provider.nextFeature(feat)):
            #        #QgsMessageLog.logMessage(str(self.settings.mapData.selectedLineLyr.line.id()), 'VoGis')
            #        profiles.append(self.processFeature(len(profiles) + 1,
            #                                            self.settings.mapData.selectedLineLyr.line.id(),
            #                                            feat
            #                                            )
            #                        )

            provider = self.settings.mapData.selectedLineLyr.line.dataProvider(
            )
            feats = []

            #Alle Attribute holen
            if QGis.QGIS_VERSION_INT < 10900:
                provider.select(provider.attributeIndexes())

            if self.settings.onlySelectedFeatures is True:
                feats = self.settings.mapData.selectedLineLyr.line.selectedFeatures(
                )
            else:
                if QGis.QGIS_VERSION_INT < 10900:
                    attrIndices = provider.attributeIndexes()
                    provider.select(attrIndices)
                    feat = QgsFeature()
                    while (provider.nextFeature(feat)):
                        #geom = feat.geometry()
                        #QgsMessageLog.logMessage( 'isMultipart: {0}'.format(str(geom.isMultipart())), 'VoGis')
                        #attrs = feat.attributeMap()
                        # attrs is a dictionary: key = field index, value = QgsFeatureAttribute
                        # show all attributes and their values
                        #for (k, attr) in feat.attributeMap().iteritems():
                        #    QgsMessageLog.logMessage('{0}: {1}'.format(k, attr.toString()), 'VoGis')
                        feats.append(feat)
                        #neues Feature verwenden, weil sonst die Multiparts
                        #nicht als solche erkannt werden
                        feat = QgsFeature()
                else:
                    QgsMessageLog.logMessage('PROVIDER SELECT', 'VoGis')
                    #processing.getfeatures: This will iterate over all the features in the layer, in case there is no selection, or over the selected features otherwise.
                    #obviously not available with windows standalone installer
                    #features = processing.getfeatures(self.settings.mapData.selectedLineLyr.line)
                    features = self.settings.mapData.selectedLineLyr.line.getFeatures(
                    )
                    for feat in features:
                        feats.append(feat)

            #for feat in feats:
            #    if feat.isValid() is False:
            #        return []

            ut = Util(self.iface)
            feats, err_msg = ut.prepareFeatures(self.settings, provider, feats)

            if not err_msg is None:
                #QMessageBox.critical(self.iface.mainWindow(), "VoGIS-Profiltool", err_msg)
                QMessageBox.critical(self.iface.mainWindow(), 'PREPARE ERROR',
                                     err_msg)
                return []

            for f in feats:
                geom = f.geometry()
                if geom.isMultipart():
                    msg = QApplication.translate(
                        'code',
                        'Multipart Feature vorhanden! Option zum Explodieren verwenden.',
                        None, QApplication.UnicodeUTF8)
                    QMessageBox.warning(self.iface.mainWindow(),
                                        "VoGIS-Profiltool", msg)
                    return profiles

            featCnt = len(feats)
            for idx, feat in enumerate(feats):
                #QGIS 2.0 http://gis.stackexchange.com/a/58754 http://gis.stackexchange.com/a/57090
                #http://acaciaecho.wordpress.com/2011/01/11/pyqtprogressbar/
                self.iface.mainWindow().statusBar().showMessage(
                    'VoGIS-Profiltool, Element: {0}/{1}'.format(idx, featCnt))
                profiles.append(
                    self.processFeature(
                        provider.fields(),
                        len(profiles) + 1,
                        self.settings.mapData.selectedLineLyr.line.id(), feat))

        #QGIS 2.0 http://gis.stackexchange.com/a/58754 http://gis.stackexchange.com/a/57090
        self.iface.mainWindow().statusBar().showMessage(
            'VoGIS-Profiltool, {0} Profile'.format(len(profiles)))
        return profiles
Beispiel #10
0
 def __init__(self, iface, fileName, settings, profiles):
     self.iface = iface
     self.fileName = fileName
     self.settings = settings
     self.profiles = profiles
     self.u = Util(self.iface)
Beispiel #11
0
class ExportDxf:

    def __init__(self, iface, fileName, settings, profiles):
        self.iface = iface
        self.fileName = fileName
        self.settings = settings
        self.profiles = profiles
        self.u = Util(self.iface)

    def exportPoint(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        ds, lyr = self.u.createOgrDataSrcAndLyr("DXF", self.fileName, None, ogr.wkbPoint25D)
        if ds is None:
            return

        field_defn = ogr.FieldDefn('Layer', ogr.OFTString)
        field_defn.SetWidth(32)

        if lyr.CreateField(field_defn) != 0:
            QMessageBox.warning(self.iface.mainWindow(),
                                "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format('Layer')
                                )
            return

        if self.settings.onlyHektoMode is True:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                for s in p.segments:
                    for v in s.vertices:
                        #QgsMessageLog.logMessage('rasterName: {0}'.format(selRstrs[idx].name), 'VoGis')
                        feat = ogr.Feature(lyr.GetLayerDefn())
                        #feat.SetField('Layer', selRstrs[idx].name)
                        pt = ogr.Geometry(ogr.wkbPoint25D)
                        pt.SetPoint(0, v.x, v.y, 0)
                        feat.SetGeometry(pt)
                        if lyr.CreateFeature(feat) != 0:
                            QMessageBox.warning(self.iface.mainWindow(),
                                                "VoGIS-Profiltool",
                                                'Konnte Feature nicht erstellen: {0}'.format(v.id)
                                                )
                            return
                        feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                for s in p.segments:
                    for v in s.vertices:
                        for idx in range(len(selRstrs)):
                            #QgsMessageLog.logMessage('rasterName: {0}'.format(selRstrs[idx].name), 'VoGis')
                            feat = ogr.Feature(lyr.GetLayerDefn())
                            feat.SetField('Layer', selRstrs[idx].name)
                            pt = ogr.Geometry(ogr.wkbPoint25D)
                            pt.SetPoint(0, v.x, v.y, v.zvals[idx])
                            feat.SetGeometry(pt)
                            if lyr.CreateFeature(feat) != 0:
                                QMessageBox.warning(self.iface.mainWindow(),
                                                    "VoGIS-Profiltool",
                                                    'Konnte Feature nicht erstellen: {0}'.format(v.id)
                                                    )
                                return
                            feat.Destroy()
        ds = None
        #crashes QGIS: why?
        #self.u.loadVectorFile(self.fileName)

    def exportLine(self):

        if self.u.deleteVectorFile(self.fileName) is False:
            return

        ds, lyr = self.u.createOgrDataSrcAndLyr("DXF", self.fileName, None, ogr.wkbLineString25D)
        if ds is None:
            return

        field_defn = ogr.FieldDefn('Layer', ogr.OFTString)
        field_defn.SetWidth(32)

        if lyr.CreateField(field_defn) != 0:
            QMessageBox.warning(self.iface.mainWindow(),
                                "VoGIS-Profiltool",
                                'Konnte Attribut nicht erstellen: {0}'.format('Layer')
                                )
            return

        if self.settings.onlyHektoMode is True:
            for p in self.profiles:
                feat = ogr.Feature(lyr.GetLayerDefn())
                lineGeom = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        lineGeom.AddPoint(v.x, v.y, 0)
                feat.SetGeometry(lineGeom)
                if lyr.CreateFeature(feat) != 0:
                    QMessageBox.warning(self.iface.mainWindow(),
                                        "VoGIS-Profiltool",
                                        'Konnte Feature nicht erstellen: {0}'.format(p.id)
                                        )
                    return
                lineGeom.Destroy()
                feat.Destroy()
        else:
            selRstrs = self.settings.mapData.rasters.selectedRasters()
            for p in self.profiles:
                feats = {}
                lineGeoms = {}
                for idx in range(len(selRstrs)):
                    feats[idx] = ogr.Feature(lyr.GetLayerDefn())
                    feats[idx].SetField('Layer', str('{0} {1}'.format(selRstrs[idx].name, p.id)))
                    lineGeoms[idx] = ogr.Geometry(ogr.wkbLineString25D)
                for s in p.segments:
                    for idxV in range(len(s.vertices)):
                        v = s.vertices[idxV]
                        for idx in range(len(selRstrs)):
                            #QgsMessageLog.logMessage('zVal: {0}'.format(v.zvals[idx]), 'VoGis')
                            lineGeoms[idx].AddPoint(v.x, v.y, v.zvals[idx])
                for idx in range(len(selRstrs)):
                    feats[idx].SetGeometry(lineGeoms[idx])
                    if lyr.CreateFeature(feats[idx]) != 0:
                        QMessageBox.warning(self.iface.mainWindow(),
                                            "VoGIS-Profiltool",
                                            'Konnte Feature nicht erstellen: {0}'.format(p.id)
                                            )
                        return
                    lineGeoms[idx].Destroy()
                    feats[idx].Destroy()
        ds.Destroy()
        ds = None
Beispiel #12
0
    def create(self):

        profiles = []

        #Line aus den Textboxwerten erstellen
        if self.settings.modeLine == enumModeLine.straightLine:
            profiles.append(self.processFeature(None,
                                                1,
                                                1,
                                                self.settings.mapData.customLine
                                                )
                            )
            return profiles

        #Line aus gezeichneter Linie erstellen
        if self.settings.modeLine == enumModeLine.customLine:
            profiles.append(self.processFeature(None,
                                                1,
                                                1,
                                                self.settings.mapData.customLine
                                                )
                            )
            return profiles

        #Shapefile Geometrien abarbeiten
        if self.settings.modeLine == enumModeLine.line:

            #feat = QgsFeature()
            #if self.settings.onlySelectedFeatures is True:
            #    for feat in self.settings.mapData.selectedLineLyr.line.selectedFeatures():
            #        profiles.append(self.processFeature(len(profiles) + 1,
            #                                            self.settings.mapData.selectedLineLyr.line.id(),
            #                                            feat
            #                                            )
            #                        )
            #else:
            #    provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
            #    attrIndices = provider.attributeIndexes()
            #    provider.select(attrIndices)
            #    while (provider.nextFeature(feat)):
            #        #QgsMessageLog.logMessage(str(self.settings.mapData.selectedLineLyr.line.id()), 'VoGis')
            #        profiles.append(self.processFeature(len(profiles) + 1,
            #                                            self.settings.mapData.selectedLineLyr.line.id(),
            #                                            feat
            #                                            )
            #                        )

            provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
            feats = []

            #Alle Attribute holen
            if QGis.QGIS_VERSION_INT < 10900: provider.select(provider.attributeIndexes())

            if self.settings.onlySelectedFeatures is True:
                feats = self.settings.mapData.selectedLineLyr.line.selectedFeatures()
            else:
                if QGis.QGIS_VERSION_INT < 10900:
                    attrIndices = provider.attributeIndexes()
                    provider.select(attrIndices)
                    feat = QgsFeature()
                    while (provider.nextFeature(feat)):
                        #geom = feat.geometry()
                        #QgsMessageLog.logMessage( 'isMultipart: {0}'.format(str(geom.isMultipart())), 'VoGis')
                        #attrs = feat.attributeMap()
                        # attrs is a dictionary: key = field index, value = QgsFeatureAttribute
                        # show all attributes and their values
                        #for (k, attr) in feat.attributeMap().iteritems():
                        #    QgsMessageLog.logMessage('{0}: {1}'.format(k, attr.toString()), 'VoGis')
                        feats.append(feat)
                        #neues Feature verwenden, weil sonst die Multiparts
                        #nicht als solche erkannt werden
                        feat = QgsFeature()
                else:
                    QgsMessageLog.logMessage('PROVIDER SELECT', 'VoGis')
                    #processing.getfeatures: This will iterate over all the features in the layer, in case there is no selection, or over the selected features otherwise.
                    #obviously not available with windows standalone installer
                    #features = processing.getfeatures(self.settings.mapData.selectedLineLyr.line)
                    features = self.settings.mapData.selectedLineLyr.line.getFeatures()
                    for feat in features:
                        feats.append(feat)

            #for feat in feats:
            #    if feat.isValid() is False:
            #        return []

            ut = Util(self.iface)
            feats, err_msg = ut.prepareFeatures(self.settings, provider, feats)

            if not err_msg is None:
                #QMessageBox.critical(self.iface.mainWindow(), "VoGIS-Profiltool", err_msg)
                QMessageBox.critical(self.iface.mainWindow(), 'PREPARE ERROR', err_msg)
                return []

            for f in feats:
                geom = f.geometry()
                if geom.isMultipart():
                    msg = QApplication.translate('code', 'Multipart Feature vorhanden! Option zum Explodieren verwenden.', None, QApplication.UnicodeUTF8)
                    QMessageBox.warning(self.iface.mainWindow(), "VoGIS-Profiltool", msg)
                    return profiles

            featCnt = len(feats)
            for idx, feat in enumerate(feats):
                #QGIS 2.0 http://gis.stackexchange.com/a/58754 http://gis.stackexchange.com/a/57090
                #http://acaciaecho.wordpress.com/2011/01/11/pyqtprogressbar/
                self.iface.mainWindow().statusBar().showMessage('VoGIS-Profiltool, Element: {0}/{1}'.format(idx, featCnt))
                profiles.append(self.processFeature(provider.fields(),
                                                    len(profiles) + 1,
                                                    self.settings.mapData.selectedLineLyr.line.id(),
                                                    feat
                                                    )
                                )

        #QGIS 2.0 http://gis.stackexchange.com/a/58754 http://gis.stackexchange.com/a/57090
        self.iface.mainWindow().statusBar().showMessage('VoGIS-Profiltool, {0} Profile'.format(len(profiles)))
        return profiles
Beispiel #13
0
class CreateProfile(QObject):
    def __init__(self, interface, settings):
        QObject.__init__(self)
        self.iface = interface
        self.settings = settings
        self.stop = False
        self.util = Util(self.iface)
        self.intersections = []

    def abort(self):
        self.stop = True

    finished = pyqtSignal(object, object)
    error = pyqtSignal(basestring)
    progress = pyqtSignal(basestring)

    def create(self):

        profiles = []

        try:
            #Line aus den Textboxwerten erstellen
            if self.settings.modeLine == enumModeLine.straightLine:
                profiles.append(
                    self.processFeature(None, 1, 1,
                                        self.settings.mapData.customLine))
                self.finished.emit(profiles, self.intersections)
                return

            #Line aus gezeichneter Linie erstellen
            if self.settings.modeLine == enumModeLine.customLine:
                profiles.append(
                    self.processFeature(None, 1, 1,
                                        self.settings.mapData.customLine))
                self.finished.emit(profiles, self.intersections)
                return

            #Shapefile Geometrien abarbeiten
            if self.settings.modeLine == enumModeLine.line:

                provider = self.settings.mapData.selectedLineLyr.line.dataProvider(
                )
                feats = []

                #Alle Attribute holen
                if QGis.QGIS_VERSION_INT < 10900:
                    provider.select(provider.attributeIndexes())

                if self.settings.onlySelectedFeatures is True:
                    feats = self.settings.mapData.selectedLineLyr.line.selectedFeatures(
                    )
                else:
                    if QGis.QGIS_VERSION_INT < 10900:
                        attrib_indices = provider.attributeIndexes()
                        provider.select(attrib_indices)
                        feat = QgsFeature()
                        while provider.nextFeature(feat):
                            feats.append(feat)
                            #neues Feature verwenden, weil sonst die Multiparts
                            #nicht als solche erkannt werden
                            feat = QgsFeature()
                    else:
                        #processing.getfeatures: This will iterate over all the features in the layer, in case there is no selection, or over the selected features otherwise.
                        #obviously not available with windows standalone installer
                        #features = processing.getfeatures(self.settings.mapData.selectedLineLyr.line)
                        features = self.settings.mapData.selectedLineLyr.line.getFeatures(
                        )
                        for feat in features:
                            feats.append(feat)

                feats, err_msg = self.util.prepareFeatures(
                    self.settings, provider, feats)

                if not err_msg is None:
                    #QMessageBox.critical(self.iface.mainWindow(), 'PREPARE ERROR', err_msg)
                    self.error.emit(err_msg)
                    self.finished.emit([], [])
                    return

                for feat in feats:
                    geom = feat.geometry()
                    if geom.isMultipart():
                        msg = QApplication.translate(
                            'code',
                            'Multipart Feature vorhanden! Option zum Explodieren verwenden.',
                            None, QApplication.UnicodeUTF8)
                        self.error.emit(msg)
                        self.finished.emit([], [])
                        return

                feat_cnt = len(feats)
                for idx, feat in enumerate(feats):
                    if self.stop is True:
                        profiles = []
                        break
                    if idx == 0 or idx % 5 == 0:
                        msg = 'Profil {0}/{1}'.format(idx + 1, feat_cnt)
                        self.progress.emit(msg)
                    profiles.append(
                        self.processFeature(
                            provider.fields(),
                            len(profiles) + 1,
                            self.settings.mapData.selectedLineLyr.line.id(),
                            feat))
                msg = 'Profil {0}/{1}'.format(idx + 1, feat_cnt)
                self.progress.emit(msg)

            self.finished.emit(profiles, self.intersections)
        except Exception, ex:
            self.error.emit(traceback.format_exc())
            self.finished.emit([], [])
class CreateProfile(QObject):

    def __init__(self, interface, settings):
        QObject.__init__(self)
        self.iface = interface
        self.settings = settings
        self.stop = False
        self.util = Util(self.iface)
        self.intersections = []


    def abort(self):
        self.stop = True


    finished = pyqtSignal(object, object)
    error = pyqtSignal(basestring)
    progress = pyqtSignal(basestring)


    def create(self):

        profiles = []

        try:
            #Line aus den Textboxwerten erstellen
            if self.settings.modeLine == enumModeLine.straightLine:
                profiles.append(self.processFeature(None,
                                                    1,
                                                    1,
                                                    self.settings.mapData.customLine
                                                    )
                                )
                self.finished.emit(profiles, self.intersections)
                return

            #Line aus gezeichneter Linie erstellen
            if self.settings.modeLine == enumModeLine.customLine:
                profiles.append(self.processFeature(None,
                                                    1,
                                                    1,
                                                    self.settings.mapData.customLine
                                                    )
                                )
                self.finished.emit(profiles, self.intersections)
                return

            #Shapefile Geometrien abarbeiten
            if self.settings.modeLine == enumModeLine.line:

                provider = self.settings.mapData.selectedLineLyr.line.dataProvider()
                feats = []

                #Alle Attribute holen
                if QGis.QGIS_VERSION_INT < 10900:
                    provider.select(provider.attributeIndexes())

                if self.settings.onlySelectedFeatures is True:
                    feats = self.settings.mapData.selectedLineLyr.line.selectedFeatures()
                else:
                    if QGis.QGIS_VERSION_INT < 10900:
                        attrib_indices = provider.attributeIndexes()
                        provider.select(attrib_indices)
                        feat = QgsFeature()
                        while provider.nextFeature(feat):
                            feats.append(feat)
                            #neues Feature verwenden, weil sonst die Multiparts
                            #nicht als solche erkannt werden
                            feat = QgsFeature()
                    else:
                        #processing.getfeatures: This will iterate over all the features in the layer, in case there is no selection, or over the selected features otherwise.
                        #obviously not available with windows standalone installer
                        #features = processing.getfeatures(self.settings.mapData.selectedLineLyr.line)
                        features = self.settings.mapData.selectedLineLyr.line.getFeatures()
                        for feat in features:
                            feats.append(feat)

                feats, err_msg = self.util.prepareFeatures(self.settings, provider, feats)

                if not err_msg is None:
                    #QMessageBox.critical(self.iface.mainWindow(), 'PREPARE ERROR', err_msg)
                    self.error.emit(err_msg)
                    self.finished.emit([], [])
                    return

                for feat in feats:
                    geom = feat.geometry()
                    if geom.isMultipart():
                        msg = QApplication.translate('code', 'Multipart Feature vorhanden! Option zum Explodieren verwenden.', None, QApplication.UnicodeUTF8)
                        self.error.emit(msg)
                        self.finished.emit([], [])
                        return

                feat_cnt = len(feats)
                for idx, feat in enumerate(feats):
                    if self.stop is True:
                        profiles = []
                        break
                    if idx == 0 or idx % 5 == 0:
                        msg = 'Profil {0}/{1}'.format(idx+1, feat_cnt)
                        self.progress.emit(msg)
                    profiles.append(self.processFeature(provider.fields(),
                                                        len(profiles) + 1,
                                                        self.settings.mapData.selectedLineLyr.line.id(),
                                                        feat
                                                        )
                                    )
                msg = 'Profil {0}/{1}'.format(idx+1, feat_cnt)
                self.progress.emit(msg)

            self.finished.emit(profiles, self.intersections)
        except Exception, ex:
            self.error.emit(traceback.format_exc())
            self.finished.emit([], [])