Python - Codigo para Qgis

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

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.
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 3
Ha disminuido su posición en 20 puestos en Python (en relación al último mes)
Gráfica de Python

Codigo para Qgis

Publicado por francisco (2 intervenciones) el 08/09/2019 10:42:50
Adjunto archivos por si alguien quiere hacer la prueba o comprobar algo. (Van las capas y el codigo.py)
Muchas gracias.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar