<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Buenas Ana,<br>
    <br>
    Script completo, con este estoy ejecutando correctamente el
    geoproceso intersección:<br>
    - Hay que cambiar siempre los path de las capas de salida (líneas
    103)<br>
    - Nombres de las capas de entrada (líneas 78-79)<br>
    <br>
    A ver si con este de base de puedes aclarar mejor al convertirlo a
    java.<br>
    <br>
    Un saludo!<br>
    <br>
    from gvsig import *<br>
    <br>
    from org.gvsig.app import ApplicationLocator<br>
    from org.gvsig.fmap.dal import DALLocator<br>
    from org.gvsig.andami import PluginsLocator<br>
    from org.gvsig.fmap.mapcontext import MapContextLocator<br>
    from org.gvsig.fmap.mapcontext.layers.vectorial import FLyrVect<br>
    from es.unex.sextante.outputs import FileOutputChannel<br>
        <br>
    def addDependencyWithPlugin(pluginCode):<br>
        pluginsManager = PluginsLocator.getManager()<br>
        scriptingPlugin =
    pluginsManager.getPlugin("org.gvsig.scripting.app.extension")<br>
       
scriptingPlugin.addDependencyWithPlugin(pluginsManager.getPlugin(pluginCode))<br>
    <br>
    addDependencyWithPlugin("org.gvsig.geoprocess.app.mainplugin")<br>
    <br>
    from es.unex.sextante.core import Sextante, OutputFactory,
    AnalysisExtent<br>
    from es.unex.sextante.gui.core import SextanteGUI<br>
    from org.gvsig.geoprocess.lib.sextante.dataObjects import
    FlyrVectIVectorLayer<br>
    <br>
    def loadShapeFileNew(shpFile, CRS='CRS:84', tocName=False,
    active=False, view=currentView()):<br>
        try:<br>
            CRS = currentView().getProjectionCode()<br>
        except:<br>
            pass<br>
        layer = loadLayerNew('Shape', shpFile=shpFile, CRS=CRS,
    tocName=tocName, )<br>
        if isinstance(view,str):<br>
            view = gvsig.currentProject().getView(view)<br>
        else:<br>
            view= currentView()<br>
        view.addLayer(layer)<br>
        layer.setActive(active)<br>
        return Layer(layer)<br>
        <br>
    def loadLayerNew(layerType, tocName=False, **parameters): #<br>
            try:<br>
                application = ApplicationLocator.getManager()<br>
                datamanager =  application.getDataManager()<br>
                mapcontextmanager = application.getMapContextManager()<br>
                store_parameters =
    datamanager.createStoreParameters(layerType)<br>
                copyToDynObject(parameters, store_parameters)<br>
                store = datamanager.openStore(layerType,
    store_parameters)       <br>
                if tocName!=False:<br>
                    nameStore = tocName<br>
                else:<br>
                    nameStore = store.getName()<br>
                layer = mapcontextmanager.createLayer(nameStore, store)<br>
            except Throwable, ex:<br>
                raise RuntimeException("Can't load layer, "+ str(ex))  <br>
    <br>
            return layer<br>
            <br>
    def gv2s(layer):<br>
          #convertir capa gvsig -&gt; sextante<br>
          slayer = FlyrVectIVectorLayer()<br>
          slayer.create(layer)<br>
          return slayer<br>
          <br>
    def main(*args):<br>
        #Geoproceso  interseccion<br>
    <br>
        #Buscamos el algoritmo<br>
        #Todos los algoritmos a un diccionario<br>
        keySetIterator = Sextante.getAlgorithms().keySet().iterator()<br>
        algorithms = {}<br>
        while(keySetIterator.hasNext()):<br>
          key = keySetIterator.next()<br>
          algorithms = Sextante.getAlgorithms().get(str(key))<br>
          for name in algorithms.keySet():<br>
            algorithms[str(name)] = algorithms.get(name)<br>
    <br>
        algorithmId= "gvSIG-intersection"<br>
        algorithm = algorithms[algorithmId]<br>
        print algorithm<br>
        <br>
        #Definimos parametros<br>
        params = algorithm.getParameters()<br>
        layer1 = gv2s(currentView().getLayer("uno")())<br>
        layer2 = gv2s(currentView().getLayer("dos")())<br>
    <br>
        #Parametros del geoproceso<br>
        #en orden<br>
        paramValues = {0:layer1, 1:layer2, 2:False, 3:False}<br>
        <br>
        for i in xrange(0, params.getNumberOfParameters()):<br>
            param = params.getParameter(i)<br>
            param.setParameterValue(paramValues[i])<br>
                <br>
        #Definomos la extension<br>
        #Sera la suma de las extensiones de ambas capas<br>
        defaultAE = AnalysisExtent(paramValues[0])<br>
        defaultAE.addExtent(AnalysisExtent(paramValues[1]))<br>
    <br>
        #Definimos los objetos de salida<br>
        <br>
        #if
    algorithm.getOutputObjects().getOutput(0).getOutputChannel():<br>
        #    output0 = algorithm.getOutputObjects().getOutput(0)<br>
        #    out0 = output0.getOutputChannel()<br>
        #    out0.setFilename(None)<br>
    <br>
        #Los geoprocesos de gvsig siempre tenemos que establecerles un
    nombre<br>
        path = ["C://temp//11.shp", "C://temp//21.shp",
    "C://temp//31.shp"]<br>
    <br>
        #Definomos los parametros uno a uno con el path<br>
        #Geoproceso de gvsig siempre devuelve 3 capas<br>
        outputSet = algorithm.getOutputObjects()<br>
        if outputSet.getOutputDataObjectsCount() &gt; 1 and
    isinstance(path, list):<br>
            for n in xrange(0, outputSet.getOutputDataObjectsCount()):<br>
                out1 = outputSet.getOutput(n)<br>
                out1.setOutputChannel(FileOutputChannel("New_name"))<br>
                out1channel = out1.getOutputChannel()<br>
                out1channel.setFilename(path[n])<br>
    <br>
    <br>
        correctValues = algorithm.hasCorrectParameterValues()<br>
        print "Corrent Values?: ", correctValues<br>
    <br>
        #Ejecutamos el algoritmo<br>
        outputFactory = SextanteGUI.getOutputFactory()<br>
        algorithm.execute( None, outputFactory)<br>
        print "| Algorithm:",
    list(algorithm.algorithmAsCommandLineSentences)<br>
    <br>
        #Recogemos los objetos de salida en un diccionario<br>
        oos = algorithm.getOutputObjects()<br>
        ret = dict()<br>
        for i in xrange(0,oos.getOutputObjectsCount()):<br>
          oo = oos.getOutput(i)<br>
          value = oo.getOutputObject()<br>
          if isinstance(value, FlyrVectIVectorLayer):<br>
              store = value.getFeatureStore()<br>
              layer =
