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