<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body 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 class="moz-txt-link-freetext" href="https://github.com/oscar9/gvpy">https://github.com/oscar9/gvpy</a><br>
    Código: <a class="moz-txt-link-freetext" href="https://github.com/oscar9/gvpy/blob/master/src/gvpy.py">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<br>
    <br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 17/11/2015 11:53, Ana Calle wrote:<br>
    </div>
    <blockquote
cite="mid:CACeTTzhbUxFJ8-pAxj1X5kM3Fw2ZfgDTt1--DCfHeDUK8Ttfdw@mail.gmail.com"
      type="cite">
      <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 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>