MapContextLocator.getMapContextManager().createLayer(value.getName(),store)<br>
              store.dispose()<br>
              ret[value.getName()] = layer<br>
              layer.dispose()<br>
        <br>
        #Recorremos el diccionario para cargar en la vista las capas que
    contiene<br>
        r = ret<br>
        for value in r.values():<br>
            if isinstance(value, FLyrVect):<br>
                print "|\t Value:", value.getName().encode("UTF-8")<br>
                path = value.getDataStore().getFullName()<br>
                print "|\t\tPath: ", path<br>
                value = loadShapeFileNew(str(path))<br>
    <br>
    <div class="moz-cite-prefix">On 18/11/2015 15:18, Óscar Martínez
      wrote:<br>
    </div>
    <blockquote cite="mid:564C88C0.1050401@gmail.com" type="cite">
      <meta content="text/html; charset=windows-1252"
        http-equiv="Content-Type">
      Buenas,<br>
      <br>
      Te comento los avances que he hecho para que no vayamos haciendo
      lo mismo a la vez, con esto parece que estoy consiguiendo ejecutar
      ya el geoproceso, falta acabar para capturar los resultados,
      tendré que terminarlo más tarde. También falla a la segunda vez
      que lo ejecutas, tengo que ver como resolvía esto con la librería.<br>
      <br>
      Cualquier cosa me comentas.<br>
      <br>
      Un saludo!<br>
      <br>
      Por ahora lo puedes ejecutar en el módulo de scripting, copias
      este código y debería funcionar. Solo necesitas tener dos capas
      cargadas y configurar su nombre en las líneas 46 y 47:<br>
      <br>
      <br>
      from gvsig import *<br>
      <br>
      from org.gvsig.app import ApplicationLocator<br>
      from org.gvsig.fmap.dal import DALLocator<br>
      from org.gvsig.andami import PluginsLocator<br>
      from org.gvsig.fmap.mapcontext import MapContextLocator<br>
      <br>
      def addDependencyWithPlugin(pluginCode):<br>
          pluginsManager = PluginsLocator.getManager()<br>
          scriptingPlugin =
      pluginsManager.getPlugin("org.gvsig.scripting.app.extension")<br>
         
