<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"><<a href="mailto:fircorreo@yahoo.es" target="_blank">fircorreo@yahoo.es</a>></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 "documento mapa", 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>#---------><-- inicio de script --><-----------------<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("Debera tener activa una vista")<br> return<br> if capa == None:<br> msgbox("Debera tener activa una capa con geometrias seleccionadas")<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 = "/tmp/img%02d.png" % n<br> Jimi.putImage(img,pathname)<br> n += 1<br><br>#---------><-- fin de script --><-----------------<br> <br>Por cierto, en el correo anterior me habia dejado un "import" 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 "encuadre<br>
= f.geometry().getEnvelope()" 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 "pan" 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>#---------><-- inicio de script --><-----------------<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 "esquinas" 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("Debera tener activa una vista")<br> return<br> if capa == None:<br> msgbox("Debera tener activa una capa con geometrias seleccionadas")<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 = "/tmp/img%02d.png" % n<br> Jimi.putImage(img,pathname)<br> n += 1<br> <br>#---------><-- fin de script --><-----------------<br><br>El problema que nos podemos encontrar es que haya algun elemento que no "quepa" 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>