Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting / trunk / org.gvsig.scripting / org.gvsig.scripting.app / org.gvsig.scripting.app.mainplugin / src / main / resources-plugin / scripting / scripts / examples / vectorial_data / 03_maximun_and_minimun_elevation_geometries.py @ 462

History | View | Annotate | Download (3.24 KB)

1

    
2
import gvsig
3
import commonsdialog
4

    
5
from java.awt import Color
6

    
7
"""
8
Este script se recorre todas la features de la capa activa, y asumiendo
9
que tiene un campo ELEVATION, calcula la elevacion maxima y minima de 
10
estas, y con esto:
11
- Presentar un mensaje al usuario informando de cuales son
12
- Seleccionar las geometrias asociadas a la elevacion maxima y minima vista.
13
- Pone un punto en el centro de las geometrias de elevacion maxima y minima.
14

15
En la carpeta data puede encontrar la capa cv05_3d_polygons usada
16
para realizar las pruebas con este scripts.
17
"""
18

    
19
def main(): 
20
  """
21
  This script runs all the features of the active layer, and calculates the 
22
  maximum and minimum elevation these, and with this:
23
    - Shows a message informing the user which are
24
    - Select the geometries associated with maximum and minimum elevation. 
25
    - Shows maximum and minimum elevation geometries centroid in the view 
26
      graphicsLayer
27
  
28
  If no ELEVATION field shows a message and finish script execution.
29
  
30
  In the data folder can be found cv05_3d_polygons layer used
31
  for testing with this script.
32
  """
33
  #
34
  #Invoke gvsig.currentLayer function to get active layer
35
  #If not view or active layer in view raise RuntimeException
36
  layer = gvsig.currentLayer()
37
  
38
  #
39
  #Invoke layer.getSchema method to get layer definition data 
40
  schema = layer.getSchema()
41
  
42
  #
43
  #Invoke schema.get method to get ELEVATION field or None
44
  field = schema.get('ELEVATION', None)
45
  
46
  #
47
  #Check if field exist
48
  if not field:
49
      #If not shows message and finish
50
      text = '"ELEVATION" field must exist in the active layer.\nFinish script'
51
      title = "ERROR"
52
      message_type = commonsdialog.WARNING
53
      commonsdialog.msgbox(text, title, message_type)
54
      return
55
      
56
  acetato = gvsig.currentView().getGraphicsLayer()
57
  acetato.removeGraphics("example")
58
  smax = acetato.addSymbol(gvsig.SimplePointSymbol(Color.RED))
59
  smin = acetato.addSymbol(gvsig.SimplePointSymbol(Color.BLUE))
60
  
61
  emax = 0.0
62
  emin = 0.0
63
  fmax = None
64
  fmin = None
65

    
66
  #
67
  # Gets features using layer.features method
68
  features = layer.features()
69
  
70
  #
71
  #Runs layer features
72
  for feature in features:
73
    # 
74
    # Cheacks if current feature ELEVATION is higher than calculated. 
75
    # If so, stored current ELEVATION value and the feature instance
76
    if feature.ELEVATION > emax :
77
        emax = feature.ELEVATION
78
        fmax = feature.getCopy()
79
      
80
    # Same but with minimum ELEVATION
81
    if feature.ELEVATION < emin or emin ==0.0:
82
        emin = feature.ELEVATION
83
        fmin = feature.getCopy()
84
  #
85
  # Selects features in the layer.
86
  if fmax!=None:
87
    layer.select(fmax)
88
    #
89
    # gets geometry centroid to put our point with a label
90
    point = fmax.geometry().centroid()
91
    #
92
    # Adds to graphicsLayer the point and symbol with label
93
    acetato.addGraphic("example", point, smax, "Maximun Elevation")
94

    
95
  if fmin!=None:
96
    layer.getSelection().select(fmin)
97
    punto = fmax.geometry().centroid()
98
    acetato.addGraphic("example", punto, smin,"Minimun Elevation")
99

    
100
  #
101
  # Finally show results in a msgbox message.
102
  text = "Maximum Elevation=%s, Minumun Elevation=%s" % (emax, emin)
103
  title = "Maximun and minumum values"
104
  message_type = commonsdialog.IDEA
105
  
106
  commonsdialog.msgbox(text, title, message_type)
107