Codigo para Qgis
Publicado por francisco (2 intervenciones) el 07/09/2019 23:14:48
Buenas noches, estoy realizando un proyecto de implantación de plantas solares y me gustaría utilizar un script que calcularía la potencia máxima que podría implantar dentro de las zonas que finalmente he seleccionado.
Se supone que el script debería crear una capa en la cual quedarían reflejadas las placas que podrían montarse dentro del polígono y esto equivaldría a una potencia máxima. Pero resulta que el script me da error desde el principio.
A ver si alguno sabe donde puede estar el fallo.
Adjunto script.
La capa sería una poligonal en la que he calculado el área
Se supone que el script debería crear una capa en la cual quedarían reflejadas las placas que podrían montarse dentro del polígono y esto equivaldría a una potencia máxima. Pero resulta que el script me da error desde el principio.
A ver si alguno sabe donde puede estar el fallo.
Adjunto script.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
""" script dibujo rectangulos en n areas """
import math
#Valores de partida, se obtendran de BD?
ancho = 400
alto = 200
potencia = 100.0 #watios por placa
"""#Obtengo referencia a capa de placas donde se pintaran los rectangulos
lista = QgsMapLayerRegistry.instance().mapLayersByName("capaPlacas")
if lista:
capaPlacas = lista[0]
provider = capaPlacas.dataProvider()"""
#creo capa donde pintar rectangulos
capaPlacas = QgsVectorLayer('Polygon','capaPlacas',"memory")
provider = capaPlacas.dataProvider()
#Obtengo referencia a capa de areas en estudio
layerList = QgsMapLayerRegistry.instance().mapLayersByName("areaBase")
if layerList:
capaBase = layerList[0]
iter2 = capaBase.getFeatures() #capturo las distintas areas a calcular
for area in iter2:
#Extraer valores de coordenadas mas extremas para cada area
base = area.geometry()
base.asPolygon()
rectLimite = base.boundingBox() #rectangulo limitante
xmax = rectLimite.xMaximum()
xmin = rectLimite.xMinimum()
ymax = rectLimite.yMaximum()
ymin = rectLimite.yMinimum()
#print base.exportToWkt()
#print "extremos", xmax,xmin,ymax,ymin
#calculo valores de cuantos rectangulos pintar en este area
xdif = xmax-xmin
ydif = ymax-ymin
xcuantos = math.floor( xdif/ancho )
ycuantos = math.floor( ydif/alto )
#print "cuantos x " , xcuantos
#print "cuantos y " , ycuantos
totalPlacas = 0
#pintar rectangulos en otra capa dentro de los limites maximos definidos
for i in range(int(xcuantos)):
for j in range( int(ycuantos)):
punto1 = QgsPoint(xmin+i*ancho , ymin+j*alto )
punto2 = QgsPoint(xmin+i*ancho , ymin+j*alto+alto)
punto3 = QgsPoint(xmin+i*ancho+ancho, ymin+j*alto+alto)
punto4 = QgsPoint(xmin+i*ancho+ancho, ymin+j*alto)
puntos = [punto1,punto2,punto3,punto4]
poly = QgsFeature()
geome = QgsGeometry.fromPolygon([puntos])
poly.setGeometry(geome)
if base.contains(geome): #si la geometria esta dentro de la base se add a la capa
totalPlacas = totalPlacas + 1
provider.addFeatures([poly])
#muestro cuantas placas han entrado y la potencia conseguida para cada area.
cuantasPlacas = provider.featureCount()
potenciaTotal = cuantasPlacas * potencia / 1000 # kw totales
print " Cuantas placas : ",totalPlacas
print "Potencia Total: ",potenciaTotal," kw"
capaPlacas.updateExtents()
QgsMapLayerRegistry.instance().addMapLayers([capaPlacas])
La capa sería una poligonal en la que he calculado el área
Valora esta pregunta


0