14 votos

Vecino más cercano Agrupados Selección en QGIS

OK, así que tengo un problema interesante, estoy tratando de resolver. Tengo una lista que contiene más de 100.000 puntos en lat/long formato que me han importado en qgis.

Ahora, lo que estoy tratando de hacer aquí es el grupo de todos estos puntos en el cuadro de los grupos y por los que esencialmente me refiero a que quiero dividir el mapa en las cajas de contorno.

Mis requisitos son los siguientes:

  • no hay caja de grupo debe tener MENOS DE 100 y NO MÁS DE 200 puntos
  • ningún punto debe estar situada en más de un grupo
  • todos los puntos deben estar basadas en su vecino más cercano

Mi pregunta es... ¿cómo podría yo lograr esto a través de qgis?

Estoy asumiendo que uno puede pasar personalizado de consulta de código y guardar los resultados o las cajas creado como un archivo de forma correcta? Podría alguien por favor explique cómo se podría hacer y lo que el código sería así?

Como se ha mencionado, mi objetivo es tener un montón de cajas cuadradas muestra como un shapefile de la capa donde dentro de cada caja hay no menos de 100 propiedades y no más de 200.

Gracias chicos

13voto

cjstehno Puntos 131

Puedo conseguir que parte de la forma, no por el supuesto de que haya averiguado cómo solicitar (a) el extremo oriental de la mitad de un conjunto de puntos y (b) el más septentrional de la mitad de un conjunto de puntos. A partir de estos se puede, por supuesto, obtener fácilmente (c) el punto más occidental de la mitad o (d) la parte más austral de la mitad. (No sé de QGIS, pero una manera de hacerlo (a) en general, la petición de la mediana de la coordenada x y, a continuación, obtener todos los puntos cuyas coordenadas x exceder. Las soluciones de (b) - (d) son similares.)

Con esta capacidad, la solución se obtiene con un fácil de recursividad. Para describirlo, vamos a asumir que hay un procedimiento Half, la implementación de las operaciones anteriores, que toma dos argumentos: el primero es un conjunto de puntos y el segundo es un código igual a true cuando este-oeste de la partición que se desea y la igualdad de a false lo contrario. Devuelve dos subconjuntos de la entrada de la partición, según lo solicitado.

Procedure Box(P: set of points, i: boolean, n: integer)
Begin
    If (Count(P) > 2*n) then
        {R,S} = Half(P,i)
        Q = Box(R,!i,n) + Box(S,!i,n)
    Else
        Q = {P}
    Endif
    Return Q
End

En este pseudocódigo, R y S de la partición P; Cuadro(R,!i,n) es una partición de R en la dirección ortogonal, Cuadro de(S,!i,n) es una partición de S en la dirección ortogonal, "+" significa que forman el conjunto de la teoría de la unión, y {} designa un conjunto. (La alternancia de la división de dirección crea cajas en lugar de tiras.) El parámetro n especifica el tamaño mínimo de un grupo en la partición; el tamaño máximo es de 2 n.

Example

Aquí, a modo de ilustración, es un conjunto P de 12,891 puntos al azar en particiones Box(P,true,100) en grupos de entre 100 y 200 en tamaño. El algoritmo crea 128 cajas de las cuales 37 tienen 100 puntos y 91 de 101 puntos.

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