scriptingPlugin.addDependencyWithPlugin(pluginsManager.getPlugin(pluginCode))<br>
      <br>
      addDependencyWithPlugin("org.gvsig.geoprocess.app.mainplugin")<br>
      <br>
      from es.unex.sextante.core import Sextante, OutputFactory,
      AnalysisExtent<br>
      from es.unex.sextante.gui.core import SextanteGUI<br>
      from org.gvsig.geoprocess.lib.sextante.dataObjects import
      FlyrVectIVectorLayer<br>
      <br>
      def gv2s(layer):<br>
            slayer = FlyrVectIVectorLayer()<br>
            slayer.create(layer)<br>
            return slayer<br>
      def main(*args):<br>
          #Remove this lines and add here your code<br>
      <br>
          print "hola mundo"<br>
          pass<br>
          keySetIterator = Sextante.getAlgorithms().keySet().iterator()<br>
          algorithms = {}<br>
          while(keySetIterator.hasNext()):<br>
            key = keySetIterator.next()<br>
            algorithms = Sextante.getAlgorithms().get(str(key))<br>
            for name in algorithms.keySet():<br>
              algorithms[str(name)] = algorithms.get(name)<br>
      <br>
          algorithmId= "gvSIG-intersection"<br>
          algorithm = algorithms[algorithmId]<br>
      <br>
      <br>
          print algorithm<br>
          <br>
          <br>
          params = algorithm.getParameters()<br>
          print currentLayer()<br>
          layer1 = gv2s(currentView().getLayer("uno")())<br>
          layer2 = gv2s(currentView().getLayer("dos")())<br>
          paramValues = {0:layer1, 1:layer2, 2:False, 3:False}<br>
          <br>
          for i in xrange(0, params.getNumberOfParameters()):<br>
              param = params.getParameter(i)<br>
              param.setParameterValue(paramValues[i])<br>
                  <br>
      <br>
          <br>
          defaultAE = AnalysisExtent(paramValues[0])<br>
          defaultAE.addExtent(AnalysisExtent(paramValues[1]))<br>
      <br>
      <br>
          #print
      algorithm.getOutputObjects().getOutput(0).getOutputChannel()<br>
          #output0 = algorithm.getOutputObjects().getOutput(0)<br>
          #out0 = output0.getOutputChannel()<br>
          #out0.setFilename(None)<br>
          <br>
      <br>
          correctValues = algorithm.hasCorrectParameterValues()<br>
      <br>
          outputFactory = SextanteGUI.getOutputFactory()<br>
          <br>
          algorithm.execute( None, outputFactory)<br>
          <br>
          oos = algorithm.getOutputObjects()<br>
          ret = dict()<br>
          for i in xrange(0,oos.getOutputObjectsCount()):<br>
            oo = oos.getOutput(i)<br>
            value = oo.getOutputObject()<br>
            if isinstance(value, FlyrVectIVectorLayer):<br>
                store = value.getFeatureStore()<br>
                layer =
MapContextLocator.getMapContextManager().createLayer(value.getName(),store)<br>
                store.dispose()<br>
                ret[value.getName()] = layer<br>
                layer.dispose()<br>
      <br>
      <div class="moz-cite-prefix">On 18/11/2015 13:54, Ana Calle wrote:<br>
      </div>
      <blockquote
