add_geometry_info.py

Vicent Domenech, 11/08/2012 09:16 AM

Download (2.21 KB)

 
1

    
2
from gvsig import *
3
from geom import *
4

    
5
def main():
6

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

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

    
43

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

    
52
  layer.updateSchema(schema)
53

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

    
60
    layer.update(feature)
61

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

    
68
  layer.updateSchema(schema)
69

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

    
75
    layer.update(feature)
76
    
77
  layer.commit() 
78

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