J'ai deux couches dans ArcGIS: l'une est un point vectoriel et l'autre est une couche raster. Je veux ajouter la valeur de la grille de données raster au point vectoriel. Le problème est que le point vecteur est éloigné de toute grille raster existante avec une valeur, donc la commande "Sample" ne renvoie aucune valeur pour ces points vectoriels.
Ma question est donc la suivante: comment trouver la cellule raster la plus proche à partir d'un point vectoriel et extraire la valeur de la cellule?
En fait, je dois faire deux choses:
- Identifier le contour dans un ranger (généralement 1-2 cellules loin de mon raster existant)
- Attribuez-leur une valeur du raster le plus proche, s'ils se trouvent dans une plage
Modifié: j'ai environ 3000 points vectoriels et mon problème est le suivant:
J'ai besoin d'ajouter la valeur du raster basée sur les emplacements aux points vectoriels. J'ai utilisé l'outil "Sample" et il fonctionne bien pour la plupart des points.
Cependant, il y a une situation comme celle-ci
Le point droit peut obtenir la valeur du raster ("Sample" fonctionne) mais le point gauche ne peut pas en raison des problèmes d'alignement.
Le raster en polygone ne fonctionne pas car je reçois un message d'erreur indiquant que je ne peux pas les transformer en vecteur car ils sont hors du domaine. J'ai aussi des points comme ça
Ces points supérieurs ne doivent pas obtenir de valeurs car ils sont trop éloignés du raster.
J'ai pensé à un moyen de contourner:
Étape 1. Faites d'abord "l'échantillon"
Étape 2. Sélectionnez la valeur nulle après les opérations "échantillon"
Étape 3. Construire des zones tampons (à 1 degré décimal près) sur la base des points nuls
Étape 4. utiliser des statistiques zonales ?? ? ou d'autres outils pour parcourir toutes les cellules raster du tampon, trouver la plus proche, extraire sa valeur et la placer dans le point vecteur.
Je suis bloqué à l'étape 4. Je ne sais pas quel outil ArcSDK je peux utiliser pour réaliser cette fonction.
Ou bien ... Avez-vous une meilleure idée pour y faire face?
J'ai 20 couches raster comme celle-ci et je voudrais le faire automatiquement (en utilisant le générateur de modèles et l'arcobjet).
Sample
outil.Réponses:
Un contour raster occupe un rectangle délimité en bas à gauche par l'origine, ayant des coordonnées (disons) (x0, y0), et en haut à droite par (x1, y1): ce sont des propriétés faciles à découvrir de tout raster. Vous pouvez utiliser ces informations pour déplacer tous les points en dehors de l'étendue du raster vers le point le plus proche sur la limite du raster et extraire les valeurs du raster aux nouveaux emplacements.
De telles tâches sont souvent facilement élaborées en considérant des dimensions plus faibles . L'étendue d'un raster unidimensionnel n'est qu'un intervalle de nombres, disons de x0 à x1> x0, écrit conventionnellement [x0, x1]. Supposons que vous vouliez trouver le point le plus proche dans cet intervalle d'un nombre donné x. Il existe trois cas: x <x0 (x est à gauche), x0 <= x <= x1 (x est dans l'intervalle) et x1 <x (x est à droite). De toute évidence, les points les plus proches sont respectivement x0, x et x1. Une formule pour ce résultat est
x -> min (max (x, x0), x1),
comme vous pouvez le voir en envisageant chacun des trois cas séparément.
Étant donné que l'étendue d'un raster est le produit cartésien de deux intervalles, [x0, x1] * [y0, y1], la même formule fonctionne en deux dimensions. Il suffit de l'appliquer à chaque intervalle. Ainsi, les coordonnées du point projeté peuvent être calculées (dans une calculatrice de champ, par exemple) comme
(x, y) -> (min (max (x, x0), x1), min (max (y, y0), y1).
Voici cette formule en action avec 100 points placés au hasard autour et dans l'étendue d'une grille:
Les lignes en pointillés associent visuellement des points en dehors de l'étendue aux emplacements où ils seront déplacés.
Créez une couche de points à partir de ces coordonnées calculées et appliquez l'
Sample
outil pour extraire les valeurs raster. Joignez les résultats à la couche de points d'origine.En pratique , pour éviter les problèmes d'arrondi à virgule flottante qui pourraient empêcher les nouveaux points de se situer dans l'étendue de la grille, il serait judicieux de rendre x0 et y0 légèrement plus grands que l'origine réelle (vous pouvez leur ajouter la moitié de la taille de la cellule) et, de même, rendre x1 et y1 légèrement plus petits.
En résumé , le workflow consiste à calculer deux champs (les nouvelles coordonnées) dans la table de la couche de points d'origine, à créer une couche d'événements de point à partir de ces nouvelles coordonnées, à exécuter l'
Sample
outil et à effectuer une jointure de base de données (pas une jointure spatiale).Lorsque vous avez beaucoup plus de points vectoriels que de cellules dans le raster , vous devriez préférer la solution donnée par @celenius (qui propose de convertir le raster en points et d'utiliser une jointure spatiale). Normalement, cependant, les rasters ont beaucoup de cellules - des millions à des milliards - et la conversion en points prend tellement de temps et de disques qu'elle doit être abordée avec prudence.
Vous pouvez également accélérer la solution de Celenius en utilisant un calcul raster pour créer une grille entière avec des valeurs uniquement le long de sa frontière. Convertir cela en une couche de points est rapide et facile car il aura peu de points. Appelons cela la «couche limite». Échantillonnez la grille aux points de la couche limite, copiant ainsi les valeurs de la grille dans la table attributaire de la couche limite. Après avoir exécuté
Sample
la couche de points d'origine, supprimez tous les points où un échantillon a été obtenu avec succès. Reliez spatialement la couche limite aux points restants pour terminer le processus d'échantillonnage.(Une façon de créer une grille avec des valeurs uniquement le long de sa frontière consiste à appliquer une opération de voisinage focal qui échoue le long de la frontière: les exemples incluent la recherche de pentes, d'ombrage, de statistiques focales de voisinage 3 x 3. Cela crée une grille avec une cellule à une cellule). anneau épais de NoData autour de son bord. L'utilisation de IsNull et SetNull pour détecter les cellules NoData et convertir entre NoData et les cellules de données produit une grille pleine de valeurs NoData sauf autour de la limite.)
la source
Vous pouvez convertir le raster en points ( ref ), puis effectuer une jointure spatiale sur les points (des rasters) au point.
(Je viens d'apprendre que les points peuvent être joints spatialement ici hier )
la source
Vous pouvez convertir la couche raster en polygone à l'aide de l'outil Raster en polygone et exécuter la jointure spatiale (cliquez avec le bouton droit sur la couche de points et sélectionnez Jointures et relations - Joindre, dans la première liste déroulante, sélectionnez l'option de jointure spatiale et sélectionnez la plus proche) à l'option sur le bouton readio), ou utilisez l'outil Proche.
la source