Example #1
0
    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)
        locale = QSettings().value("locale/userLocale")[0:2]
        localePath = os.path.join(self.plugin_dir, 'i18n',
                                  'nvdb_{}.qm'.format(locale))

        if os.path.exists(localePath):
            self.translator = QTranslator()
            self.translator.load(localePath)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        self.dlg = NvdbDialog()
Example #2
0
    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)
        locale = QSettings().value("locale/userLocale")[0:2]
        localePath = os.path.join(self.plugin_dir, 'i18n', 'nvdb_{}.qm'.format(locale))

        if os.path.exists(localePath):
            self.translator = QTranslator()
            self.translator.load(localePath)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        self.dlg = NvdbDialog()
Example #3
0
class Nvdb:

    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)
        locale = QSettings().value("locale/userLocale")[0:2]
        localePath = os.path.join(self.plugin_dir, 'i18n', 'nvdb_{}.qm'.format(locale))

        if os.path.exists(localePath):
            self.translator = QTranslator()
            self.translator.load(localePath)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        self.dlg = NvdbDialog()

    def initGui(self):
        # Create action that will start plugin configuration
        self.action = QAction(
            QIcon(":/plugins/nvdb/icon.png"),
            u"NVDB Plugin", self.iface.mainWindow())
        # connect the action to the run method
        self.action.triggered.connect(self.run)

        # Add toolbar button and menu item
        self.iface.addToolBarIcon(self.action)
        self.iface.addPluginToMenu(u"&NVDB Plugin", self.action)
        
        # Startverdier
        self.objekttype = 0
        self.fylke = 0
        self.kommune = 0
        
        self.init_objekttyper()
        self.init_omrader()
        
        # Legg til actions
        self.dlg.ui.comboBoxObjekttype.currentIndexChanged[str].connect(self.velg_objekttype)
        self.dlg.ui.comboBoxFylke.currentIndexChanged[str].connect(self.velg_fylke)
        self.dlg.ui.comboBoxKommune.currentIndexChanged[str].connect(self.velg_kommune)
        self.dlg.ui.pushButton.clicked.connect(self.leggtil_lag)


    def velg_objekttype(self, navn):
        # Setter aktiv objekttypeid
        
        if navn == 'Vegnett':
            self.objekttype = 0
        else:
            self.objekttype = self.objekttyper[navn]

    def velg_fylke(self, navn):
        # Setter aktivt fylkesnummer og oppretter tilhørende kommuneliste
    
        if navn == 'Hele Norge':
            self.fylke = 0
            self.dlg.ui.comboBoxKommune.clear()
            self.dlg.ui.comboBoxKommune.addItem('Velg fylke')
        else: 
            self.fylke = self.fylker[navn]
            self.dlg.ui.comboBoxKommune.clear()
            self.dlg.ui.comboBoxKommune.addItem('Hele fylket')
            
            for kommune in sorted(self.kommuner[self.fylke]):
                self.dlg.ui.comboBoxKommune.addItem(kommune)

    def velg_kommune(self, navn):
        # Setter aktivt kommunenummer
        
        if navn == 'Hele fylket' or navn == 'Velg fylke' or navn == '':
            self.kommune = 0
        else:
            self.kommune = self.kommuner[self.fylke][navn]
            

    def leggtil_lag(self):
        # Legger til nytt vektorlag
    
        vegkategorier = []
        if self.dlg.ui.E.isChecked():
            vegkategorier.append('E')
        if self.dlg.ui.R.isChecked():
            vegkategorier.append('R')
        if self.dlg.ui.F.isChecked():
            vegkategorier.append('F')
        if self.dlg.ui.K.isChecked():
            vegkategorier.append('K')
        if self.dlg.ui.P.isChecked():
            vegkategorier.append('P')
        if self.dlg.ui.S.isChecked():
            vegkategorier.append('S')
            
        if not vegkategorier:
            print 'Ingen vegkategorier valgt'
            return
        vegkategori = ''.join(vegkategorier)
        
        navn = 'Norge'    
        if self.fylke != 0:
            navn = self.dlg.ui.comboBoxFylke.itemText(self.dlg.ui.comboBoxFylke.currentIndex())
            if self.kommune != 0:
                navn = self.dlg.ui.comboBoxKommune.itemText(self.dlg.ui.comboBoxKommune.currentIndex())
        navn += ' ('+vegkategori+')'

        if self.objekttype != 0:
            navn = self.dlg.ui.comboBoxObjekttype.itemText(self.dlg.ui.comboBoxObjekttype.currentIndex())+' '+navn
            
            sokobjekt = {}
            sokobjekt['objektTyper'] = [{
                'id': self.objekttype, 
                'antall': 20000, 
                'filter': [{
                    'type': 'vegreferanse',
                    'operator': '=',
                    'verdi': vegkategorier
                }]
            }]

            if self.fylke != 0:
                sokobjekt['lokasjon'] = {}
                if self.kommune != 0:
                    kommune = self.fylke*100 + self.kommune
                    sokobjekt['lokasjon']['kommune'] = [kommune]
                else:
                    sokobjekt['lokasjon']['fylke'] = [self.fylke]
            
            sok = query('/sok', {'kriterie': json.dumps(sokobjekt)})
            objekter = sok['resultater'][0]['vegObjekter']
            
            self.init_geojson()
            for objekt in objekter:
                self.leggtil_geojson(objekt)
            
            data = json.dumps(self.geojson)
            
        else:
            navn = 'Vegnett '+navn
            
            sted = ''
            if self.fylke != 0:
                sted += '/'+str(self.fylke)
                if self.kommune != 0:
                    sted += '/'+str(self.kommune)
            
            path = '/vegnett'+sted+'.json?kategori='+vegkategori          
            vegnett = query(path)
            data = json.dumps(vegnett)
            

        # Registrerer lag i QGIS
        lag = QgsVectorLayer(data, navn, 'ogr')
        QgsMapLayerRegistry.instance().addMapLayer(lag)


    def init_objekttyper(self):
        self.objekttyper = {}
  
        objekttyper = query("/datakatalog/objekttyper")
        for objekttype in objekttyper['vegObjektTyper']:
            self.objekttyper[objekttype['navn']] = objekttype['id']
        for objekttype in sorted(self.objekttyper):
            self.dlg.ui.comboBoxObjekttype.addItem(objekttype)


    def init_omrader(self):
        self.fylker = {}
        
        fylker = query("/omrader/fylker")
        for fylke in fylker['fylker']:
            self.dlg.ui.comboBoxFylke.addItem(fylke['navn'])
            self.fylker[fylke['navn']] = fylke['nummer']
        
        self.kommuner = {}
        for tall in range(1, 21):
            self.kommuner[tall] = {}
        
        kommuner = query("/omrader/kommuner")
        for kommune in kommuner['kommuner']:
            if kommune['nummer'] < 1000:
                fylkesnr = int(str(kommune['nummer'])[:1])
                kommunenr = int(str(kommune['nummer'])[1:])
            else: 
                fylkesnr = int(str(kommune['nummer'])[:2])
                kommunenr = int(str(kommune['nummer'])[2:])
            
            self.kommuner[fylkesnr][kommune['navn']] = kommunenr
            
    def init_geojson(self):
    
        self.geojson = {}
        self.geojson['type'] = 'FeatureCollection'
        self.geojson['crs'] = {}
        self.geojson['crs']['type'] = 'name'
        self.geojson['crs']['properties'] = {}
        self.geojson['crs']['properties']['name'] = 'urn:ogc:def:crs:EPSG::32633'
        self.geojson['features'] = []

    def leggtil_geojson(self, objekt):
        rad = {}
        rad['type'] = 'Feature'
        rad['geometry'] = {}
        rad['geometry']['coordinates'] = []
        
        try:
            geometri = objekt['lokasjon']['geometriUtm33']
        except KeyError:
            pass
        else: 
            if 'MULTILINESTRING' in geometri:
                rad['geometry']['type'] = 'MultiLineString'          
                koordinatsett = geometri.strip('MULTILINESTRING ()')
                koordinatsett = koordinatsett.split('), (')
                for koordinater in koordinatsett:
                    koordinatrad = []
                    koordinater = koordinater.split(', ')
                    for koordinat_x in koordinater:
                        koordinater_y = koordinat_x.split(' ')
                        koordinat = []
                        for koordinat_y in koordinater_y:
                            koordinat.append(float(koordinat_y))
                        koordinatrad.append(koordinat)
                    rad['geometry']['coordinates'].append(koordinatrad)

            elif 'LINESTRING' in geometri:
                rad['geometry']['type'] = 'LineString'
                koordinater = geometri.strip('LINESTRING ()')
                koordinater = koordinater.split(', ')
                for koordinat_x in koordinater:
                    koordinater_y = koordinat_x.split(' ')
                    koordinat = []
                    for koordinat_y in koordinater_y:
                        koordinat.append(float(koordinat_y))
                    rad['geometry']['coordinates'].append(koordinat)

            elif 'POINT' in geometri:
                rad['geometry']['type'] = 'Point'
                koordinater = geometri.strip('POINT ()')
                koordinater = koordinater.split(' ')
                for koordinat in koordinater:
                    rad['geometry']['coordinates'].append(float(koordinat))
             
        rad['properties'] = {}
        try: 
            for egenskap in objekt['egenskaper']:
                rad['properties'][egenskap['navn']] = egenskap['verdi']
        except KeyError:
            pass
        
        rad['properties']['Objektid'] = objekt['objektId']
        
        try:
            rad['properties']['Strekningslengde'] = objekt['strekningslengde']
        except KeyError:
            pass
            
        self.geojson['features'].append(rad)
               
        
        
    def unload(self):
        self.iface.removePluginMenu(u"&NVDB Plugin", self.action)
        self.iface.removeToolBarIcon(self.action)


    def run(self):
        self.dlg.show()
        result = self.dlg.exec_()
        if result == 1:
            pass
