Statistics
| Revision:

gvsig-scripting / org.gvsig.scripting.app / trunk / org.gvsig.scripting.app / org.gvsig.scripting.app.extension / src / main / resources / scripting / scripts / add geometry info.py @ 384

History | View | Annotate | Download (2.3 KB)

1
from gvsig import currentLayer
2
from geom import POINT, LINE, POLIGON
3
from commonsdialog import msgbox
4

    
5
def main():
6

    
7
  layer = currentLayer()
8
  
9
  layertype = layer.getTypeVectorLayer()
10
  if layertype.isSubTypeOf(POINT):
11
    addToPoint(layer)
12
  elif layertype.isSubTypeOf(LINE):
13
    addToLine(layer)
14
  elif layertype.isSubTypeOf(POLIGON):
15
    addToPolygon(layer)
16
  else:
17
    msgbox("Tipo de capa no soportado")
18
    
19
def addToPoint(layer):
20
  layer.edit()
21
  schema = layer.getSchema()
22
  xName=generateUniqColumnName(schema,"X")
23
  schema.append(xName, "Double", size=15, precision = 3)
24
  yName=generateUniqColumnName(schema,"Y")
25
  schema.append(yName, "Double", size=15, precision = 3)
26
  zName=generateUniqColumnName(schema,"Z")
27
  schema.append(zName, "Double", size=15, precision = 3)
28
  layer.updateSchema(schema)
29

    
30
  for feature in layer.features():
31
    feature.edit()
32
    point = feature.geometry()
33
    feature.set(xName,point.getX())
34
    feature.set(yName,point.getY())
35
    if point.getDimension()>2:
36
      feature.set(zName,point.getCoordinateAt(2))
37
    layer.update(feature)
38
    
39
  layer.commit() 
40

    
41

    
42
def addToPolygon(layer):
43
  layer.edit()
44
  schema = layer.getSchema()
45
  areaName=generateUniqColumnName(schema,"Area")
46
  schema.append(areaName, "Double", size=15, precision = 3)
47
  perimeterName=generateUniqColumnName(schema,"Perimetro")
48
  schema.append(perimeterName, "Double", size=15, precision = 3)
49

    
50
  layer.updateSchema(schema)
51

    
52
  for feature in layer.features():
53
    feature.edit()
54
    polygon = feature.geometry()
55
    feature.set(areaName,polygon.area())
56
    feature.set(perimeterName,polygon.perimeter())
57

    
58
    layer.update(feature)
59

    
60
def addToLine(layer):
61
  layer.edit()
62
  schema = layer.getSchema()
63
  perimeterName=generateUniqColumnName(schema,"Perimetro")
64
  schema.append(perimeterName, "Double", size=15, precision = 3)
65

    
66
  layer.updateSchema(schema)
67

    
68
  for feature in layer.features():
69
    feature.edit()
70
    line = feature.geometry()
71
    feature.set(perimeterName,line.perimeter())
72

    
73
    layer.update(feature)
74
    
75
  layer.commit() 
76

    
77
def generateUniqColumnName(schema, name):
78
   contador = 1
79
   name2 = name
80
   while True:
81
     attr = schema.get(name2)
82
     if attr == None:
83
       return name2
84
     contador += 1
85
     name2 = "%s%s" % (name , contador)
86