J'ai une liste contenant plus de 100 000 points au format lat / long que j'ai importé dans qgis.
Maintenant, ce que j'essaie de faire ici est de regrouper tous ces points en groupes de boîtes et j'entends par là essentiellement que je veux diviser la carte en boîtes englobantes.
Mes exigences sont les suivantes:
- aucun groupe en boîte ne devrait avoir MOINS DE 100 et PAS PLUS DE 200 points
- aucun point ne doit être situé dans plus d'un groupe
- tous les points doivent être basés sur leur plus proche voisin
Comment pourrais-je y parvenir grâce à qgis?
Je suppose que l'on peut passer du code de requête personnalisé et enregistrer les résultats ou les boîtes créées en tant que fichier de formes correct? Quelqu'un pourrait-il expliquer comment cela pourrait être fait et à quoi ressemblerait le code?
Comme mentionné, mon objectif est d'avoir un tas de boîtes carrées affichées comme une couche de fichier de formes où, dans chaque boîte, il n'y a pas moins de 100 propriétés et pas plus de 200.
Réponses:
Je peux vous y aider en supposant que vous avez trouvé comment demander (a) la moitié la plus à l'est d'un ensemble de points et (b) la moitié la plus au nord d'un ensemble de points. De ceux-ci, vous pouvez bien sûr facilement obtenir (c) la moitié la plus à l'ouest ou (d) la moitié la plus au sud. (Je ne connais pas QGIS, mais une façon de faire (a) en général est de demander la coordonnée médiane x puis de chercher tous les points dont les coordonnées x dépassent cela. Les solutions pour (b) - (d) sont similaires .)
En utilisant cette capacité, la solution est obtenue avec une récursivité facile. Pour le décrire, supposons qu'il existe une procédure
Half
, implémentant les opérations précédentes, qui prend deux arguments: le premier est un ensemble de points et le second est un code égal autrue
moment où le partitionnement est-ouest est souhaité et égal aufalse
contraire. Il renvoie deux sous-ensembles de son entrée qui le partitionnent comme demandé.Dans ce pseudocode, partition R et S P; La boîte (R,! I, n) est une partition de R dans la direction orthogonale , la boîte (S,! I, n) est une partition de S dans la direction orthogonale, "+" signifie la réunion de l'ensemble théorique, et {} désigne un ensemble. (Alterner le sens de division crée des boîtes plutôt que des bandes.) Le paramètre n spécifie la taille minimale d'un groupe dans la partition; la taille maximale est de 2 n .
Ici, à titre d'illustration, est un ensemble P de 12 891 points aléatoires partitionnés par
Box(P,true,100)
en groupes de 100 à 200. L'algorithme crée 128 boîtes dont 37 ont 100 points et 91 ont 101 points.la source