<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">El 16 de septiembre de 2015, 11:07, sinorfavela <span dir="ltr">&lt;<a href="mailto:fircorreo@yahoo.es" target="_blank">fircorreo@yahoo.es</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Muchas gracias por el script!<br>
<br>
Como no he hecho nunca uno, hago un par de preguntas (y así trato de<br>
aprender algo):<br>
<br>
-Para la duda que planteaba este hilo, si con este script es necesario<br>
seleccionar varios elementos no tendríamos una visualización distinta para<br>
el elemento seleccionado, ¿no?. Supongo que habría que introducir alguna<br>
línea más para que vaya seleccionando sucesivamente cada elemento de una<br>
capa.<br></blockquote><div><br><br>Por lo que entiendo comentas dos cosas...<br>- Por un lado si se visualizan seleccionadas las geometrias al <br>  exportar a imagen <br>- Y por otro como hacer para que vaya exportando todas las geometrias <br>  de una capa en lugar de las seleccionadas. <br><br>Te voy comentando.<br><br>Este pequeño script no trabaja con el documento mapa (aunque podria hacerlo), <br>si no con la opcion de exportar la vista a imagen. El problema de que no<br>muestra las geometrias seleccionadas esta en el &quot;documento mapa&quot;, no en la<br>vista, y como estamos exportando la imagen de la vista estas si se muestraran<br>seleccionadas.<br><br>Por otro lado, si lo que quisiesemos es exportar a imagen todas las geometrias<br>de una capa y ademas que estas esten seleccionadas tendriamos que, en lugar<br>de recorrernos solo los elementos seleccionados <br><br>  ...<br>  for f in capa.getSelection():<br>  ...<br><br>Recorrernos todos los elementos de la capa:<br><br>  ...<br>  for f in capa.features():<br>  ...<br><br>Y si quisiesemos que cada elemento de la capa estuviese seleccionado, tendriamos<br>que seleccionarlo:<br><br>  ...<br>  for f in capa.features():<br>    capa.getSelection().deselectAll()<br>    capa.getSelection().select(f)<br>  ...<br><br>El script completo quedaria:<br><br>#---------&gt;&lt;-- inicio de script --&gt;&lt;-----------------<br><br>from commonsdialog import *<br>from gvsig import *<br>from com.sun.jimi.core import Jimi<br>from org.gvsig.app import ApplicationLocator<br><br>import time<br><br>def main(*args):<br>  application = ApplicationLocator.getManager()<br>  docvista = currentView()<br>  capa = currentLayer()<br>  if docvista == None:<br>    msgbox(&quot;Debera tener activa una vista&quot;)<br>    return<br>  if capa == None:<br>    msgbox(&quot;Debera tener activa una capa con geometrias seleccionadas&quot;)<br>    return<br>    <br>  docwin = application.getDocumentWindow(docvista())<br>  n = 1<br>  for f in capa.features():<br>    # Seleccionamos el elemento para que salga seleccionado en<br>    # la imagen <br>    capa.getSelection().deselectAll()<br>    capa.getSelection().select(f)<br>    # Centramos la vista en la geometria asociada al elemento <br>    # seleccionado.<br>    encuadre = f.geometry().getEnvelope()<br>    docvista.getMapContext().getViewPort().setEnvelope(encuadre)<br>    # Esperamos un par de segundos a que se termine de pintar<br>    # la vista.<br>    time.sleep(2) <br>    # Obtenemos la imagen de la vista<br>    img = docwin.getMapControl().getImage()<br>    pathname = &quot;/tmp/img%02d.png&quot; % n<br>    Jimi.putImage(img,pathname)<br>    n += 1<br><br>#---------&gt;&lt;-- fin de script --&gt;&lt;-----------------<br> <br>Por cierto, en el correo anterior me habia dejado un &quot;import&quot; al copiarlo.<br>  <br> <br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
-Y esta ya es sólo para mis intereses. Me parece entender que con &quot;encuadre<br>
= f.geometry().getEnvelope()&quot; se centra la vista en la envolvente de cada<br></blockquote><div><br>  <br>Con:<br>    encuadre = f.geometry().getEnvelope()<br>Calculamos la envolvente de la geometria actual (estamos en un bucle recorriendo<br>los elementos) Y con:<br><br>    docvista.getMapContext().getViewPort().setEnvelope(encuadre)<br><br>Centramos la vista en esa envolvente.<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
objeto. Si estos no son iguales y los quisiera a la misma escala, ¿tendría<br>
que añadir una línea más posterior que cambiase la vista a una escala común<br>
siempre?<br>
<br></blockquote><div><br>Lo que comentas de mantener la misma escala puede estar mas complicado.<br>Una aproximacion simple podria ser que en lugar de centrar la vista en la envolvente<br>de cada geometria lo que hiciesemos fuese calcular el centroide de la geometria<br>y centrar la vista en ese punto manteniendo la misma area de visualizacion que <br>tenemos en la vista inicialmente. El efecto seria el mismo que si fuesemos<br>haciendo &quot;pan&quot; sobre el centroide de cada elemento de la vista sin cambiar<br>la escala. Lleva algunos calculos mas pero no es complicado.<br><br>El script completo seria algo como:<br><br>#---------&gt;&lt;-- inicio de script --&gt;&lt;-----------------<br><br>from gvsig import *<br>from commonsdialog import *<br>from geom import *<br>from com.sun.jimi.core import Jimi<br>from org.gvsig.app import ApplicationLocator<br><br>import time<br><br>def centrarEnPunto(mapcontext, punto):<br>      # Obtenemos la extension actual del mapa que se esta visualizando<br>      envelope = mapcontext.getViewPort().getAdjustedEnvelope()<br>      <br>      # Calculamos cuanto hay que desplazarlo para que este centrado en el<br>      # punto que indicamos<br>      movX = punto.getX()-envelope.getCenter(0)<br>      movY = punto.getY()-envelope.getCenter(1)<br><br>      # Calculamos las nuevas &quot;esquinas&quot; del encuadre que queremos<br>      # tener.<br>      minx = envelope.getLowerCorner().getX() + movX;<br>      miny = envelope.getLowerCorner().getY() + movY;<br>      maxX = envelope.getUpperCorner().getX() + movX;<br>      maxY = envelope.getUpperCorner().getY() + movY;<br><br>      # Creamos el nuevo encuadre<br>      newenvelope = GeometryLocator.getGeometryManager().createEnvelope(<br>            minx, miny,<br>            maxX, maxY,<br>            Geometry.SUBTYPES.GEOM2D);<br>      # Asignamos el nuevo encuadre<br>      mapcontext.getViewPort().setEnvelope(newenvelope);<br><br>def main(*args):<br>  application = ApplicationLocator.getManager()<br>  docvista = currentView()<br>  capa = currentLayer()<br>  if docvista == None:<br>    msgbox(&quot;Debera tener activa una vista&quot;)<br>    return<br>  if capa == None:<br>    msgbox(&quot;Debera tener activa una capa con geometrias seleccionadas&quot;)<br>    return<br>    <br>  docwin = application.getDocumentWindow(docvista())<br>  n = 1<br>  for f in capa.features():<br>    # Seleccionamos el elemento para que salga seleccionado en<br>    # la imagen <br>    capa.getSelection().deselectAll()<br>    capa.getSelection().select(f)<br>    # Centramos la vista en la geometria asociada al elemento <br>    # seleccionado.<br>    centrarEnPunto(docvista.getMapContext(), f.geometry().centroid() )<br>    # Esperamos un par de segundos a que se termine de pintar<br>    # la vista.<br>    time.sleep(2) <br>    # Obtenemos la imagen de la vista<br>    img = docwin.getMapControl().getImage()<br>    pathname = &quot;/tmp/img%02d.png&quot; % n<br>    Jimi.putImage(img,pathname)<br>    n += 1<br>  <br>#---------&gt;&lt;-- fin de script --&gt;&lt;-----------------<br><br>El problema que nos podemos encontrar es que haya algun elemento que no &quot;quepa&quot; en<br>la vista a la escala inicial que habiamos elegido, pero eso siempre nos puede pasar<br>si queremos fijar la misma escala para todos los elementos.<br><br>Espero que te sirva<br>Un saludo<br>Joaquin<br><br><br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Muchísimas gracias de nuevo por el esfuerzo!<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://osgeo-org.1560.x6.nabble.com/Imprimir-elemento-seleccionado-tp5224092p5224430.html" rel="noreferrer" target="_blank">http://osgeo-org.1560.x6.nabble.com/Imprimir-elemento-seleccionado-tp5224092p5224430.html</a><br>
<div class=""><div class="h5">Sent from the gvSIG usuarios mailing list archive at Nabble.com.<br>
_______________________________________________<br>
gvSIG_usuarios mailing list<br>
<a href="mailto:gvSIG_usuarios@listserv.gva.es">gvSIG_usuarios@listserv.gva.es</a><br>
<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:<br>
<br>
<a href="http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios" rel="noreferrer" target="_blank">http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_usuarios</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a href="mailto:jjdelcerro@gvsig.com" target="_blank">jjdelcerro@gvsig.com</a><br><a href="mailto:jjdelcerro@gvsig.org" target="_blank">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a href="http://www.gvsig.com" target="_blank">www.gvsig.com</a><br><a href="http://www.gvsig.org" target="_blank">www.gvsig.org</a></div>
</div></div>