# -*- coding: utf-8 -*- """ /*************************************************************************** EOLF_Landuse A QGIS plugin Extracting land use data for an area around a wind farm ------------------- begin : 2014-11-22 git sha : $Format:%H$ copyright : (C) 2014 by Aurélie GUEGAN email : aurelie.guegan.15@gmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ """ from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication from PyQt4.QtGui import QAction, QIcon #from qgis.core import * # Initialize Qt resources from file resources.py import resources_rc # Import the code for the dialog from EOLF_Landuse_dialog import EOLF_LanduseDialog from EOLF_Landuse_dialog_base import Ui_EOLF_LanduseDialogBase from SysRef import Ui_sysRefSpatial import os.path import pyproj class EOLF_Landuse: """QGIS Plugin Implementation.""" def __init__(self, iface): """Constructor. :param iface: An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. :type iface: QgsInterface """ # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join( self.plugin_dir, 'i18n', 'EOLF_Landuse_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.ui = Ui_EOLF_LanduseDialogBase() # Declare instance attributes self.actions = [] self.menu = self.tr(u'&EOLF_Landuse') # TODO: We are going to let the user set this up in a future iteration self.toolbar = self.iface.addToolBar(u'EOLF_Landuse') self.toolbar.setObjectName(u'EOLF_Landuse') #init variable self.row_point = [] self.table_point = {} # noinspection PyMethodMayBeStatic def tr(self, message): """Get the translation for a string using Qt translation API. We implement this ourselves since we do not inherit QObject. :param message: String for translation. :type message: str, QString :returns: Translated version of message. :rtype: QString """ # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate('EOLF_Landuse', message) def add_action( self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): """Add a toolbar icon to the toolbar. :param icon_path: Path to the icon for this action. Can be a resource path (e.g. ':/plugins/foo/bar.png') or a normal file system path. :type icon_path: str :param text: Text that should be shown in menu items for this action. :type text: str :param callback: Function to be called when the action is triggered. :type callback: function :param enabled_flag: A flag indicating if the action should be enabled by default. Defaults to True. :type enabled_flag: bool :param add_to_menu: Flag indicating whether the action should also be added to the menu. Defaults to True. :type add_to_menu: bool :param add_to_toolbar: Flag indicating whether the action should also be added to the toolbar. Defaults to True. :type add_to_toolbar: bool :param status_tip: Optional text to show in a popup when mouse pointer hovers over the action. :type status_tip: str :param parent: Parent widget for the new action. Defaults None. :type parent: QWidget :param whats_this: Optional text to show in the status bar when the mouse pointer hovers over the action. :returns: The action that was created. Note that the action is also added to self.actions list. :rtype: QAction """ icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToMenu( self.menu, action) self.actions.append(action) return action def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = ':/plugins/EOLF_Landuse/icon.png' self.add_action( icon_path, text=self.tr(u'EOLF Landuse'), callback=self.run, parent=self.iface.mainWindow()) def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removePluginMenu( self.tr(u'&EOLF_Landuse'), action) self.iface.removeToolBarIcon(action) def run(self): """Run method that performs all the real work""" # show the dialog self.ui.show() # Run the dialog event loop #result = self.ui.exec_() # See if OK was pressed # if result: # Do something useful here - delete the line containing pass and # substitute with your code. #pass #shp self.ui.btn_load.clicked.connect(self.on_load_clicked) #point self.ui.bnt_epsg.clicked.connect(self.on_epsg_clicked) self.ui.bnt_loadXY.clicked.connect(self.convXY) def on_load_clicked (self): """Load shapefile""" EOLF_map = QgsMapLayerRegistry.instance() layer = QgsVectorLayer(self.ui.cpathf, "layer_eolf", "ogr") if layer.isValid(): EOLF_map.addMapLayer(layer) else: Qt.QtGui.QMessageBox.warning("Error Layer","Layer invalid. \n Please browse an other file") self.ui.lnE_Browse.clear def on_epsg_clicked(self): """Display the ref to chose""" self.ui_ref= Ui_sysRefSpatial() self.ui_ref.show() def convXY(self): """Convert the coordinates in WGS84""" self.idx1 = self.ui_ref.gpBtn_1 print 'self.idx1',self.idx1 self.wgs84 = pyproj.Proj('+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs') for row in range(self.ui.tableWidget_xy.rowCount()): self.idx= str(row) if self.ui.box.checkState: self.x1 =int(self.ui.tableWidget_xy.item(row, 1).text()) self.y1=int(self.ui.tableWidget_xy.item(row, 2).text()) print 'self.x1', self.x1 , 'self.y1', self.y1 if self.ui_ref.gpBtn_1 ==1: print 'id 1' self.LamII=pyproj.Proj('+proj=lcc +nadgrids=ntf_r93.gsb,null +wktext +towgs84=-168.0000,-60.0000,320.0000 +a=6378249.2000 +rf=293.4660210000000 +pm=2.337229167 +lat_0=46.800000000 +lon_0=0.000000000 +k_0=0.99987742 +lat_1=46.800000000 +x_0=600000.000 +y_0=2200000.000 +units=m +no_defs') self.lat,self.lg=LamII(self.x1,self.y1) self.x2,self.y2= pyproj.transform(self.LamII,self.wgs84,self.lat,self.lg,radians=True) if self.ui_ref.gpBtn_1 ==2: print 'id 2' self.Lam93=pyproj.Proj('+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs') self.lat,self.lg=Lam93(self.x1,self.y1) self.x2,self.y2= pyproj.transform(self.Lam93,self.wgs84,self.lat,self.lg,radians=True) if self.ui_ref.gpBtn_1 ==3: print 'id 3' pass if self.ui_ref.gpBtn_1 ==4: print 'id 4' QMessageBox.information(self, 'Message',"This referentiel is invalid. Please chose a other.") print 'self.x2', self.x2 , 'self.y2', self.y2 # creaPoint(self.x2, self.y2, self.idx) def creaPoint(self, x2,y2, idx): """Create and display the point""" #init the coordinates self.pt_x = x2 self.pt_y = y2 self.nameLayer =idx #init of the layer self.nom = 'Layer_%s'%(self.nameLayer) self.type="Point" self.layer = QgsVectorLayer(self.type, self.nom , "memory") self.pr = self.couche.dataProvider() #Make a point features self.pt =QgsFeature() #Make the point self.point =QgsPoint(x2,y2); #Add the feature self.pt.setGeometry(QgsGeometry.fromPoint(self.point)) self.pr.addFeatures([self.pt]) self.Layer.updateExtents() #Display QgsMapLayerRegistry.instance().addMapLayers([self.layer]) #EOLF_map.removeAllMapLayers()