Suite

Superposer la grille sur les points, puis agréger les points dans chaque cellule de la grille


J'ai un vecteur de valeurs de présence/absence (1,0) et une matrice de données de coordonnées x,y (projetées) spécifiant la position spatiale de chaque valeur (environ 25 000 au total). J'aimerais agréger les données ponctuelles dans des « cellules » et calculer les valeurs en pourcentage (% de présence) pour chaque cellule. Cependant, je veux que les cellules soient arbitrairement positionnées par rapport aux données ponctuelles (c'est-à-dire non déterminées par le secteur de recensement ou tout autre facteur) et avec une taille uniforme fixe (0,5 kilomètre carré chacune).

Donc, essentiellement, j'aimerais superposer une grille de taille fixe sur ma distribution de points, puis calculer le pourcentage de 1 (présence) dans chaque cellule de la grille. Je veux ensuite répéter la procédure plusieurs fois, en modifiant à chaque fois aléatoirement la position de la grille par rapport aux points et en recalculant les pourcentages de chaque cellule. En fin de compte, j'effectuerai des tests spatiaux localisés sur les données de pourcentage.

Je me rends compte qu'il existe probablement plusieurs façons d'aborder cela en utilisant de nombreux outils. J'ai une certaine connaissance de R et du package 'spdep' et une connaissance de base d'ArcGIS. Je serais reconnaissant si quelqu'un pouvait au moins m'orienter dans la bonne direction pour les fonctions R ou ArcGIS qui pourraient être utiles.


Il existe en effet plusieurs manières dans ArcGIS et R. Je vais esquisser les deux classes de solution, vecteur et raster.

Solution vectorielle

Une grille est déterminée par un origine O (qui est un point dans le plan, car le maillage a un sens principalement dans les systèmes de coordonnées projetés) et deux vecteurs de base e et F: les sommets des mailles sont constitués de points de la forme o + je * e + j * F pour les entiers je et j. Correspondant à toute base (e, F) est une paire de covecteurs (eta, phi) qui sont double à la base en ce sens que

eta( e ) = 1, eta( F ) = 0

phi( e ) = 0, phi( F ) = 1.

(Leurs coefficients sont trouvés en inversant la matrice des coefficients de e et F.) L'utilité d'utiliser des covecteurs découle du fait facilement déductible qu'ils extraient les coefficients de e et F de tout indiquer. Pour voir cela, considérez n'importe quel point dans le système de coordonnées de la grille, qui sera nécessairement de la forme

P = O + X e + oui F, d'où

eta( P ) = eta( O + X e + oui F ) = eta( O ) + X eta( e ) + oui eta( F )= eta( O ) + X * 1 + oui * 0 = eta( O) + X

et pareillement

phi( P ) =… = phi( O ) + oui.

Par conséquent, si nous calculons x0 = eta( O ) et y0 = phi( O ) une fois pour toutes, on peut extraire les coordonnées X et oui comme

X = eta( P ) - x0,

oui = phi( P ) - y0.

Le étages de X et oui donner des nombres entiers correspondant à la maille dans laquelle P mensonges. Par conséquent, vous pouvez faire ce qui suit:

  1. Pour chacun de vos points P, calculer je = étage(eta( P ) - x0) et j = étage(phi( P ) - y0). Ce sont des calculs sur le terrain qui peuvent être effectués dans n'importe quel système de base de données (y compris une feuille de calcul). Ils n'utilisent que la multiplication, l'addition et la fonction plancher (ou plus grand entier).

  2. Additionner l'attribut 0/1 en utilisant la concaténation de je et j comme clé.

  3. Aussi, de la même manière que (2), comptez le nombre de points ayant chaque combinaison unique (je, j).

  4. Divisez le résultat de (2) par celui de (3) (un autre calcul de champ).

Pour itérer, changer l'origine et, éventuellement, eta et phi. Si vous souhaitez utiliser des grilles carrées de taille de cellule c, ensuite

  • Générer au hasard u0 entre 0 et c et, indépendamment de cela, générer v0 entre 0 et c. Régler O = (u0, v0).

  • Générer aléatoirement un angle alpha entre 0 et 90 degrés.

  • Régler eta = (cos( alpha ) / c, péché( alpha ) / c). Appelons ces coordonnées (vous, v).

  • Régler phi être perpendiculaire à eta et de même longueur ; un bon choix (un sur deux) est

    phi = (-v, vous).

Voici un exemple. Supposons que la taille de la cellule soit c = 30. Soit l'origine de la grille réglée au hasard sur O = (13.2, 29.1) et supposons que vous ne vouliez pas faire pivoter la grille, donc vous corrigez alpha = 0. Alors

eta = (1/30, 0). alors phi = (0, 1/30).

La carte supérieure montre les contours de eta (plus précisément, les contours de z = eta(x,y) = x/30). La carte du bas montre les contours de phi (plus précisément, les contours de z = phi(x,y) = y/30). Cela illustre comment l'un des covecteurs détermine les colonnes et l'autre covecteur détermine les lignes d'une grille.

A partir de ceux-ci, vous calculez

x0 = eta( O ) = 1/30 * 13.2 + 0 * 29.1 = 13.2/30;

y0 = phi( O ) = 0 * 13.2 + 1/30 * 29.1 = 29.1/30.

Considérez un point P = (400000, 3543220) (qui pourrait être en coordonnées UTM par exemple). Sa cellule est indexée par

je = Étage (1/30 * 400000 + 0 * 3543220 - 13,2/30) = 13332 et

j = Étage (0 * 400000 + 1/30 * 3543220 - 29,1/30) = 118106.

Vous pouvez créer une seule clé à partir de cette paire en les concaténant avec un délimiteur, tel que ",", produisant la chaîne "13333,118106".

Le point P est blanc. Le maillage est obtenu par superposition transparente des deux premières cartes : ensemble, les contours des deux covecteurs décrivent les cellules du maillage. Changer la grille nécessite simplement de changer son origine O et/ou les covecteurs de base eta et phi, puis recalculer les lignes et les colonnes de chaque point P.

Solution raster

L'idée est la même que la solution vectorielle, mais vous exploitez les capacités raster du SIG. Cela rend la rotation difficile, mais vous pouvez modifier arbitrairement l'origine dans ArcGIS en modifiant simplement "l'environnement d'analyse" pour Spatial Analyst.

Il y a des problèmes, cependant. Ce que vous aimeriez faire à chaque itération est

  1. Convertissez les données ponctuelles en grille (ayant des valeurs 0/1 dans les cellules).

  2. Effectuez une opération d'« agrégation » pour résumer les valeurs par groupes de cellules.

En (1), vous devez utiliser une taille de cellule si petite que deux points ne se retrouvent pas dans la même cellule. Cette restriction est sévère s'il y a des clusters de points, mais elle nous est imposée par les limitations d'ArcGIS. Si vous utilisez une taille de cellule qui est une fraction intégrale de la taille de l'agrégat, par exemple 3 m lorsque 30 m sont nécessaires pour l'agrégation, alors tout se passera à merveille.

Commentaires

Lorsque les points sont densément espacés sur toute l'étendue de la grille mais ne sont pas très proches les uns des autres, la solution raster peut être plus rapide que la solution vectorielle. Cependant, en général, la solution vectorielle sera plus flexible (vous pouvez faire pivoter les grilles et il n'y a pas de problème avec les points coïncidents), même si son exécution peut être un peu plus lente. Les calculs sont facilement scriptés dans ArcGIS ou dans R. (Il peut être préférable de rester dans ArcGIS si vous êtes déjà configuré pour le faire.)


Voir la vidéo: Microsoft Excel 2010 - Les courbes #E16 (Octobre 2021).