6 votos

Establecer el valor de la semilla para los puntos aleatorios en la malla vectorial

Estoy utilizando QGIS 2.18.11 y he superpuesto una cuadrícula de 50m x 50m en un mapa (a través de Vector Grid) y tengo 98 celdas de cuadrícula en total. Lo que necesito es generar 12 puntos al azar por cada celda de la cuadrícula que sea "reproducible". La configuración de la semilla de "RandomPointspolygonfixed.py" no ha funcionado porque el resultado muestra que los puntos aleatorios tienen un patrón similar a través de las células como se muestra en una instantánea de abajo. ¿Hay alguna manera de hacerlo? enter image description here

3voto

Sushant23 Puntos 329

Para añadir 12 puntos aleatoriamente en cada polígono de la cuadrícula, hay que hacer los siguientes pasos:

  • Añade un nuevo campo en la capa de la cuadrícula de polígonos de tipo entero y longitud de 2

enter image description here

  • En la tabla de atributos, seleccione el nuevo campo, introduzca 12 y Actualice todo

enter image description here

  • Ir a Processing Toolbox -> QGIS Geoalgorithms -> Vector Creation Tools -> Random points inside polygons (Variable)

enter image description here

  1. Seleccione la capa de polígonos de la cuadrícula
  2. Estrategia de muestreo: Seleccione Point Count
  3. Seleccione el Nuevo Campo que definió en el primer paso
  4. Guardar el archivo de salida

Aquí está el resultado:

enter image description here

Como puede ver en la vista ampliada, hay 12 puntos distribuidos aleatoriamente dentro de cada polígono.

enter image description here

0 votos

Esto me da puntos aleatorios pero no es "reproducible" (replicable). Ese es mi principal problema. ¿Alguna otra idea, por favor?

2voto

Mat Puntos 196

Encontré este python en mi instalación local (2.18.10) y vi el mismo comportamiento.

Parece que se ha movido a otro lugar en la rama Master en GitHub, por lo que esto cambiará en QGIS 3

Normalmente no sugiero arreglos locales como este ya que

  • pueden causar problemas
  • incluso si no lo hacen, perderá los cambios la próxima vez que actualice QGIS

Dicho esto, mirando el código de RandomPointsPolygonsFixed.py Ya veo por qué puede ocurrir esto

    features = vector.features(layer)
    for current, f in enumerate(features):
        fGeom = QgsGeometry(f.geometry())
        bbox = fGeom.boundingBox()
        if strategy == 0:
            pointCount = int(value)
        else:
            pointCount = int(round(value * da.measure(fGeom)))

        index = QgsSpatialIndex()
        points = dict()

        nPoints = 0
        nIterations = 0
        maxIterations = pointCount * 200
        total = 100.0 / pointCount

        random.seed()  # <-- here's your problem, it's inside the loop!
        ... snip ...

El problema es que random.seed() está dentro del bucle. Eso explicará por qué se repite en cada celda.

Coméntalo, y ponlo fuera del bucle así...

    random.seed(MY_SEED_VALUE)
    features = vector.features(layer)
    for current, f in enumerate(features):
        fGeom = QgsGeometry(f.geometry())
        .. snip ...

Esto parece haber se ha fijado en el Maestro por lo que este comportamiento será diferente en QGIS 3.

Haciendo esto, pude ejecutar Puntos aleatorios dentro de los polígonos (fijos) dos veces y obtuve los mismos resultados...

enter image description here

(Tenga en cuenta que debe reiniciar QGIS después de cualquier cambio de código como éste)

Puede que merezca la pena solicitar que el valor de la semilla sea fijado por el usuario, en lugar de tener que jugar con el código instalado ;-)

0 votos

¡Esto me ha funcionado perfectamente! ¡Muchas gracias @Steven Kay!

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