[Gvsig_desarrolladores] DXF a SHP

Antonio Grassi agrassic en gmail.com
Vie Ene 15 15:07:09 CET 2010


Fede, supongo que quieres hacer una extensión que realice la
importación/exportación a través de código de manera automática, o algo por
el estilo. Si es asi, la mecanica sería más o menos la siguiente (hace un
par de meses que empecé a desarrollar sobre gvSig por lo que es probable que
esta no sea la forma más correcta de hacerlo, pero tal vez te de una idea de
las clases que intervienen).

Espero te sirva,
Antonio Grassi

Crear las capas origen y destino:

View v = (View) PluginServices.getMDIManager().getActiveWindow();

IProjection proj = v.getMapControl().getMapContext().getProjection();

Driver d = LayerFactory.getDM().getDriver("nombre driver DXF o SHP");

FLayer l = LayerFactory.createLayer("nombre de capa", (VectorialFileDriver)
d, new File("ruta al archivo DXF o SHP"), proj);

Con esto creas una layer. Los nombres de los drivers puedes verlos en la
salida del log cuando inicias gvsig. Si la capa es nueva, se creará
automáticamente el SHP o DXF. Luego tienes que leer el contenido de una capa
e insertarlo en la otra. Puedes hacerlo mediante el siguiente método (las
capas que creaste en el paso anterior al ser SHP o DXF son instancias de
FLyrVect):

public static void addLayerContent(FLyrVect target, FLyrVect source) throws
    VisitorException, ReadDriverException, InitializeWriterException {

    if (!target.isWritable()) {
        throw new RuntimeException("The layer " + target.getName() + " is
not writeable");
    }

    IWriter writer = ((IWriteable)
target.getSource().getDriver()).getWriter();

    LayerDefinition ld = new LayerDefinition();
    ld = new LayerDefinition();
    ld.setName(target.getName());
    ld.setProjection(target.getProjection());
    ld.setShapeType(target.getShapeType());
    ld.setFieldsDesc(target.getRecordset().getFieldsDescription());

    writer.initialize(ld);
    writer.preProcess();

    int index = 0;

    IFeatureIterator fi = source.getSource().getFeatureIterator();

    while (fi.hasNext()) {
        IRowEdited r = new DefaultRowEdited(fi.next(),
            IRowEdited.STATUS_ADDED, index++);
        writer.process(r);
    }

    writer.postProcess();
    fi.closeIterator();
}



> Hola, me llamo Federico Jeanne.
> Soy un desarrollador de software trabajando con GIS, estoy haciendo un
> visualizador de capas y algunas otras cosas. Hace poco me pidieron para mi
> proyecto la posibilidad de importar/exportar capas DXF y noté que la
> funcionalidad ya está hecha en gvSIG.
> Escribo a ustedes para pedir un poco de ayuda con este asunto, actualmente
> estoy navegando un poco las clases de su proyecto (lo bajé desde el
> repositorio SVN) y estoy tratando de rastrear la funcionalidad que
necesito,
> pero me está costando bastante
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20100115/556c633f/attachment.htm 


Más información sobre la lista de distribución gvSIG_desarrolladores