Example #4
0
class Nvdb:
    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)
        locale = QSettings().value("locale/userLocale")[0:2]
        localePath = os.path.join(self.plugin_dir, 'i18n',
                                  'nvdb_{}.qm'.format(locale))

        if os.path.exists(localePath):
            self.translator = QTranslator()
            self.translator.load(localePath)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        self.dlg = NvdbDialog()

    def initGui(self):
        # Create action that will start plugin configuration
        self.action = QAction(QIcon(":/plugins/nvdb/icon.png"), u"NVDB Plugin",
                              self.iface.mainWindow())
        # connect the action to the run method
        self.action.triggered.connect(self.run)

        # Add toolbar button and menu item
        self.iface.addToolBarIcon(self.action)
        self.iface.addPluginToMenu(u"&NVDB Plugin", self.action)

        # Startverdier
        self.objekttype = 0
        self.fylke = 0
        self.kommune = 0

        self.init_objekttyper()
        self.init_omrader()

        # Legg til actions
        self.dlg.ui.comboBoxObjekttype.currentIndexChanged[str].connect(
            self.velg_objekttype)
        self.dlg.ui.comboBoxFylke.currentIndexChanged[str].connect(
            self.velg_fylke)
        self.dlg.ui.comboBoxKommune.currentIndexChanged[str].connect(
            self.velg_kommune)
        self.dlg.ui.pushButton.clicked.connect(self.leggtil_lag)

    def velg_objekttype(self, navn):
        # Setter aktiv objekttypeid

        if navn == 'Vegnett':
            self.objekttype = 0
        else:
            self.objekttype = self.objekttyper[navn]

    def velg_fylke(self, navn):
        # Setter aktivt fylkesnummer og oppretter tilhørende kommuneliste

        if navn == 'Hele Norge':
            self.fylke = 0
            self.dlg.ui.comboBoxKommune.clear()
            self.dlg.ui.comboBoxKommune.addItem('Velg fylke')
        else:
            self.fylke = self.fylker[navn]
            self.dlg.ui.comboBoxKommune.clear()
            self.dlg.ui.comboBoxKommune.addItem('Hele fylket')

            for kommune in sorted(self.kommuner[self.fylke]):
                self.dlg.ui.comboBoxKommune.addItem(kommune)

    def velg_kommune(self, navn):
        # Setter aktivt kommunenummer

        if navn == 'Hele fylket' or navn == 'Velg fylke' or navn == '':
            self.kommune = 0
        else:
            self.kommune = self.kommuner[self.fylke][navn]

    def leggtil_lag(self):
        # Legger til nytt vektorlag

        vegkategorier = []
        if self.dlg.ui.E.isChecked():
            vegkategorier.append('E')
        if self.dlg.ui.R.isChecked():
            vegkategorier.append('R')
        if self.dlg.ui.F.isChecked():
            vegkategorier.append('F')
        if self.dlg.ui.K.isChecked():
            vegkategorier.append('K')
        if self.dlg.ui.P.isChecked():
            vegkategorier.append('P')
        if self.dlg.ui.S.isChecked():
            vegkategorier.append('S')

        if not vegkategorier:
            print 'Ingen vegkategorier valgt'
            return
        vegkategori = ''.join(vegkategorier)

        navn = 'Norge'
        if self.fylke != 0:
            navn = self.dlg.ui.comboBoxFylke.itemText(
                self.dlg.ui.comboBoxFylke.currentIndex())
            if self.kommune != 0:
                navn = self.dlg.ui.comboBoxKommune.itemText(
                    self.dlg.ui.comboBoxKommune.currentIndex())
        navn += ' (' + vegkategori + ')'

        if self.objekttype != 0:
            navn = self.dlg.ui.comboBoxObjekttype.itemText(
                self.dlg.ui.comboBoxObjekttype.currentIndex()) + ' ' + navn

            sokobjekt = {}
            sokobjekt['objektTyper'] = [{
                'id':
                self.objekttype,
                'antall':
                20000,
                'filter': [{
                    'type': 'vegreferanse',
                    'operator': '=',
                    'verdi': vegkategorier
                }]
            }]

            if self.fylke != 0:
                sokobjekt['lokasjon'] = {}
                if self.kommune != 0:
                    kommune = self.fylke * 100 + self.kommune
                    sokobjekt['lokasjon']['kommune'] = [kommune]
                else:
                    sokobjekt['lokasjon']['fylke'] = [self.fylke]

            sok = query('/sok', {'kriterie': json.dumps(sokobjekt)})
            objekter = sok['resultater'][0]['vegObjekter']

            self.init_geojson()
            for objekt in objekter:
                self.leggtil_geojson(objekt)

            data = json.dumps(self.geojson)

        else:
            navn = 'Vegnett ' + navn

            sted = ''
            if self.fylke != 0:
                sted += '/' + str(self.fylke)
                if self.kommune != 0:
                    sted += '/' + str(self.kommune)

            path = '/vegnett' + sted + '.json?kategori=' + vegkategori
            vegnett = query(path)
            data = json.dumps(vegnett)

        # Registrerer lag i QGIS
        lag = QgsVectorLayer(data, navn, 'ogr')
        QgsMapLayerRegistry.instance().addMapLayer(lag)

    def init_objekttyper(self):
        self.objekttyper = {}

        objekttyper = query("/datakatalog/objekttyper")
        for objekttype in objekttyper['vegObjektTyper']:
            self.objekttyper[objekttype['navn']] = objekttype['id']
        for objekttype in sorted(self.objekttyper):
            self.dlg.ui.comboBoxObjekttype.addItem(objekttype)

    def init_omrader(self):
        self.fylker = {}

        fylker = query("/omrader/fylker")
        for fylke in fylker['fylker']:
            self.dlg.ui.comboBoxFylke.addItem(fylke['navn'])
            self.fylker[fylke['navn']] = fylke['nummer']

        self.kommuner = {}
        for tall in range(1, 21):
            self.kommuner[tall] = {}

        kommuner = query("/omrader/kommuner")
        for kommune in kommuner['kommuner']:
            if kommune['nummer'] < 1000:
                fylkesnr = int(str(kommune['nummer'])[:1])
                kommunenr = int(str(kommune['nummer'])[1:])
            else:
                fylkesnr = int(str(kommune['nummer'])[:2])
                kommunenr = int(str(kommune['nummer'])[2:])

            self.kommuner[fylkesnr][kommune['navn']] = kommunenr

    def init_geojson(self):

        self.geojson = {}
        self.geojson['type'] = 'FeatureCollection'
        self.geojson['crs'] = {}
        self.geojson['crs']['type'] = 'name'
        self.geojson['crs']['properties'] = {}
        self.geojson['crs']['properties'][
            'name'] = 'urn:ogc:def:crs:EPSG::32633'
        self.geojson['features'] = []

    def leggtil_geojson(self, objekt):
        rad = {}
        rad['type'] = 'Feature'
        rad['geometry'] = {}
        rad['geometry']['coordinates'] = []

        try:
            geometri = objekt['lokasjon']['geometriUtm33']
        except KeyError:
            pass
        else:
            if 'MULTILINESTRING' in geometri:
                rad['geometry']['type'] = 'MultiLineString'
                koordinatsett = geometri.strip('MULTILINESTRING ()')
                koordinatsett = koordinatsett.split('), (')
                for koordinater in koordinatsett:
                    koordinatrad = []
                    koordinater = koordinater.split(', ')
                    for koordinat_x in koordinater:
                        koordinater_y = koordinat_x.split(' ')
                        koordinat = []
                        for koordinat_y in koordinater_y:
                            koordinat.append(float(koordinat_y))
                        koordinatrad.append(koordinat)
                    rad['geometry']['coordinates'].append(koordinatrad)

            elif 'LINESTRING' in geometri:
                rad['geometry']['type'] = 'LineString'
                koordinater = geometri.strip('LINESTRING ()')
                koordinater = koordinater.split(', ')
                for koordinat_x in koordinater:
                    koordinater_y = koordinat_x.split(' ')
                    koordinat = []
                    for koordinat_y in koordinater_y:
                        koordinat.append(float(koordinat_y))
                    rad['geometry']['coordinates'].append(koordinat)

            elif 'POINT' in geometri:
                rad['geometry']['type'] = 'Point'
                koordinater = geometri.strip('POINT ()')
                koordinater = koordinater.split(' ')
                for koordinat in koordinater:
                    rad['geometry']['coordinates'].append(float(koordinat))

        rad['properties'] = {}
        try:
            for egenskap in objekt['egenskaper']:
                rad['properties'][egenskap['navn']] = egenskap['verdi']
        except KeyError:
            pass

        rad['properties']['Objektid'] = objekt['objektId']

        try:
            rad['properties']['Strekningslengde'] = objekt['strekningslengde']
        except KeyError:
            pass

        self.geojson['features'].append(rad)

    def unload(self):
        self.iface.removePluginMenu(u"&NVDB Plugin", self.action)
        self.iface.removeToolBarIcon(self.action)

    def run(self):
        self.dlg.show()
        result = self.dlg.exec_()
        if result == 1:
            pass