Statistics
| Revision:

svn-gvsig-desktop / tags / Root_FMap_piloto_CAD_Layout_version / libraries / libFMap / docs / Edición vectorial en FMap.html @ 1664

History | View | Annotate | Download (7.13 KB)

1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
<html>
3
<head>
4
  <meta content="text/html; charset=ISO-8859-1"
5
 http-equiv="content-type">
6
  <title>Edici&oacute;n vectorial en FMap</title>
7
</head>
8
<body>
9
<big><big><big>Edici&oacute;n vectorial en FMap<br>
10
</big><small><small>&nbsp;&nbsp;&nbsp; La edici&oacute;n vectorial en
11
FMap se realiza sobre fuentes de datos vectoriales mediante el uso de
12
ficheros auxiliares, en los cuales se va introduciendo las
13
geometr&iacute;as modificadas y a&ntilde;adidas. Para esto, FMap
14
proporciona la interfaz EditableFeatureSource, la cual proporciona los
15
m&eacute;todos adecuados para a&ntilde;adir geometr&iacute;as y
16
modificar o eliminar las ya existentes.<br>
17
<br>
18
&nbsp;&nbsp;&nbsp; La edici&oacute;n se efectuar&aacute; de manera
19
transaccional, s&oacute;lo realizandose la escritura en la fuente de
20
datos en edici&oacute;n cuando el usuario determine el fin de la
21
edici&oacute;n. Llegado este momento, se deber&aacute; poder
22
identificar qu&eacute; ha pasado con cada geometr&iacute;a.
23
Inicialmente, cada geometr&iacute;a se identifica por su
24
posici&oacute;n ordinal dentro de la capa que se edita y si durante la
25
edici&oacute;n, se modifica la geometr&iacute;a i-&eacute;sima, se
26
deber&aacute; de situar al geometr&iacute;a modificada en un fichero
27
auxiliar, manteniendo la informaci&oacute;n que asocia la
28
geometr&iacute;a i-&eacute;sima con la geometr&iacute;a insertada en el
29
fichero auxiliar. Para ello habr&aacute; que mantener una
30
colecci&oacute;n de correspondencias entre las geometr&iacute;as y su
31
ubicaci&oacute;n f&iacute;sica tras la edici&oacute;n. En el caso de la
32
eliminaci&oacute;n de una geometr&iacute;a se deber&aacute; de mantener
33
la informaci&oacute;n que indica que dicha geometr&iacute;a ha sido
34
eliminada. Esto &uacute;ltimo nos lleva a que durante la
35
edici&oacute;n, la geometr&iacute;a i-&eacute;sima no puede dejar de
36
existir, puede ser marcada como geometr&iacute;a nula, pero si se
37
elimina la geometr&iacute;a i-&eacute;sima, las siguientes llamadas a
38
getGeometry(i) del EditableFeatureSource deben devolver una
39
NullGeometry y en ning&uacute;n caso la geometr&iacute;a
40
(i+1)-&eacute;sima.<br>
41
<br>
42
</small></small></big></big><big><big><small><small>&nbsp;&nbsp;&nbsp;
43
De todo lo anterior se deduce que los ficheros auxiliares ir&aacute;n
44
creciendo de forma cont&iacute;nua aunque se eliminen
45
geometr&iacute;as, por lo
46
que ser&aacute; necesario crear un mecanismo de compactaci&oacute;n. En
47
dicho mecanismo, lo &uacute;nico que se compacta son los ficheros
48
auxiliares que est&eacute;n en uso, creando un fichero s&oacute;lo con
49
las geometr&iacute;as que actualmente est&eacute;n en uso.</small></small></big></big><br>
50
<big><big><small><small><br>
51
&nbsp;&nbsp;&nbsp; Se identifican fuentes de datos editables de dos
52
naturalezas. </small></small></big></big><big><big><small><small>Al
53
comenzar y terminar la edici&oacute;n, las operaciones a realizar son
54
distintas en funci&oacute;n de dicha naturaleza:<br>
55
</small></small></big></big>
56
<ul>
57
  <li><big><big><small><small>Los ficheros vectoriales.</small></small></big></big></li>
58
</ul>
59
<div style="margin-left: 40px;">Al terminar la edici&oacute;n se
60
deber&aacute; procesar las geometr&iacute;as en orden y escribirlas en
61
el fichero que estuviese en edici&oacute;n, machacando el contenido que
62
hubiese anteriormente.<br>
63
</div>
64
<big><big></big></big>
65
<ul>
66
  <li><big><big><small><small>Las fuentes de datos remotas con
