Edición vectorial en FMap
La edición vectorial en
FMap se realiza sobre fuentes de datos vectoriales mediante el uso de
ficheros auxiliares, en los cuales se va introduciendo las
geometrías modificadas y añadidas. Para esto, FMap
proporciona la interfaz EditableFeatureSource, la cual proporciona los
métodos adecuados para añadir geometrías y
modificar o eliminar las ya existentes.
La edición se efectuará de manera
transaccional, sólo realizandose la escritura en la fuente de
datos en edición cuando el usuario determine el fin de la
edición. Llegado este momento, se deberá poder
identificar qué ha pasado con cada geometría.
Inicialmente, cada geometría se identifica por su
posición ordinal dentro de la capa que se edita y si durante la
edición, se modifica la geometría i-ésima, se
deberá de situar al geometría modificada en un fichero
auxiliar, manteniendo la información que asocia la
geometría i-ésima con la geometría insertada en el
fichero auxiliar. Para ello habrá que mantener una
colección de correspondencias entre las geometrías y su
ubicación física tras la edición. En el caso de la
eliminación de una geometría se deberá de mantener
la información que indica que dicha geometría ha sido
eliminada. Esto último nos lleva a que durante la
edición, la geometría i-ésima no puede dejar de
existir, puede ser marcada como geometría nula, pero si se
elimina la geometría i-ésima, las siguientes llamadas a
getGeometry(i) del EditableFeatureSource deben devolver una
NullGeometry y en ningún caso la geometría
(i+1)-ésima.
De todo lo anterior se deduce que los ficheros auxiliares irán
creciendo de forma contínua aunque se eliminen
geometrías, por lo
que será necesario crear un mecanismo de compactación. En
dicho mecanismo, lo único que se compacta son los ficheros
auxiliares que estén en uso, creando un fichero sólo con
las geometrías que actualmente estén en uso.
Se identifican fuentes de datos editables de dos
naturalezas. Al
comenzar y terminar la edición, las operaciones a realizar son
distintas en función de dicha naturaleza:
- Los ficheros vectoriales.
Al terminar la edición se
deberá procesar las geometrías en orden y escribirlas en
el fichero que estuviese en edición, machacando el contenido que
hubiese anteriormente.
- Las fuentes de datos remotas con
identificador para las geometrías.
Al comenzar la edición,
protocolos como WFS permiten realizar un "lock" sobre las
geometrías que se van a editar, de forma que se puede preguntar
al servidor si las geometrías que se van a poner en
edición están disponibles o no y permitiendo editar el
subconjunto de éstas que no tienen un "lock". Otros protocolos
pueden no permitir la edición si alguien está editando,
etc.
Al terminar la edición se
deberán procesar las instrucciones necesarias para modificar
sólo las geometrías afectadas, es decir, eliminar las
geometrías que hayan sido eliminadas durante la edición,
y modificar las geometrías que fueron modificadas durante la
edición. Esto último requiere algo de complejidad ya que
una geometría puede ser modificada múltiples veces
durante la edición pero sólo debe realizarse una
instrucción de modificación en el servidor (esto no es
estrictamente necesario pero sí conveniente para evitar trabajo
a un servidor compartido por un número indefinido de clientes).
Por otro lado si se modifica una geometría y luego se deshace la
modificación, ésta no ha de modificarse en el servidor,
ni si quiera para dejarla como está ya que ello puede suponer
problemas de sincronismo cuando varios clientes están editando
simultaneamente los datos.
Operaciones
Las
operaciones que se deben poder realizar sobre un EditableFeatureSource
son:
- Obtención de la geometría i-ésima. Cabe
destacar que esta geometría puede ser:
- Original de la capa
- Modificación de una geometría original de la capa
- Una geometría nueva
- Modificación de una geometría nueva
- Modificación de una geometría. Igual que en el caso
anterior puede ser:
- Original de la capa
- Modificación de una geometría original de la capa
- Una geometría nueva
- Modificación de una geometría nueva
- Eliminación de una geometría.
- Original de la capa
- Modificación de una geometría original de la capa
- Una geometría nueva
- Modificación de una geometría nueva
- Adición de una geometría.
- Deshacer acción
- Rehacer acción
Pila de comandos
Durante la edición pueden suceder
imprevistos como que se vaya la luz, se cierre el programa por
algún error, etc. Como la edición se realiza de manera
transaccional, cualquier fallo de este tipo resultará en una
pérdida total de los datos editados hasta el momento. Este
problema, se puede enlazar con el mecanismo de deshacer/rehacer
comandos y darle solución de una manera única,
manteniendo en disco un fichero dietario en el que se van apilando los
comandos que van siendo realizados. Este fichero tendrá en la
cabecera información relativa a qué fuente de datos
estaba siendo editada y la lista de comandos realizados con la
finalidad de que se pueda volver al estado en el que estaba cuando se
finalizó la edición de forma abrupta.