cite="mid:CACeTTzg9PAWzLUXswXYT+sPg=K9qXnXbZUuoCbm29Gj5f_V30Q@mail.gmail.com"
        type="cite">
        <div dir="ltr">Muchas gracias por tu aporte Oscar, 
          <div>voy a intentar adaptarlo a mi entorno java, a ver si lo
            consigo...</div>
          <div><br>
          </div>
          <div>Gracias, un saludo</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div><br>
          </div>
        </div>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">El 18 de noviembre de 2015, 12:54,
            Óscar Martínez <span dir="ltr">&lt;<a
                moz-do-not-send="true" href="mailto:omartinez@gvsig.com"
                target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:omartinez@gvsig.com">omartinez@gvsig.com</a></a>&gt;</span>
            escribió:<br>
            <blockquote class="gmail_quote" style="margin:0 0 0
              .8ex;border-left:1px #ccc solid;padding-left:1ex">
              <div bgcolor="#FFFFFF" text="#000000"> Buenas,<br>
                <br>
                A falta de que te comenten algo mejor..<br>
                <br>
                Creo que esto es lo que estarías pidiendo y puedo
                ayudarte algo con la parte de ejecutar el geoproceso
                desde java. Desconozco si hay mejor forma de hacerlo que
                la que te comento. Tengo algo que te podría servir,
                aunque está en Jython y la librería esta algo desastrada
                pero algo es algo (como ejemplo).. El problema va a ser
                extraer solo la parte que necesites.<br>
                <br>
                La utilizo para lanzar geoprocesos ya existentes en
                gvSIG desde scripting con una línea de código.  <br>
                Proyecto: <a moz-do-not-send="true"
                  href="https://github.com/oscar9/gvpy" target="_blank">https://github.com/oscar9/gvpy</a><br>
                Código: <a moz-do-not-send="true"
                  href="https://github.com/oscar9/gvpy/blob/master/src/gvpy.py"
                  target="_blank">https://github.com/oscar9/gvpy/blob/master/src/gvpy.py</a><br>
                <br>
                Lo imports que necesites están en el código. Los
                principales que necesitarás creo que son:<br>
                from es.unex.sextante.core import Sextante,
                OutputFactory, AnalysisExtent<br>
                from es.unex.sextante.gui.core import SextanteGUI<br>
                from org.gvsig.geoprocess.lib.sextante.dataObjects
                import FlyrVectIVectorLayer<br>
                <br>
                <br>
                Por encima te comento las partes de código que te pueden
                interesar.. primero tienes que localizar el algoritmo,
                el tuyo tiene el nombre de: "gvSIG-intersection"<br>
                (lineas 57-62)<br>
                    keySetIterator =
                Sextante.getAlgorithms().keySet().iterator()<br>
                    while(keySetIterator.hasNext()):<br>
                      key = keySetIterator.next()<br>
                      algorithms =
                Sextante.getAlgorithms().get(str(key))<br>
                      for name in algorithms.keySet():<br>
                        self.__algorithms[str(name)] =
                algorithms.get(name)<br>
                <br>
                Esto genera un diccionario con todos los algoritmos, al
                cual llamo luego en la línea 545:<br>
                <br>
                    algorithm = self.getAlgorithms()[algorithmId]<br>
                <br>
                Ahora hay que seguir la función execute línea 543, con
                el algoritmo cogido:<br>
                Definir parámetros de intersección:<br>
                <br>
                Necesitas los siguientes parámetros:<br>
                &gt;&gt;&gt; gvpy.algHelp("gvSIG-intersection")<br>
                * Algorithm help: <br>
                 <br>
                Intersección<br>
                *<br>
                 <br>
                Usage: runalg( "gvSIG-intersection",<br>
                                                     LAYER[Vector
                Layer],<br>
                                                     INTER[Vector
                Layer],<br>
                                                    
                SELECTGEOM_INPUT[Boolean],<br>
                                                    
                SELECTGEOM_OVERLAY[Boolean],<br>
                                                     RESULT_POL[output
                vector layer],<br>
                                                     RESULT_LINE[output
                vector layer],<br>
                                                     RESULT_POINT[output
                vector layer],<br>
                                                     );<br>
                &gt;&gt;&gt; <br>
                <br>
                - Accedes a los parámetros del algoritmo con (línea
                261):<br>
                      params = algorithm.getParameters()<br>
                <br>
                      for i in xrange(0,
                params.getNumberOfParameters()):<br>
                          param = params.getParameter(i)<br>
                <br>
                - Preparas los valores:<br>
                Como este geoproceso solo necesita dos capas vectoriales
                es más sencillo. Tienes que transformar las capas de
                gvSIG a una que soporte Sextante (línea 64):<br>
                      """ gvsig layer -&gt; SEXTANTE """<br>
                      slayer = FlyrVectIVectorLayer()<br>
                      slayer.create(layer)<br>
                      return slayer<br>
                <br>
                - Estableces el valor en el parámetro:<br>
                param.setParameterValue(paramValue)<br>
                <br>
                Para los de tipo booleano no creo que tengas problema.<br>
                <br>
                <br>
                Siguiente... la extensión de análisis:<br>
                En tu caso como es solo la intersección entre dos capas,
                supongo que la región de análisis es la suma de las dos
                capas. así que.. (línea 142)<br>
                <br>
                                  self.__defaultAE =
                AnalysisExtent(paramValue)<br>
                                 
                self.__defaultAE.addExtent(AnalysisExtent(paramValue))<br>
                <br>
                con esto crearías una región de análisis basado en una
                capa, y luego añadirías la de la otra capa. Siendo
                paramValue una capa sextante como la que has creado en
                los parámetros.<br>
                <br>
                <br>
                Ahora definir los ficheros de salida: defineOutput
                (línea 413)<br>
                Si no quieres establecer ningún path especifico de
                salida, creo que lo básico sería esta parte (línea 429):<br>
                <br>
                        output0 =
                algorithm.getOutputObjects().getOutput(0)<br>
                        out0 = output0.getOutputChannel()<br>
                        out0.setFilename(None)<br>
                <br>
                <br>
                <br>
                <br>
                Con esto puedes comprobar si todo está correcto:<br>
                correctValues = algorithm.hasCorrectParameterValues()<br>
                <br>
                Siendo:<br>
                self.__outputFactory = SextanteGUI.getOutputFactory()<br>
                <br>
                Ejecutas el algoritmo (línea 456)<br>
                algorithm.execute( None, self.__outputFactory)<br>
                <br>
                <br>
                <br>
                Ahora solo quedaría recoger los resultados:<br>
                Lo mismo, como solo son capas vectoriales de salida,
                también se simplifica, creo que lo único que
                necesitarías sería:<br>
                <br>
                    oos = algorithm.getOutputObjects()<br>
                    ret = dict()<br>
                    for i in xrange(0,oos.getOutputObjectsCount()):<br>
                      oo = oos.getOutput(i)<br>
                      value = oo.getOutputObject()<br>
                      if isinstance(value, FlyrVectIVectorLayer):<br>
                          store = value.getFeatureStore()<br>
                          layer =
