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 |
|