-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsaveloadlayers.py
82 lines (68 loc) · 2.38 KB
/
saveloadlayers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# encoding: utf-8
import gvsig
from org.gvsig.fmap.dal import DALLocator
from org.json import JSONArray
from org.json import JSONObject
from gvsig.geom import createGeometryFromWKT
from qdlib.drawGraphicLayer import createMemoryStore
from org.gvsig.fmap.mapcontext import MapContextLocator
from addons.QuickDrawing import quickDrawingTool
def main(*args):
view = gvsig.currentView()
mapContext = view.getMapContext()
if mapContext.getGraphicsLayer(quickDrawingTool.DEFAULT_DRAW_LAYER)==None:
return
layer = mapContext.getGraphicsLayer(quickDrawingTool.DEFAULT_DRAW_LAYER)
l = saveGraphicsLayers(layer)
#jsongraphicsstring = jsongraphics.toString()
loadLayersGraphics(l)
def saveGraphicsLayers(layer):
jsonlayer = layerToJSON(layer)
return jsonlayer.toString()
def layerToJSON(layer):
jsonlayer = JSONObject()
jsonfeatures = JSONArray()
ftype = layer.getFeatureStore().getDefaultFeatureType()
geomAttributeName = ftype.getDefaultGeometryAttributeName()
for f in layer.getFeatureStore().getFeatureSet():
jsonfeature = JSONObject()
values = f.getValues()
for k in values.keys():
value = values[k]
if k == geomAttributeName:
wkt = value.convertToWKT()
jsonfeature.putOnce(k, wkt)
else:
jsonfeature.putOnce(k, value)
jsonfeatures.put(jsonfeature)
jsonlayer.put("features", jsonfeatures)
return jsonlayer
def loadLayersGraphics(jsongraphicsstring):
jsongraphics = JSONObject(jsongraphicsstring)
if jsongraphics==None:
return
mapContextManager = MapContextLocator.getMapContextManager()
store = loadLayerFromJSON(jsongraphics)
layer = mapContextManager.createLayer(quickDrawingTool.DEFAULT_DRAW_LAYER, store)
return layer
def loadLayerFromJSON(jsonlayer):
store = createMemoryStore()
if not store.isEditing(): store.edit()
f = store.createNewFeature()
jsonfeatures = jsonlayer.getJSONArray("features")
ftype = store.getDefaultFeatureType()
geomAttributeName = ftype.getDefaultGeometryAttributeName()
for jsonfeature in jsonfeatures:
f = store.createNewFeature()
for key in jsonfeature.keys():
value = jsonfeature.get(key)
if key == geomAttributeName:
if value!="":
wktGeom = createGeometryFromWKT(value)
else:
wktGeom = None
f.set(key, wktGeom)
else:
f.set(key, value)
store.insert(f)
return store