5 votos

Interactivo "Para cada .... Hacer" bucle?

¿Cuál es la forma más directa y sencilla, espero interactivo, el método para llevar a cabo una Para cada elemento de Do... loop, donde la entrada de la lista es una selección de polígonos?

Una palabra acerca de "interactivo". No me opongo a una solución de script, pero no es el ideal. La idea básica es que todo el proceso sea tan dinámica e inmediata posible. Punto y haga clic en en algunas cosas, hacer algo con él, punto y haga clic en los resultados, hacer algo más, y así sucesivamente durante una hora o así. A continuación, guarde los resultados finales y olvidarse de todo en el medio, todo era ad-hoc y no necesita ser repetido exactamente.

El Software en cuestión es de ArcGIS 10 (con 3D y Spatial Analyst), Arcinfo Workstation, y QGIS 1.7 (aunque no se siente como una solución de un producto diferente es off-topic). En pseudo-código, la idea es:

for each selected poly in "index_layer" do:
   clip "raster_layer" by poly geometry to "d:\out\raster_poly[$ID].tif"

En la siguiente imagen el conjunto seleccionado se describe en la pesada de negro y con halo de texto.

selected polygons over shaded relief

7voto

Adam Puntos 343

Aquí está cómo hacerlo Model Builder de ArcGIS 10. Esto tomará las características seleccionadas de VectorTiles y clip de la InputRaster por cada función seleccionada guardar el valor Predeterminado.gdb con el TileID como parte de la nueva trama nombre.

Recorrer la Selección de características se añade desde el menú Insertar. TileVectors es la Características de Entrada y el campo de grupo es un singular mosaico de identificación de campo. El Clip se agrega desde ArcToolbox. El óvalo azul son las capas en el documento de mapa.

Nota: la variable de sustitución de sintaxis en el resultado final. "output_%TileID%" donde TileID está siendo sustituido por la Función de Entrada de Selección de la variable de grupo.

Después de guardar el modelo, el usuario, el uso de las habituales herramientas de selección en TileVectors y ejecutar el modelo. Usted puede obtener más elaborado mediante la adición de parámetros para las entradas o ubicaciones de salida según sea necesario.

enter image description here

5voto

saint_groceon Puntos 2696

Si usted tiene ArcInfo workstation, existe un módulo llamado Bibliotecario, que tiene una interesante comando llamado VISITAR. No estoy sugiriendo que usted en realidad el uso de Bibliotecario, pero considerar el mirar en lo VISITA no. Ya han pasado muchos años, y no puedo encontrar ninguna documentación en línea, pero como recuerdo de la VISITA permite un bucle a través de un conjunto seleccionado de las baldosas (índice de polígonos) y la ejecución arbitraria de la lma.

La cosa a tener en cuenta acerca de la Visita de comando es que le permite centrarse en la escritura de la lma que se ejecuta para cada icono y no en la mecánica de la visita de los azulejos.
visitor pattern

No recuerdo si la Visita de comando de la siguiente manera el Visitante Patrón de la letra, pero es conceptualmente similar. Una secuencia de comandos que realiza el Clip sería un ejemplo de un hormigón de visitante en este caso, mientras que un objeto que contiene el azulejo polígono sería el ConcreteElement. Su requisito de "hacer algo con él" implica desea una capa de abstracción. El visitante patrón proporciona este. Que le permita presentar una interfaz de usuario para el usuario que le permite elegir de una lista de tantos (hormigón visitantes), por ejemplo, Clip, Disolver etc.

La implementación de este patrón toma más esfuerzo inicial, pero como los nuevos requisitos de surgir, se pagará: a los nuevos visitantes se puede escribir sin tener que re-inventar la visitación de la lógica.

4voto

Pablo Puntos 6414

Si usted está familiarizado con Python, usted podría usar Qgis consola de Python con algo como esto:

#get a pointer to active layer
layer=iface.activeLayer ()

#get a copy of selected features
features=layer.selectedFeatures ()
#create a new feature and a new geometry to hold the output
newgeometry = QgsGeometry()
newfeature=QgsFeature()
# loop
for feature in features:
    geometry=feature.geometry()
    #do something with geometry (see Qgis API: http://doc.qgis.org/head/classQgsGeometry.html)
    #example that combine all geometries:
    newgeometry.combine(geometry)
# geometry->feature->layer
newfeature.setGeometry(newgeometry)
layer.addFeature(newfeature)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X