Revision 362 org.gvsig.scripting.app/trunk/org.gvsig.scripting.app/org.gvsig.scripting.app.extension/src/main/resources/scripting/lib/gvsig.py
gvsig.py | ||
---|---|---|
25 | 25 |
|
26 | 26 |
__author__ = """Antonio Carrasco Valero |
27 | 27 |
Model Driven Development sl and Antonio Carrasco Valero |
28 |
<carrasco@modeldd.org>""" |
|
28 |
<carrasco@modeldd.org> |
|
29 |
Victor Acevedo Royer <vacevedor@gmail.com> |
|
30 |
""" |
|
31 |
|
|
29 | 32 |
__docformat__ = 'plaintext' |
30 | 33 |
|
31 | 34 |
|
32 |
from org.gvsig.fmap.mapcontext import MapContextLocator |
|
33 |
|
|
34 | 35 |
from java.lang import RuntimeException |
35 | 36 |
from java.lang import Throwable |
36 | 37 |
|
37 | 38 |
from org.gvsig.app import ApplicationLocator |
39 |
from org.gvsig.app.project.documents.view import ViewDocument |
|
38 | 40 |
|
39 |
from org.gvsig.fmap.dal import DALLocator |
|
40 |
from org.gvsig.fmap.dal import DataTypes |
|
41 |
from org.gvsig.fmap.geom import Geometry |
|
41 |
from org.gvsig.fmap.mapcontext import MapContextLocator |
|
42 |
from org.gvsig.fmap.mapcontext.layers import FLayers |
|
43 |
from org.gvsig.fmap.dal import DALLocator, DataTypes |
|
44 |
from org.gvsig.fmap.dal.feature import EditableFeature, EditableFeatureType |
|
45 |
#from org.gvsig.fmap.geom import Geometry, GeometryLocator |
|
42 | 46 |
|
43 | 47 |
from org.gvsig.tools import ToolsLocator |
44 | 48 |
|
45 |
from org.gvsig.fmap.geom import DataTypes
|
|
49 |
from geom import *
|
|
46 | 50 |
|
47 | 51 |
import thread |
48 | 52 |
|
53 |
|
|
54 |
|
|
55 |
""" |
|
56 |
ARRAY, BOOLEAN, BYTE, BYTEARRAY, CHAR, CONTAINER, DATE, DOUBLE, DYNOBJECT, FILE, |
|
57 |
FLOAT, FOLDER, INT, INVALID, LIST, LONG, MAP, MAX_TYPE_VALUE, OBJECT, SET, |
|
58 |
STRING, SUBTYPE_DATE, SUBTYPE_FILE, SUBTYPE_FOLDER, TIME, TIMESTAMP, UNKNOWN, |
|
59 |
URI, URL |
|
60 |
""" |
|
61 |
|
|
49 | 62 |
def runTask(name, function, *args): |
50 | 63 |
manager = ToolsLocator.getTaskStatusManager() |
51 | 64 |
status = manager.createDefaultSimpleTaskStatus(name) |
... | ... | |
61 | 74 |
|
62 | 75 |
|
63 | 76 |
class WrapperToJava(object): |
77 |
""" |
|
78 |
Create a wrapper that allows python object access to the Java object |
|
79 |
properties and methods |
|
80 |
""" |
|
64 | 81 |
def __init__(self, javaobj): |
65 | 82 |
if javaobj == None: |
66 | 83 |
raise RuntimeException("Can't create "+ self.__class__.__name__) |
... | ... | |
73 | 90 |
return getattr(self._javaobj,name) |
74 | 91 |
|
75 | 92 |
class Project(WrapperToJava): |
76 |
def __init__(self,project): |
|
77 |
WrapperToJava.__init__(self,project) |
|
78 |
|
|
93 |
""" |
|
94 |
Represents a gvSIG project |
|
95 |
""" |
|
96 |
def __init__(self, project): |
|
97 |
WrapperToJava.__init__(self, project) |
|
98 |
|
|
79 | 99 |
def getView(self, name=None): |
100 |
""" |
|
101 |
Return active view, or view called 'name' or None |
|
102 |
|
|
103 |
:param name: view name |
|
104 |
:type name: string |
|
105 |
""" |
|
106 |
v = None |
|
107 |
|
|
80 | 108 |
if name == None: |
81 |
return View(self.getActiveDocument("project.document.view2d")) |
|
109 |
try: |
|
110 |
activeDocument = self.getActiveDocument() |
|
111 |
#if v.__class__ == "project.document.view2d": |
|
112 |
if activeDocument.getTypeName() == "project.document.view2d": |
|
113 |
v = View(activeDocument) |
|
114 |
except Exception, ex: |
|
115 |
raise Exception("%s"%repr(ex)) |
|
82 | 116 |
|
83 |
views = self.getViews() |
|
117 |
else: |
|
118 |
views = self.getViews() |
|
119 |
if len(views) >0: |
|
120 |
for view in views: |
|
121 |
if name == view.getName(): |
|
122 |
v = View(view) |
|
84 | 123 |
|
85 |
if len(views) >0: |
|
86 |
for v in views: |
|
87 |
if name == v.getName(): |
|
88 |
return View(v) |
|
124 |
return v |
|
125 |
|
|
126 |
def getTable(self, name=None): |
|
127 |
""" |
|
128 |
Return active Table Document, or Table Document called 'name' or None |
|
129 |
|
|
130 |
:param name: Table Document name |
|
131 |
:type name: string |
|
132 |
""" |
|
133 |
t = None |
|
134 |
if name == None: |
|
135 |
try: |
|
136 |
activeDocument = self.getActiveDocument() |
|
137 |
if activeDocument.getTypeName() == "project.document.table": |
|
138 |
t = Table(activeDocument) |
|
139 |
except Exception, ex: |
|
140 |
raise Exception("%s"%repr(ex)) |
|
141 |
else: |
|
142 |
tables = self.getDocuments("project.document.table") |
|
143 |
if len(tables) >0: |
|
144 |
for table in tables: |
|
145 |
if name == table.getName(): |
|
146 |
t = Table(table) |
|
147 |
|
|
148 |
return t |
|
89 | 149 |
|
90 |
return None |
|
91 | 150 |
|
92 | 151 |
class View(WrapperToJava): |
152 |
""" |
|
153 |
Represents gvSIG view document. |
|
154 |
""" |
|
93 | 155 |
def __init__(self,view): |
94 | 156 |
WrapperToJava.__init__(self,view) |
95 |
|
|
96 |
def refresh(self): |
|
97 |
map = self.getMapContext() |
|
98 |
map.invalidate() |
|
99 |
|
|
157 |
|
|
100 | 158 |
def getLayer(self, name=None): |
101 |
map = self.getMapContext() |
|
159 |
""" |
|
160 |
Return one of the view layers documents. If name is None return view active |
|
161 |
layer if the view has one, if name is not None return view called name else |
|
162 |
return None. |
|
163 |
|
|
164 |
:param name: view name in Table Of Contents |
|
165 |
:type name: string |
|
166 |
:return: View |
|
167 |
:return: None |
|
168 |
|
|
169 |
""" |
|
170 |
map = self.getMapContext(); |
|
102 | 171 |
if name == None: |
103 | 172 |
activeLayers = map.getLayers().getActives() |
104 | 173 |
if len(activeLayers) != 1 : |
105 | 174 |
raise RuntimeException("The view has not an active layer") |
106 |
return Layer(activeLayers[0]) |
|
107 |
#FIXME |
|
108 |
try: |
|
109 |
return Layer(layers.getLayer(name)) |
|
110 |
except Exception, ex: |
|
111 |
print "View.getLayer Error. %s"%repr(ex) |
|
175 |
for layer in activeLayers: |
|
176 |
if not isinstance(layer, FLayers): |
|
177 |
return Layer(layer) |
|
178 |
raise RuntimeException("The view has not an active layer") |
|
112 | 179 |
|
113 |
layers = map.getLayers() |
|
114 |
""" |
|
115 |
for i in xrange(len(ls)): |
|
116 |
l = layers.getLayer(i) |
|
117 |
if name == l.getName(): |
|
180 |
ls = self.getLayers() |
|
181 |
for i in xrange(ls.getLayersCount()): |
|
182 |
l = ls.getLayer(i) |
|
183 |
if l.name == name: |
|
118 | 184 |
return Layer(l) |
119 |
""" |
|
120 | 185 |
|
121 |
return layers
|
|
186 |
return None
|
|
122 | 187 |
|
123 | 188 |
def getMap(self): |
189 |
""" |
|
190 |
Return view mapContext |
|
191 |
""" |
|
124 | 192 |
return self.getMapContext(); |
125 | 193 |
|
126 | 194 |
def addLayer(self, layer): |
127 |
#FIXME: Comprobar si es un Layer de python y convertirlo al de
|
|
128 |
# java automaticmente para que acepte los dos
|
|
195 |
if isinstance(layer, Layer):
|
|
196 |
layer =layer()
|
|
129 | 197 |
self.getMapContext().getLayers().addLayer(layer) |
130 | 198 |
|
131 | 199 |
def getLayers(self): |
200 |
""" |
|
201 |
Return iterable view layers set |
|
202 |
""" |
|
132 | 203 |
map = self.getMapContext(); |
133 | 204 |
return Layers(map.getLayers()) |
134 | 205 |
|
135 | 206 |
def getGraphicsLayer(self): |
207 |
""" |
|
208 |
Return view graphics layer |
|
209 |
""" |
|
136 | 210 |
return self.getMapContext().getGraphicsLayer() |
137 | 211 |
|
138 | 212 |
|
139 | 213 |
class Layers(WrapperToJava): |
140 |
|
|
214 |
""" |
|
215 |
Iterable layers set |
|
216 |
""" |
|
141 | 217 |
def __init__(self,layers): |
142 | 218 |
WrapperToJava.__init__(self, layers) |
143 | 219 |
|
... | ... | |
150 | 226 |
def __iter__(self): |
151 | 227 |
return LayersIterator(self) |
152 | 228 |
|
153 |
#class LayersIterator(WrapperToJava): |
|
154 | 229 |
class LayersIterator(object): |
155 | 230 |
|
156 | 231 |
def __init__(self,layers): |
157 |
#WrapperToJava.__init__(self, layers) |
|
158 | 232 |
self.__layers = layers |
159 | 233 |
self.__index = 0 |
160 | 234 |
|
161 | 235 |
def next(self): |
162 | 236 |
if self.__index > self.__layers.getLayersCount() : |
163 | 237 |
raise StopIteration() |
164 |
#FIXME |
|
165 |
#return Layer(self.__layers.getLayer(self.__index)) |
|
166 |
return Layer(self.__layers.get(self.__index)) |
|
238 |
return Layer(self.__layers.get(self.__index)) |
|
239 |
|
|
240 |
class Store(WrapperToJava): |
|
241 |
""" |
|
242 |
Represents gvsig store |
|
243 |
""" |
|
244 |
def __init__(self,store): |
|
245 |
WrapperToJava.__init__(self, store) |
|
246 |
#self.data = None |
|
247 |
self.fset = None |
|
248 |
|
|
249 |
def features(self, expresion = None): |
|
250 |
""" |
|
251 |
Return layer features set |
|
167 | 252 |
|
168 |
class Layer(WrapperToJava): |
|
169 |
def __init__(self,layer): |
|
170 |
WrapperToJava.__init__(self,layer) |
|
253 |
:param expresion: filter to apply to the feature set to select |
|
254 |
determinates features that match with expression |
|
255 |
:type expresion: string |
|
256 |
:return: FeatureSet |
|
257 |
""" |
|
258 |
|
|
259 |
if expresion == None: |
|
260 |
self.fset = self.getFeatureSet() |
|
261 |
else: |
|
262 |
application = ApplicationLocator.getManager() |
|
263 |
datamanager = application.getDataManager() |
|
264 |
query = self.createFeatureQuery() |
|
265 |
query.setFilter( datamanager.createExpresion(expresion) ) |
|
266 |
#self.fset = data.getFeatureSet(query) |
|
267 |
self.fset = self.getFeatureSet(query) |
|
268 |
|
|
269 |
return FeatureSet(self.fset) |
|
171 | 270 |
|
172 |
def features(self): |
|
173 |
data = self.getDataStore() |
|
174 |
fset = data.getFeatureSet() |
|
175 |
return FeatureSet(fset) |
|
176 |
|
|
177 |
def append(self, **values): |
|
271 |
def edit(self): |
|
272 |
""" |
|
273 |
Set layer data store in edition mode |
|
274 |
""" |
|
275 |
|
|
276 |
if not self.isEditing(): |
|
277 |
self().edit() |
|
278 |
|
|
279 |
def append(self, *valuesList, **values): |
|
280 |
""" |
|
281 |
Create a new feature from given values and insert it in the feature set |
|
282 |
|
|
283 |
:param values: dictionary with name property value or list named params |
|
284 |
:type values: dict |
|
285 |
|
|
286 |
""" |
|
178 | 287 |
try: |
179 |
data = self.getDataStore() |
|
180 |
if not data.isEditing(): |
|
181 |
data.edit() |
|
182 |
f = self.getFeatureStore().createNewFeature() |
|
288 |
if len(valuesList) ==1: |
|
289 |
values.update(valuesList[0]) |
|
290 |
|
|
291 |
if not self.isEditing(): |
|
292 |
self.edit() |
|
293 |
f = self.createNewFeature() |
|
294 |
|
|
183 | 295 |
if f == None: |
184 | 296 |
raise RuntimeError("Failed to create a new Feature") |
185 | 297 |
for k,v in values.iteritems(): |
186 | 298 |
f.set(k,v) |
187 |
data.insert(f)
|
|
299 |
self.insert(f)
|
|
188 | 300 |
except Throwable, ex: |
189 | 301 |
raise RuntimeException("Can't append values %s to layer %s (%s)" % ( |
190 | 302 |
repr(values), |
... | ... | |
193 | 305 |
) |
194 | 306 |
) |
195 | 307 |
|
308 |
def updateSchema(self, schema): |
|
309 |
try: |
|
310 |
self().update(schema._javaobj) |
|
311 |
except Throwable, ex: |
|
312 |
raise RuntimeException(repr(ex)) |
|
313 |
|
|
314 |
def update(self, feature): |
|
315 |
""" |
|
316 |
Update exist feature in the layer featureSet |
|
317 |
|
|
318 |
:param editableFeature: editableFeature |
|
319 |
:type editableFeature: Java editableFeature |
|
320 |
""" |
|
321 |
#fset = self.data.getFeatureSet() |
|
322 |
#fset.update(editableFeature) |
|
323 |
if not isinstance(feature, EditableFeature): |
|
324 |
feature = feature._javaobj |
|
325 |
self.fset.update(feature) |
|
326 |
|
|
327 |
def getSchema(self): |
|
328 |
""" |
|
329 |
Return layer schema definition |
|
330 |
""" |
|
331 |
return Schema(self.getDefaultFeatureType()) |
|
332 |
|
|
196 | 333 |
def commit(self): |
197 |
data = self.getDataStore() |
|
198 |
data.finishEditing() |
|
334 |
""" |
|
335 |
Finish layer edition |
|
336 |
""" |
|
337 |
try: |
|
338 |
self.finishEditing() |
|
339 |
except Throwable, ex: |
|
340 |
self.abort() |
|
341 |
raise Throwable("Can't finish layer edition, cancelling changes. %s" % repr(ex)) |
|
342 |
|
|
199 | 343 |
|
200 | 344 |
def abort(self): |
201 |
data = self.getDataStore() |
|
202 |
data.cancelEditing() |
|
345 |
""" |
|
346 |
Cancel layer edition |
|
347 |
""" |
|
348 |
#data = self.getDataStore() |
|
349 |
self.cancelEditing() |
|
350 |
self.dispose() |
|
203 | 351 |
|
204 | 352 |
def getSelection(self): |
205 |
data = self.getDataStore() |
|
206 |
return data.getSelection() |
|
353 |
""" |
|
354 |
Return layer feature selected set |
|
355 |
""" |
|
356 |
return self().getSelection() |
|
357 |
|
|
358 |
class __DefaultTable__(WrapperToJava): |
|
359 |
def __init__(self,document, data): |
|
360 |
self.data = Store(data) |
|
361 |
WrapperToJava.__init__(self,document) |
|
362 |
|
|
363 |
def features(self, expresion = None): |
|
364 |
""" |
|
365 |
Return table features set |
|
207 | 366 |
|
367 |
:param expresion: filter to apply to the feature set to select |
|
368 |
determinates features that match with expression |
|
369 |
:type expresion: string |
|
370 |
:return: FeatureSet |
|
371 |
""" |
|
372 |
|
|
373 |
return self.data.features(expresion = None) |
|
374 |
|
|
375 |
def edit(self): |
|
376 |
""" |
|
377 |
Set layer data store in edition mode |
|
378 |
""" |
|
379 |
|
|
380 |
self.data.edit() |
|
381 |
|
|
382 |
def append(self, *valuesList, **values): |
|
383 |
""" |
|
384 |
Create a new feature from given values and insert it in the feature set |
|
385 |
|
|
386 |
:param values: dictionary with name property value or list named params |
|
387 |
:type values: dict |
|
388 |
|
|
389 |
""" |
|
390 |
self.data.append(*valuesList, **values) |
|
391 |
|
|
392 |
def updateSchema(self, schema): |
|
393 |
self.data.updateSchema(schema) |
|
394 |
|
|
395 |
def update(self, feature): |
|
396 |
""" |
|
397 |
Update exist feature in the layer featureSet |
|
398 |
|
|
399 |
:param editableFeature: editableFeature |
|
400 |
:type editableFeature: Java editableFeature |
|
401 |
""" |
|
402 |
self.data.update(feature) |
|
403 |
|
|
404 |
def getSchema(self): |
|
405 |
""" |
|
406 |
Return layer schema definition |
|
407 |
""" |
|
408 |
return self.data.getSchema() |
|
409 |
|
|
410 |
def commit(self): |
|
411 |
""" |
|
412 |
Finish layer edition |
|
413 |
""" |
|
414 |
self.data.commit() |
|
415 |
|
|
416 |
def abort(self): |
|
417 |
""" |
|
418 |
Cancel layer edition |
|
419 |
""" |
|
420 |
self.data.abort() |
|
421 |
|
|
422 |
def getSelection(self): |
|
423 |
""" |
|
424 |
Return layer feature selected set |
|
425 |
""" |
|
426 |
return self.data.getSelection() |
|
427 |
|
|
428 |
class Table(__DefaultTable__): |
|
429 |
""" |
|
430 |
Represents gvsig layer document |
|
431 |
""" |
|
432 |
def __init__(self,table): |
|
433 |
__DefaultTable__.__init__(self, table, table.getStore()) |
|
434 |
|
|
435 |
class Layer(__DefaultTable__): |
|
436 |
""" |
|
437 |
Represents gvsig layer document |
|
438 |
""" |
|
439 |
def __init__(self,layer): |
|
440 |
__DefaultTable__.__init__(self, layer, layer.getFeatureStore()) |
|
441 |
#WrapperToJava.__init__(self,layer) |
|
442 |
|
|
208 | 443 |
class FeatureSet(WrapperToJava): |
209 | 444 |
def __init__(self,featureSet): |
210 | 445 |
WrapperToJava.__init__(self,featureSet) |
211 |
|
|
446 |
|
|
447 |
def getCount(self): |
|
448 |
return self.getSize() |
|
449 |
|
|
450 |
def update(self, feature): |
|
451 |
""" |
|
452 |
Update exist feature in the featureSet |
|
453 |
|
|
454 |
:param editableFeature: editableFeature |
|
455 |
:type editableFeature: Java editableFeature |
|
456 |
""" |
|
457 |
#FIXME |
|
458 |
if not isinstance(feature, EditableFeature) and \ |
|
459 |
feature.__class__ != "org.gvsig.fmap.dal.feature.impl.DefaultEditableFeature": |
|
460 |
feature = feature._javaobj |
|
461 |
self().update(feature) |
|
462 |
|
|
212 | 463 |
def __iter__(self): |
213 | 464 |
return Iterator(self.fastIterator()) |
214 |
|
|
465 |
|
|
215 | 466 |
class Iterator(WrapperToJava): |
216 | 467 |
|
217 | 468 |
def __init__(self,iterator): |
... | ... | |
223 | 474 |
return Feature(self().next()) |
224 | 475 |
|
225 | 476 |
class Feature(WrapperToJava): |
477 |
""" |
|
478 |
Represents layer feature data |
|
479 |
""" |
|
226 | 480 |
def __init__(self,feature): |
227 | 481 |
WrapperToJava.__init__(self,feature) |
482 |
self.featureNoEditable = None |
|
228 | 483 |
|
229 | 484 |
def geometry(self): |
485 |
""" |
|
486 |
Return feature default geometry |
|
487 |
""" |
|
230 | 488 |
return self.getDefaultGeometry() |
489 |
|
|
490 |
def getValues(self): |
|
491 |
""" |
|
492 |
Return dictionary with name value attributes |
|
493 |
""" |
|
494 |
descriptor = self.getType() |
|
495 |
items = dict() |
|
496 |
for attr in descriptor.getAttributeDescriptors(): |
|
497 |
name = attr.getName() |
|
498 |
value = self.get(attr.getName()) |
|
499 |
items[name] = value |
|
500 |
return items |
|
231 | 501 |
|
502 |
def edit(self): |
|
503 |
""" |
|
504 |
Return editable feature |
|
505 |
""" |
|
506 |
if not isinstance(self._javaobj, EditableFeature): |
|
507 |
self.featureNoEditable = self._javaobj |
|
508 |
self._javaobj = self._javaobj.getEditable() |
|
509 |
|
|
510 |
#return self.getEditable() |
|
511 |
|
|
232 | 512 |
def __getitem__(self,key): |
233 | 513 |
return self.get(key) |
234 | 514 |
|
... | ... | |
236 | 516 |
try: |
237 | 517 |
v = getattr(self._javaobj,name, None) |
238 | 518 |
if v == None: |
239 |
v = self().get(name) |
|
240 |
|
|
519 |
v = self().get(name) |
|
241 | 520 |
return v |
242 | 521 |
except Throwable, ex: |
243 |
raise RuntimeException("Can't access to attribute %s of feature (%s)" % (name, str(ex))) |
|
244 |
|
|
522 |
raise RuntimeException("Can't access to attribute %s of feature (%s)" % (name, str(ex))) |
|
245 | 523 |
|
246 | 524 |
class Schema(WrapperToJava): |
525 |
""" |
|
526 |
Layer feature definition |
|
527 |
""" |
|
247 | 528 |
|
248 | 529 |
def __init__(self, featureType): |
249 | 530 |
WrapperToJava.__init__(self,featureType) |
531 |
self.featureTypeNoEditable = None |
|
250 | 532 |
|
251 |
def append(self, name, type, size=None): |
|
252 |
application = ApplicationLocator.getManager() |
|
253 |
datamanager = application.getDataManager() |
|
254 |
dataTypes = application.getDataTypesManager() |
|
255 |
type = dataTypes.get( dataTypes.getType(type) ) |
|
533 |
def append(self, name, type, size=None, default=None, precision=4): |
|
534 |
""" |
|
535 |
Adds property to feature properties definition. |
|
256 | 536 |
|
537 |
:param name: Feature property name |
|
538 |
:type name: String |
|
539 |
:param type: Feature property type |
|
540 |
:type name: String |
|
541 |
:param size: Feature property size |
|
542 |
:type size: int |
|
543 |
:param default: Feature property default value |
|
544 |
:return: new atribute |
|
545 |
|
|
546 |
""" |
|
547 |
if not isinstance(self._javaobj, EditableFeatureType): |
|
548 |
self.modify() |
|
549 |
#self.featureTypeNoEditable = self._javaobj |
|
550 |
#self._javaobj = self._javaobj.getEditable() |
|
551 |
|
|
552 |
if isinstance(type, str): |
|
553 |
try: |
|
554 |
application = ApplicationLocator.getManager() |
|
555 |
datamanager = application.getDataManager() |
|
556 |
dataTypes = application.getDataTypesManager() |
|
557 |
type = dataTypes.getType(type) #dataType constant value from string |
|
558 |
except: |
|
559 |
raise RuntimeError( |
|
560 |
"Feature Property Data type (%s) is not valid. name=%s, type=%s, size=%s, default=%s)" % ( |
|
561 |
type, |
|
562 |
name, |
|
563 |
type, |
|
564 |
size, |
|
565 |
default |
|
566 |
) |
|
567 |
) |
|
568 |
if isinstance(type, int): |
|
569 |
try: |
|
570 |
type = dataTypes.get(type) |
|
571 |
except: |
|
572 |
raise RuntimeError( |
|
573 |
"Data type (%s) is not valid. name=%s, type=%s, size=%s, default=%s)" % ( |
|
574 |
type, |
|
575 |
name, |
|
576 |
type, |
|
577 |
size, |
|
578 |
default |
|
579 |
) |
|
580 |
) |
|
581 |
|
|
257 | 582 |
attribute = self.add(name, type.getType()) |
258 |
if size != None: |
|
583 |
|
|
584 |
if size != None: |
|
259 | 585 |
attribute.setSize(size) |
260 |
|
|
586 |
|
|
587 |
if default != None: |
|
588 |
attribute.setDefaultValue(default) |
|
589 |
|
|
590 |
if precision != None and type.getType() in (DataTypes.DOUBLE, DataTypes.FLOAT): |
|
591 |
attribute.setPrecision(precision) |
|
592 |
|
|
261 | 593 |
if type.getType() == DataTypes.GEOMETRY and self.getDefaultGeometryAttributeName()==None: |
262 | 594 |
self.setDefaultGeometryAttributeName(name) |
263 | 595 |
|
... | ... | |
271 | 603 |
if x == None: |
272 | 604 |
return default |
273 | 605 |
return x |
274 |
|
|
275 |
def createSchema(): |
|
606 |
|
|
607 |
def modify(self): |
|
608 |
#FIXME comprobar si es un DefaultFeatureType |
|
609 |
if not isinstance(self._javaobj, EditableFeatureType): |
|
610 |
self.featureTypeNoEditable = self._javaobj |
|
611 |
self._javaobj = self._javaobj.getEditable() |
|
612 |
|
|
613 |
def createSchema(schema = None): |
|
614 |
""" |
|
615 |
Return empty layer definition |
|
616 |
""" |
|
617 |
if schema != None: |
|
618 |
return Schema(schema.getCopy()) |
|
619 |
|
|
276 | 620 |
application = ApplicationLocator.getManager() |
277 | 621 |
datamanager = application.getDataManager() |
278 | 622 |
return Schema(datamanager.createFeatureType()) |
279 | 623 |
|
280 |
|
|
281 |
def copyToDynObject(values, target): |
|
282 |
definition = target.getDynClass(); |
|
283 |
fields = definition.getDynFields(); |
|
284 |
for field in fields: |
|
285 |
name = field.getName() |
|
286 |
#FIXME: Esta comparacion deberia ser case insensitibe |
|
287 |
if values.has_key(name): |
|
288 |
#print "set %s = %s (%s)" % (name, values[name], target) |
|
289 |
target.setDynValue(name, values[name]) |
|
290 |
|
|
291 |
|
|
292 | 624 |
def createLayer(schema, servertype, layertype=None, **parameters): |
293 |
""" Create a new layer and return it """ |
|
625 |
""" |
|
626 |
Create a new layer and return it |
|
627 |
|
|
628 |
:param schema: layer data definition |
|
629 |
:type schema: Schema |
|
630 |
:param servertype: |
|
631 |
:type servertype: string |
|
632 |
:return: new layer |
|
633 |
:rtype: Layer |
|
634 |
:raise: RuntimeException |
|
635 |
|
|
636 |
""" |
|
294 | 637 |
if layertype == None: |
295 | 638 |
layertype = servertype |
296 | 639 |
servertype = "FilesystemExplorer" |
... | ... | |
298 | 641 |
if layertype == "Shape" : |
299 | 642 |
if schema.get("GEOMETRY",None) == None: |
300 | 643 |
raise RuntimeException("Shape need a field named GEOMETRY in the schema") |
301 |
|
|
644 |
|
|
645 |
#parameters["geometryType"] = getGeometryType(parameters["geometryType"]) |
|
646 |
|
|
647 |
if parameters["geometryType"] == None: |
|
648 |
raise RuntimeException("Invalid geometry type for new layer") |
|
649 |
|
|
302 | 650 |
try: |
303 | 651 |
application = ApplicationLocator.getManager() |
304 | 652 |
datamanager = application.getDataManager() |
... | ... | |
324 | 672 |
except Throwable, ex: |
325 | 673 |
raise RuntimeException("Can't create layer, "+ str(ex)) |
326 | 674 |
|
327 |
def createShape(definition, filename, CRS="wsg86"): |
|
328 |
""" Create a new shape layer """ |
|
329 |
return createLayer(definition, "FilesystemExplorer", "Shape", shpFile=filename, CRS=CRS) |
|
675 |
def createShape(definition, filename, geometryType, CRS="wsg86"): |
|
676 |
""" |
|
677 |
Create a new shape layer |
|
678 |
|
|
679 |
:param definition: layer data definition |
|
680 |
:type definition: Schema |
|
681 |
:param filename: absolute path for shape files. |
|
682 |
:type filename: string |
|
683 |
:param geometryType: geometry type for shape |
|
684 |
:type geometryType: string |
|
685 |
:return: new shape layer |
|
686 |
:rtype: Layer |
|
687 |
""" |
|
688 |
return createLayer( |
|
689 |
definition, |
|
690 |
"FilesystemExplorer", |
|
691 |
"Shape", |
|
692 |
shpFile=filename, |
|
693 |
CRS=CRS, |
|
694 |
geometryType = geometryType |
|
695 |
) |
|
696 |
|
|
697 |
def createTable(schema, servertype, tableType=None, **parameters): |
|
698 |
if tableType == None: |
|
699 |
tableType = servertype |
|
700 |
servertype = "FilesystemExplorer" |
|
701 |
|
|
702 |
try: |
|
703 |
application = ApplicationLocator.getManager() |
|
704 |
datamanager = application.getDataManager() |
|
705 |
|
|
706 |
server_parameters = datamanager.createServerExplorerParameters(servertype) |
|
707 |
copyToDynObject(parameters, server_parameters) |
|
708 |
|
|
709 |
server = datamanager.openServerExplorer(servertype, server_parameters) |
|
710 |
|
|
711 |
store_parameters = server.getAddParameters(tableType) |
|
712 |
copyToDynObject(parameters, store_parameters) |
|
713 |
store_parameters.setDefaultFeatureType(schema()) |
|
714 |
|
|
715 |
server.add(tableType, store_parameters, True) |
|
716 |
|
|
717 |
store = datamanager.openStore(tableType, store_parameters) |
|
718 |
|
|
719 |
return Table(store) |
|
330 | 720 |
|
721 |
except Throwable, ex: |
|
722 |
raise RuntimeException("Can't create table, "+ str(ex)) |
|
723 |
|
|
724 |
def createDBF(definition, DbfFile, CRS="wsg86"): |
|
725 |
""" |
|
726 |
Create a new shape layer |
|
727 |
|
|
728 |
:param definition: layer data definition |
|
729 |
:type definition: Schema |
|
730 |
:param DbfFile: absolute path for shape files. |
|
731 |
:type DbfFile: string |
|
732 |
:param geometryType: geometry type for shape |
|
733 |
:type geometryType: string |
|
734 |
:return: new shape layer |
|
735 |
:rtype: Layer |
|
736 |
""" |
|
737 |
return createTable( |
|
738 |
definition, |
|
739 |
"FilesystemExplorer", |
|
740 |
"DBF", |
|
741 |
DbfFile=DbfFile, |
|
742 |
CRS=CRS, |
|
743 |
) |
|
744 |
|
|
331 | 745 |
def currentProject(): |
332 |
""" Return the current proyect of gvSIG """ |
|
746 |
""" |
|
747 |
Return the current gvSIG proyect |
|
748 |
:return: Proyect |
|
749 |
""" |
|
750 |
|
|
333 | 751 |
application = ApplicationLocator.getManager() |
334 | 752 |
project = application.getCurrentProject() |
335 | 753 |
return Project(project) |
336 | 754 |
|
337 |
def currentView(): |
|
338 |
""" Return the current active view document or None """ |
|
755 |
def currentDocument(): |
|
756 |
""" |
|
757 |
Return the current active document if it's a DocumentTable or DocumentView2D |
|
758 |
|
|
759 |
:return: Active document, None |
|
760 |
""" |
|
761 |
|
|
339 | 762 |
application = ApplicationLocator.getManager() |
340 | 763 |
doc = application.getActiveDocument() |
341 |
return View(doc) |
|
764 |
|
|
765 |
if doc.getTypeName() == "project.document.table": |
|
766 |
return Table(doc) |
|
767 |
|
|
768 |
if doc.getTypeName() == "project.document.view2d": |
|
769 |
return View(doc) |
|
342 | 770 |
|
771 |
return None |
|
772 |
|
|
773 |
def currentView(): |
|
774 |
""" |
|
775 |
Return the current active view document or None |
|
776 |
|
|
777 |
:return: View or None |
|
778 |
""" |
|
779 |
|
|
780 |
return View(currentProject().getView()) |
|
781 |
|
|
343 | 782 |
def currentLayer(): |
344 |
""" Return the first active layer of the current view """ |
|
783 |
""" |
|
784 |
Return current view active layer |
|
785 |
|
|
786 |
:return: gvSIG active layer |
|
787 |
""" |
|
788 |
|
|
345 | 789 |
return currentView().getLayer() |
346 | 790 |
|
347 | 791 |
def SimplePointSymbol(color): |
348 | 792 |
""" |
349 | 793 |
Return simple point symbol using parameter color |
794 |
|
|
795 |
:param color: Color name |
|
796 |
:return: gvSIG point symbol |
|
350 | 797 |
""" |
351 | 798 |
return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.POINT, color) |
352 | 799 |
|
353 |
# |
|
800 |
def SimpleLineSymbol(color): |
|
801 |
""" |
|
802 |
Return simple line symbol using parameter color |
|
803 |
|
|
804 |
:param color: Color name |
|
805 |
:return: gvSIG line symbol |
|
806 |
""" |
|
807 |
return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.CURVE, color) |
|
808 |
|
|
809 |
def SimplePoligonSymbol(color): |
|
810 |
""" |
|
811 |
Return simple poligon symbol using parameter color |
|
812 |
|
|
813 |
:param color: Color name |
|
814 |
:return: gvSIG poligon symbol |
|
815 |
""" |
|
816 |
return MapContextLocator.getSymbolManager().createSymbol(Geometry.TYPES.SURFACE, color) |
|
817 |
|
|
818 |
|
|
819 |
def copyToDynObject(values, target): |
|
820 |
definition = target.getDynClass(); |
|
821 |
fields = definition.getDynFields(); |
|
822 |
for field in fields: |
|
823 |
name = field.getName() |
|
824 |
keys = values.keys() |
|
825 |
for k in keys: |
|
826 |
if k.lower() == name.lower(): |
|
827 |
target.setDynValue(name, values[name]) |
|
828 |
break# |
|
354 | 829 |
# ==================================== |
355 | 830 |
# |
356 | 831 |
|
... | ... | |
370 | 845 |
) |
371 | 846 |
|
372 | 847 |
for feature in layer.features(): |
373 |
point = feature.geometry().centroid() |
|
374 |
#output.append(ID=feature.CODIGO, GEOMETRY=point) |
|
375 |
output.append(ID=feature.ID, GEOMETRY=point) |
|
376 |
#print feature.CODIGO, point |
|
377 |
print feature.ID, point |
|
848 |
point = feature.geometry().centroid() |
|
849 |
output.append(ID=feature.ID, GEOMETRY=point) |
|
850 |
|
|
378 | 851 |
output.commit() |
379 | 852 |
|
380 |
currentView().addLayer(output()) |
|
381 |
|
|
382 |
def main2(): |
|
383 |
layer = currentLayer() |
|
384 |
|
|
385 |
for feature in layer.features(): |
|
386 |
if feature.TIPO == "COPUT": |
|
387 |
layer.getFeatureStore().getSelection().add(feature) |
|
388 |
|
|
853 |
currentView().addLayer(output()) |
Also available in: Unified diff