8 votos

Seleccionar por ubicación en Python

Tengo una capa de polígonos y una capa de puntos (con coordenadas para cada punto). La capa de polígonos se creó con el plugin MMQGIS (polígonos hexagonales). Quiero seleccionar todos los puntos dentro de cada polígono.

Antes trabajaba con ArcGIS pero quiero cambiar a código abierto. Además, quiero abordarlo a través de un script de Python ya que quiero analizar los datos extraídos. Tengo instalado QGIS 2.8. Estoy un poco abrumado por todas las librerías GIS que hay para Python.

¿Puedo abordar ese tipo de selección con una biblioteca SIG que ya esté instalada con QGIS? Si es así, ¿podría alguien indicarme la dirección correcta?

0 votos

Preguntas y respuestas relacionadas: gis.stackexchange.com/questions/256569/

10voto

Mue Puntos 2469

Suponiendo que quiera ejecutar su script dentro de QGIS (desde un archivo de script o la consola de Python), puede utilizar lo siguiente:

import processing

processing.runalg("qgis:selectbylocation", INPUT, INTERSECT, METHOD, OUTPUT)

Aquí está la descripción de ayuda proporcionada por la consola de Python que define cada parámetro:

processing.alghelp("qgis:selectbylocation")
ALGORITHM: Select by location
    INPUT <ParameterVector>
    INTERSECT <ParameterVector>
    METHOD <ParameterSelection>
    OUTPUT <OutputVector>

METHOD(Modify current selection by)
    0 - creating new selection
    1 - adding to current selection
    2 - removing from current selection

Para crear un script completamente desde cero que no llame a las funciones de QGIS, los siguientes enlaces pueden ayudar a desarrollar una funcionalidad similar:


EDITAR :

Hay un par de posts que podrían ser de alguna utilidad para escribir scripts fuera de QGIS para Mac:

0 votos

Hola Joseph. Gracias por tu respuesta. ¡Quiero utilizar las funciones QGis! Pero creo que no quiero hacer que en la consola QGis pero llamar a un script desde la consola de mi ordenador (OS X 10.10). ¿Qué biblioteca está utilizando allí? ¿O qué librería proporciona QGis y cómo puedo acceder a esa API? ¿Hay algo que leer al respecto?

0 votos

¡No hay problema, Stophface! He editado mi post para incluir enlaces que describen cómo utilizar secuencias de comandos fuera de QGIS para Mac. Yo uso Windows :) En términos de secuencias de comandos, no creo que hay mucha diferencia, la mayor es la configuración de los PATHS creo (yo también soy un principiante!).

0 votos

Sí, esa configuración de ruta es algo que no funciona aquí en absoluto. Pero una vez arreglado, ahorrará mucho trabajo más adelante :) ¿Existe documentación sobre la librería que utiliza QGis? De esta manera no tengo que volver aquí, sino simplemente buscar cosas allí. ¿Es PyQGis?

3voto

N.Hezrony Puntos 11

La respuesta de Joseph es correcta, aunque es necesario incluir otro parámetro: "PREDICADO".

es decir:

processing.run("qgis:selectbylocation", {
    "INPUT":lyr_input,\
    "PREDICATE":0,\
    "INTERSECT":lyr_intersect,\
    "METHOD":0,\
    "OUTPUT":path}
)

Desde processing.algorithmHelp("qgis:selecybylocation") :

PREDICATE: Where the features (geometric predicate)

    Parameter type: QgsProcessingParameterEnum

    Available values:
        - 0: intersect
        - 1: contain
        - 2: disjoint
        - 3: equal
        - 4: touch
        - 5: overlap
        - 6: are within
        - 7: cross

    Accepted data types:
        - int
        - str: as string representation of int, e.g. '1'
        - QgsProperty

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