mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-26 00:02:08 -05:00
75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
from sextante.core.GeoAlgorithm import GeoAlgorithm
|
|
import os.path
|
|
from PyQt4 import QtGui
|
|
from PyQt4.QtCore import *
|
|
from PyQt4.QtGui import *
|
|
from qgis.core import *
|
|
from sextante.parameters.ParameterVector import ParameterVector
|
|
from sextante.core.QGisLayers import QGisLayers
|
|
from sextante.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
|
|
from sextante.outputs.OutputVector import OutputVector
|
|
|
|
class LayerFromExtent(GeoAlgorithm):
|
|
|
|
INPUT = "INPUT"
|
|
OUTPUT = "OUTPUT"
|
|
|
|
def getIcon(self):
|
|
return QtGui.QIcon(os.path.dirname(__file__) + "/icons/layer_extent.png")
|
|
|
|
def processAlgorithm(self, progress):
|
|
vlayer = QGisLayers.getObjectFromUri(self.getParameterValue(LayerFromExtent.INPUT))
|
|
fields = {
|
|
0 : QgsField( "MINX", QVariant.Double ),
|
|
1 : QgsField( "MINY", QVariant.Double ),
|
|
2 : QgsField( "MAXX", QVariant.Double ),
|
|
3 : QgsField( "MAXY", QVariant.Double ),
|
|
4 : QgsField( "CNTX", QVariant.Double ),
|
|
5 : QgsField( "CNTY", QVariant.Double ),
|
|
6 : QgsField( "AREA", QVariant.Double ),
|
|
7 : QgsField( "PERIM", QVariant.Double ),
|
|
8 : QgsField( "HEIGHT", QVariant.Double ),
|
|
9 : QgsField( "WIDTH", QVariant.Double ) }
|
|
|
|
writer = self.getOutputFromName(LayerFromExtent.OUTPUT).getVectorWriter(fields, QGis.WKBPolygon, self.vlayer.crs() )
|
|
rect = vlayer.extent()
|
|
minx = rect.xMinimum()
|
|
miny = rect.yMinimum()
|
|
maxx = rect.xMaximum()
|
|
maxy = rect.yMaximum()
|
|
height = rect.height()
|
|
width = rect.width()
|
|
cntx = minx + ( width / 2.0 )
|
|
cnty = miny + ( height / 2.0 )
|
|
area = width * height
|
|
perim = ( 2 * width ) + (2 * height )
|
|
rect = [
|
|
QgsPoint( minx, miny ),
|
|
QgsPoint( minx, maxy ),
|
|
QgsPoint( maxx, maxy ),
|
|
QgsPoint( maxx, miny ),
|
|
QgsPoint( minx, miny ) ]
|
|
geometry = QgsGeometry().fromPolygon( [ rect ] )
|
|
feat = QgsFeature()
|
|
feat.setGeometry( geometry )
|
|
feat.setAttributeMap( {
|
|
0 : QVariant( minx ),
|
|
1 : QVariant( miny ),
|
|
2 : QVariant( maxx ),
|
|
3 : QVariant( maxy ),
|
|
4 : QVariant( cntx ),
|
|
5 : QVariant( cnty ),
|
|
6 : QVariant( area ),
|
|
7 : QVariant( perim ),
|
|
8 : QVariant( height ),
|
|
9 : QVariant( width ) } )
|
|
writer.addFeature( feat )
|
|
del writer
|
|
|
|
def defineCharacteristics(self):
|
|
self.name = "Layer from layer extent"
|
|
self.group = "Geometry tools"
|
|
self.addParameter(ParameterVector(LayerFromExtent.INPUT, "Input layer", ParameterVector.VECTOR_TYPE_ANY))
|
|
self.addOutput(OutputVector(LayerFromExtent.OUTPUT, "Output layer"))
|
|
#=========================================================
|