MapContextLocator.getMapContextManager().createLayer(value.getName(),store)<br>
                          store.dispose()<br>
                          ret[value.getName()] = layer<br>
                          layer.dispose()<br>
                <br>
                <br>
                Esto lo vuelve a convertir a una capa en gvSIG.<br>
                <br>
                Y creo que eso es todo lo básico...<br>
                <br>
                Puedes darle un intento y si ves que te sigue fallando
                algo me comentas. Si te sigue sin funcionar cuando vaya
                sacando ratos iré intentando hacer un script que use
                solo el de intersección, reducido al mínimo, y de ahí
                seguro que consigues pasarlo a java (básicamente sería
                juntar todo lo que te he comentado).<br>
                <br>
                Un saludo,<br>
                Óscar
                <div>
                  <div class="h5"><br>
                    <br>
                    <br>
                    <br>
                    <br>
                    <div>On 17/11/2015 11:53, Ana Calle wrote:<br>
                    </div>
                  </div>
                </div>
                <blockquote type="cite">
                  <div>
                    <div class="h5">
                      <div dir="ltr">
                        <div>Buenos días, </div>
                        <div>Estoy generando intersecciones entre capas.
                          Estas capas pueden tener entidades con
                          geometrías que presenten errores del tipo
                          'Self-intersection'. </div>
                        <div>He comprobado que no obtengo el mismo
                          resultado intersectando cada geometría entre
                          sí (desde mi desarrollo en java), que mediante
                          el geoproceso de intersección de gvsig (de
                          manera automática desde gvsig), intersectando
                          las capas entre sí. Las diferencias son
                          grandes.</div>
                        <div><br>
                        </div>
                        <div>A ver si alguien me puede ayudar, aportando
                          un ejemplo de cómo poder invocar al geoproceso
                          de intersección que tiene gvsig, desde mi
                          desarrollo en java; o si existe alguna manera
                          de realizar</div>
                        <div>las intersecciones de esas geometrías que
                          pueden ser un tanto conflictivas.</div>
                        <div><br>
                        </div>
                        <div>Muchas gracias de antemano, un saludo</div>
                        <div>Ana</div>
                      </div>
                      <br>
                      <fieldset></fieldset>
                      <br>
                    </div>
                  </div>
                  <pre>_______________________________________________
gvSIG_desarrolladores mailing list
<a moz-do-not-send="true" href="mailto:gvSIG_desarrolladores@listserv.gva.es" target="_blank">gvSIG_desarrolladores@listserv.gva.es</a>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a moz-do-not-send="true" href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a>
</pre>
                </blockquote>
                <br>
              </div>
              <br>
              _______________________________________________<br>
              gvSIG_desarrolladores mailing list<br>
              <a moz-do-not-send="true"
                href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a><br>
              Para ver histórico de mensajes, editar sus preferencias de
              usuario o darse de baja en esta lista, acuda a la
              siguiente dirección: <a moz-do-not-send="true"
href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores"
                rel="noreferrer" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a><br>
              <br>
            </blockquote>
          </div>
          <br>
        </div>
        <br>
        <fieldset class="mimeAttachmentHeader"></fieldset>
        <br>
        <pre wrap="">_______________________________________________
gvSIG_desarrolladores mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a>
</pre>
      </blockquote>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
gvSIG_desarrolladores mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@listserv.gva.es</a>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a class="moz-txt-link-freetext" href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>