67
identificador para las geometr&iacute;as.</small></small></big></big></li>
68
</ul>
69
<div style="margin-left: 40px;">Al comenzar la edici&oacute;n,
70
protocolos como WFS permiten realizar un "lock" sobre las
71
geometr&iacute;as que se van a editar, de forma que se puede preguntar
72
al servidor si las geometr&iacute;as que se van a poner en
73
edici&oacute;n est&aacute;n disponibles o no y permitiendo editar el
74
subconjunto de &eacute;stas que no tienen un "lock". Otros protocolos
75
pueden no permitir la edici&oacute;n si alguien est&aacute; editando,
76
etc.<br>
77
</div>
78
<div style="margin-left: 40px;">Al terminar la edici&oacute;n se
79
deber&aacute;n procesar las instrucciones necesarias para modificar
80
s&oacute;lo las geometr&iacute;as afectadas, es decir, eliminar las
81
geometr&iacute;as que hayan sido eliminadas durante la edici&oacute;n,
82
y modificar las geometr&iacute;as que fueron modificadas durante la
83
edici&oacute;n. Esto &uacute;ltimo requiere algo de complejidad ya que
84
una geometr&iacute;a puede ser modificada m&uacute;ltiples veces
85
durante la edici&oacute;n pero s&oacute;lo debe realizarse una
86
instrucci&oacute;n de modificaci&oacute;n en el servidor (esto no es
87
estrictamente necesario pero s&iacute; conveniente para evitar trabajo
88
a un servidor compartido por un n&uacute;mero indefinido de clientes).
89
Por otro lado si se modifica una geometr&iacute;a y luego se deshace la
90
modificaci&oacute;n, &eacute;sta no ha de modificarse en el servidor,
91
ni si quiera para dejarla como est&aacute; ya que ello puede suponer
92
problemas de sincronismo cuando varios clientes est&aacute;n editando
93
simultaneamente los datos.<br>
94
</div>
95
<br>
96
<big><big><small><small><br>
97
<big><big>Operaciones<br>
98
</big></big></small></small></big></big>&nbsp;&nbsp;&nbsp; Las
99
operaciones que se deben poder realizar sobre un EditableFeatureSource
100
son:<br>
101
<ul>
102
  <li>Obtenci&oacute;n de la geometr&iacute;a i-&eacute;sima. Cabe
103
destacar que esta geometr&iacute;a puede ser:</li>
104
  <ul>
105
    <li>Original de la capa</li>
106
    <li>Modificaci&oacute;n de una geometr&iacute;a original de la capa</li>
107
    <li>Una geometr&iacute;a nueva</li>
108
    <li>Modificaci&oacute;n de una geometr&iacute;a nueva<br>
109
    </li>
110
  </ul>
111
  <li>Modificaci&oacute;n de una geometr&iacute;a. Igual que en el caso
112
anterior puede ser:<br>
113
  </li>
114
  <ul>
115
    <li>Original de la capa</li>
116
    <li>Modificaci&oacute;n de una geometr&iacute;a original de la capa</li>
117
    <li>Una geometr&iacute;a nueva</li>
118
    <li>Modificaci&oacute;n de una geometr&iacute;a nueva<br>
119
    </li>
120
  </ul>
121
  <li>Eliminaci&oacute;n de una geometr&iacute;a.</li>
122
  <ul>
123
    <li>Original de la capa</li>
124
    <li>Modificaci&oacute;n de una geometr&iacute;a original de la capa</li>
125
    <li>Una geometr&iacute;a nueva</li>
126
    <li>Modificaci&oacute;n de una geometr&iacute;a nueva<br>
127
    </li>
128
  </ul>
129
  <li>Adici&oacute;n de una geometr&iacute;a.</li>
130
  <li>Deshacer acci&oacute;n</li>
131
  <li>Rehacer acci&oacute;n</li>
132
</ul>
133
<big><big>Pila de comandos<br>
134
</big></big>&nbsp;&nbsp;&nbsp; Durante la edici&oacute;n pueden suceder
135
imprevistos como que se vaya la luz, se cierre el programa por
136
alg&uacute;n error, etc. Como la edici&oacute;n se realiza de manera
137
transaccional, cualquier fallo de este tipo resultar&aacute; en una
138
p&eacute;rdida total de los datos editados hasta el momento. Este
139
problema, se puede enlazar con el mecanismo de deshacer/rehacer
140
comandos y darle soluci&oacute;n de una manera &uacute;nica,
141
manteniendo en disco un fichero dietario en el que se van apilando los
142
comandos que van siendo realizados. Este fichero tendr&aacute; en la
143
cabecera informaci&oacute;n relativa a qu&eacute; fuente de datos
144
estaba siendo editada y la lista de comandos realizados con la
145
finalidad de que se pueda volver al estado en el que estaba cuando se
146
finaliz&oacute; la edici&oacute;n de forma abrupta.<br>
147
</body>
148
</html>