Comment partitionner spatialement un grand nombre de points?

9

J'ai des données de localisation de clients, avec plus de 130 millions d'enregistrements, répartis dans tout le pays. Ceci est une table spatiale dans PostGIS

Je veux maintenant partitionner l'ensemble du pays en «zones de service», de sorte que chaque zone de service dispose:

  • Au moins 30 clients
  • Est au maximum de 1000 km2.

J'ai fait des recherches sur l'outil d'agrégation d'ArcGIS, mais il ne répond pas à mes critères, car:

  • Il ne prend pas en compte le nombre minimum
  • Je n'ai que Qgis & Grass à ma disposition.

Quel outil / processus puis-je utiliser pour y parvenir?

Devdatta Tengshe
la source

Réponses:

4

J'ai couru une petite expérience:

  • généré 900 points aléatoires
  • les a connectés en utilisant un arbre couvrant minimum
  • évier choisi quelque part au milieu

entrez la description de l'image ici

  • inversé les liens pour former un graphique directionnel, c'est-à-dire que chaque nœud finit par se décharger dans le même puits

entrez la description de l'image ici

  • a exécuté un script que j'utilise pour agréger des bassins versants plus petits en plus gros en essayant d'obtenir une "taille" moyenne de 30.

RÉSULTAT:

entrez la description de l'image ici

Faites-moi savoir si cela vous intéresse, je peux déterrer le script (il est déjà publié quelque part sur ce site) ou expliquer le flux de travail plus en détail. J'ai utilisé ArcGIS.

-------------------------------------

** MISE À JOUR Sept 2017

Il est très similaire à ci-dessus, mais en utilisant l'approche raster, les outils de distance et d'hydrologie d'ArcGIS. La partie délicate est la création d'un arbre couvrant minimum et la recherche de débouchés pour les «bassins versants» au format raster.

Voici les étapes que j'ai suivies:

  • Trianguler les nœuds (points à regrouper), extraire les arêtes de réseau triangulaires, convertir les nœuds en raster WEIGHT :

entrez la description de l'image ici

  • Champ de calcul dans la table des bords: j'utilise (ShapeLength ^ 3 / 1e6). Convertissez en raster, remplissez les espaces avec une valeur très élevée pour créer un raster COST . Cela encourage le flux entre des points proches les uns des autres. On espère que les trajets d'écoulement ressembleront à un arbre couvrant minimum (MST) au lieu d'être près de lignes droites se dirigeant vers l'évier.
  • Choisissez n'importe quel nœud (OUTLET / SINK) et créez un raster Cost Back Link, en utilisant la surface COST et SINK comme source. Convertissez le raster de liaison arrière en raster de direction de flux décent en utilisant Int(Power(2,"backlink"-1)). Accumulez le flux en utilisant la direction du flux et le raster de poids. Comme on peut voir l'astuce avec l'attribution des coûts produit vraiment quelque chose de similaire à MST:

entrez la description de l'image ici

J'ai décidé de regrouper les points par 50. En gardant à l'esprit la structure fractale du réseau, j'ai fixé la limite des points INLET légèrement inférieurs au début des «High Flow Streams», c'est-à-dire Con («FlowAccum»> 45,1). Entrées définies comme des cellules où

Un débit élevé existe et des statistiques focales = 2 et la cellule n'est pas un puits (aucune valeur de données dans la direction du débit) :

entrez la description de l'image ici

Utilisez les entrées comme points d'écoulement et direction d'écoulement pour définir les bassins versants. L'image montre 115 bassins versants dérivés:

entrez la description de l'image ici

Leurs statistiques: moyenne = 50,33, min = 46 et max = 74.

Pour obtenir un deuxième ensemble de bassins versants, il suffit d'effacer le raster WEIGHT sous des bassins versants déjà définis, de calculer l'acpiration du flux, etc.

La méthode fonctionnera pour des millions de points car elle est basée sur un raster, la triangulation de ce nombre de points ne sera pas non plus un problème.

FelixIP
la source
1
Je ne sais pas si cela sera utilisable pour moi, mais cela semble intéressant comme l'enfer .. Veuillez poster le script si vous le pouvez.
Devdatta Tengshe
Je publierai le script plus tard dans la journée ou lundi, j'ai pris une journée de congé. En attendant, jetez un œil à gis.stackexchange.com/questions/179559/… où j'ai décrit l'idée derrière cela
FelixIP
Je l'ai testé sur 100 000 points pendant la nuit. La dernière étape a pris près de 6 heures et ne permet pas l' approche, pas dans ArcGIS du moins. Sans oublier que j'ai dû coder MST moi-même, car l'outil I de Patterson est resté bloqué.
FelixIP
Avez-vous réussi à le résoudre? Il semble que j'aie utilisé une approche raster, je peux publier un workflow si cela vous intéresse /
FelixIP
Je vous en prie. Je l'ai résolu avec une méthode Bruteforce, ce qui était assez bien pour mon objectif; Mais je suis sûr que d'autres pourraient bénéficier de votre nouvelle approche.
Devdatta Tengshe