Suite

Sélection de la valeur zéro à partir du raster et attribution d'une nouvelle valeur en fonction de la majorité de son voisinage à l'aide d'ArcGIS Spatial Analyst


J'ai une couche raster qui a les valeurs +1, -1 et zéro. Maintenant, je veux sélectionner les pixels dont la valeur est zéro et leur attribuer de nouvelles valeurs basées sur la majorité de ses cellules voisines 5*5.

Est-il possible de le faire à l'aide d'ArcGIS Spatial Analyst ?

J'ai essayé les statistiques focales mais ce n'est pas exactement ce que je veux.


Je pense que vous avez besoin d'un processus en deux étapes.

  1. Cours Statistiques focales, en utilisantMAJORITÉcomme type de statistiques. Le raster résultant (appelons-leFocStat) servira de référence.
  2. Cours Calculatrice raster (Map Algebra) pour filtrer de sorte que seules les cellules qui étaient à l'origine nulles utiliseront le résultat des statistiques focales. Expression du calculateur raster :Con(VotreRaster == 0, FocStat, VotreRaster)

    Alternativement, vous pouvez utiliser le Con outil, en utilisant le raster d'origine (VotreRaster) comme condition vraie,FocStatcomme la fausse condition, etValeur == 0comme condition.


Utiliser les systèmes d'information géographique pour reconceptualiser les relations spatiales et le contexte écologique 1

Dans cet article, l'auteur montre comment un logiciel de système d'information géographique (SIG) peut être utilisé pour reconceptualiser les relations spatiales et le contexte écologique et résoudre le problème des unités de surface modifiables. Pour ce faire, l'auteur utilise le SIG pour (1) tester une catégorie importante d'hypothèses spatiales (hypothèses de proximité spatiale), (2) surmonter les problèmes méthodologiques qui surviennent lorsque les ensembles de données ne sont pas spatialement comparables, et (3) mesurer le contexte écologique. . L'auteur présente un ensemble de techniques de construction de variables SIG conçues pour accomplir ces tâches, illustre empiriquement ces techniques en les utilisant pour tester des hypothèses de proximité spatiale tirées de la littérature sur les inégalités environnementales, et démontre que les résultats obtenus à l'aide de ces techniques sont méthodologiquement supérieurs à et substantiellement différents des résultats obtenus en utilisant les techniques traditionnelles. Enfin, l'auteur démontre que ces techniques sont le produit d'une conceptualisation alternative de l'espace physique qui permet aux sociologues de développer de nouvelles façons de penser et de mesurer les relations spatiales, le contexte écologique et les inégalités sociales basées sur le lieu et qui leur donne la capacité de reconceptualiser problèmes méthodologiques à base spatiale auxquels ils sont confrontés depuis des années.


Considérations anisotropes lors de l'interpolation de la bathymétrie du chenal

La modélisation numérique de la dynamique des écoulements dans les chenaux fluviaux peut nécessiter l'interpolation spatiale de mesures dispersées de l'élévation bathymétrique pour obtenir des élévations aux nœuds de maillage informatique. Cet article examine les diverses méthodes d'interpolation spatiale utilisées pour interpoler la bathymétrie des canaux fluviaux. Les méthodes d'interpolation couramment utilisées, à savoir la pondération de distance inverse, la spline (tension et régularisée), le voisin naturel, TopoGrid et le krigeage ordinaire (isotrope et anisotrope) sont évaluées dans l'environnement ArcGIS en utilisant des critères d'erreur quadratique moyenne (RMSE). Pour étudier les effets anisotropes, les méthodes d'interpolation sont évaluées dans deux systèmes de coordonnées différents : un cartésien (X, oui) système de coordonnées et un système orienté flux (s, m) système de coordonnées. En utilisant les données de la rivière Brazos au Texas, il est montré que TopoGrid, voisin naturel et krigeage ordinaire, qui ne tient pas compte de l'anisotropie dans les données, a donné de meilleurs résultats que le krigeage anisotrope dans le système de coordonnées cartésiennes. Dans le système de coordonnées orienté flux, les performances des méthodes d'interpolation spatiale anisotrope sont significativement meilleures (réduction de 40 % du RMSE) par rapport aux méthodes d'interpolation isotrope. Une version modifiée de la méthode de pondération par distance inverse, appelée pondération par distance inverse elliptique (EIDW), est développée pour tenir compte de l'anisotropie des rivières. Les résultats RMSE de l'application de l'EIDW sont proches de ceux du krigeage anisotrope, offrant ainsi une alternative simple et plus rapide en termes de calcul aux méthodes de krigeage complexes.


memset (de <string.h> ) est probablement le moyen standard le plus rapide, car il s'agit généralement d'une routine écrite directement en assembleur et optimisée à la main.

Soit dit en passant, en C++, la manière idiomatique serait d'utiliser std::fill (de <algorithm> ):

lequel mai être optimisé automatiquement dans un memset Je suis sûr que cela fonctionnera aussi vite que memset pour int s, alors qu'il peut fonctionner un peu moins bien pour les types plus petits si l'optimiseur n'est pas assez intelligent. Pourtant, en cas de doute, profil.

Cette question, bien qu'assez ancienne, a besoin de quelques repères, car elle demande non pas la manière la plus idiomatique, ou la manière qui peut s'écrire en le moins de lignes, mais la le plus rapide façon. Et il est idiot de répondre à cette question sans quelques tests réels. J'ai donc comparé quatre solutions, memset vs std::fill vs ZERO de la réponse d'AnT vs une solution que j'ai faite en utilisant les intrinsèques AVX.

A noter que cette solution n'est pas générique, elle ne fonctionne que sur des données de 32 ou 64 bits. Veuillez commenter si ce code fait quelque chose de incorrect.

Je ne prétendrai pas que c'est la méthode la plus rapide, car je ne suis pas un expert en optimisation de bas niveau. C'est plutôt un exemple d'implémentation correcte dépendante de l'architecture qui est plus rapide que memset.

Maintenant, place aux résultats. J'ai calculé les performances pour les tableaux de taille 100 int et long long, alloués à la fois statiquement et dynamiquement, mais à l'exception de msvc, qui a éliminé le code mort sur les tableaux statiques, les résultats étaient extrêmement comparables, je ne montrerai donc que les performances des tableaux dynamiques. Les marques de temps sont en ms pour 1 million d'itérations, en utilisant la fonction d'horloge de faible précision de time.h.

clang 3.8 (En utilisant l'interface clang-cl, optimisation flags= /OX /arch:AVX /Oi /Ot)

gcc 5.1.0 (indicateurs d'optimisation : -O3 -march=native -mtune=native -mavx) :

msvc 2015 (indicateurs d'optimisation : /OX /arch:AVX /Oi /Ot) :

Il se passe beaucoup de choses intéressantes ici: llvm tuant gcc, les optimisations inégales typiques de MSVC (il fait une impressionnante élimination de code mort sur les tableaux statiques et a ensuite des performances terribles pour le remplissage). Bien que mon implémentation soit nettement plus rapide, cela peut être dû uniquement au fait qu'elle reconnaît que l'effacement des bits a beaucoup moins de surcharge que toute autre opération de réglage.

L'implémentation de Clang mérite plus d'attention, car elle est nettement plus rapide. Certains tests supplémentaires montrent que son memset est en fait spécialisé pour zéro - les memsets non nuls pour un tableau de 400 octets sont beaucoup plus lents (

220ms) et sont comparables à ceux de gcc. Cependant, le memsetting différent de zéro avec un tableau de 800 octets ne fait aucune différence de vitesse, c'est probablement pourquoi dans ce cas, leur memset a des performances pires que mon implémentation - la spécialisation est uniquement pour les petits tableaux, et la coupure est juste autour de 800 octets. Notez également que gcc 'fill' et 'ZERO' n'optimisent pas pour memset (en regardant le code généré), gcc génère simplement du code avec des caractéristiques de performances identiques.

Conclusion: memset n'est pas vraiment optimisé pour cette tâche aussi bien que les gens pourraient le prétendre (sinon gcc et msvc et le memset de llvm auraient les mêmes performances). Si les performances sont importantes, alors memset ne devrait pas être une solution finale, en particulier pour ces tableaux de taille moyenne maladroits, car il n'est pas spécialisé pour l'effacement des bits et il n'est pas optimisé à la main mieux que le compilateur ne peut le faire lui-même.


Exemples (tous nécessitent PHP 7.3+)

Obtenir la première/dernière clé et valeur :

Obtenir la première/dernière valeur sous forme de lignes simples, en supposant que le tableau ne peut pas être vide:

Obtenir la première/dernière valeur sous forme de lignes simples, avec les valeurs par défaut pour les tableaux vides :

Ou vous pouvez dissocier le premier si vous souhaitez le supprimer.

Certains tableaux ne fonctionnent pas avec des fonctions telles que list , reset ou current . Ce sont peut-être de "faux" tableaux - implémentant partiellement ArrayIterator, par exemple.

Si vous souhaitez extraire la première valeur quel que soit le tableau, vous pouvez court-circuiter un itérateur :

Votre valeur sera alors disponible dans $value et la boucle se rompra après la première itération. C'est plus efficace que de copier un tableau potentiellement volumineux dans une fonction telle que array_unshift(array_values($arr)).

Vous pouvez également saisir la clé de cette façon :

Si vous appelez cela à partir d'une fonction, revenez simplement tôt :

Le tableau étant passé par valeur à la fonction, le reset() affecte le pointeur interne d'une copie du tableau, et il ne touche pas le tableau d'origine (notez qu'il renvoie false si le tableau est vide).

Aussi, voici une alternative. C'est très marginalement plus rapide, mais plus intéressant. Il permet de changer facilement la valeur par défaut si le tableau est vide :

Pour mémoire, voici une autre de mes réponses, pour le dernier élément du tableau.

Restez simple ! Il y a beaucoup de bonnes réponses ici, mais pour minimiser toute confusion, ces deux-là fonctionnent et réduisent beaucoup les frais généraux :

key($array) obtient la première clé d'un tableau
current($array) obtient la première valeur d'un tableau


ÉDITER:
Concernant les commentaires ci-dessous. L'exemple suivant affichera : string(13) "test de code PHP"

Je ferais echo current($array) .

C'est beaucoup plus efficace que array_values() car la fonction each() ne copie pas l'intégralité du tableau.

PHP 7.3 ajout de deux fonctions pour obtenir la première et la dernière clé d'un tableau directement sans modification du tableau d'origine et sans création d'objets temporaires :

"Il existe plusieurs façons de fournir cette fonctionnalité pour les versions antérieures à PHP 7.3.0. Il est possible d'utiliser array_keys(), mais cela peut être assez inefficace. Il est également possible d'utiliser reset() et key(), mais cela peut changer le pointeur de tableau interne. Une solution efficace, qui ne change pas le pointeur de tableau interne, écrit comme polyfill :"

La plupart fonctionnent ! MAIS pour un appel rapide sur une seule ligne (faibles ressources) :

Bien que cela fonctionne et décemment bien, veuillez également consulter ma réponse supplémentaire : https://stackoverflow.com/a/48410351/1804013

Par défaut, array_slice ne préserve pas les clés, nous pouvons donc utiliser zéro en toute sécurité comme index.

C'est un peu tard pour le jeu, mais j'ai été confronté à un problème où mon tableau contenait des éléments de tableau en tant qu'enfants à l'intérieur, et je ne pouvais donc pas simplement obtenir une représentation sous forme de chaîne du premier élément du tableau. En utilisant la fonction current() de PHP, j'ai réussi ceci :

Grâce à toutes les solutions actuelles qui m'ont aidé à obtenir cette réponse, j'espère que cela aidera quelqu'un un jour!

Je pense que l'utilisation de array_values ​​serait votre meilleur pari ici. Vous pouvez renvoyer la valeur à l'index zéro à partir du résultat de cette fonction pour obtenir "pomme".

Solution 1 - Utilisez simplement la clé. Vous n'avez pas dit que vous ne pouvez pas l'utiliser. :)

Solution 2 - array_flip() + key()

Personne n'a suggéré d'utiliser la classe ArrayIterator :

contourne la stipulation par référence du PO.

J'imagine que l'auteur cherchait juste un moyen d'obtenir le premier élément d'un tableau après l'avoir obtenu à partir d'une fonction (mysql_fetch_row, par exemple) sans générer un STRICT "Seules les variables doivent être passées par référence".

Si c'est le cas, presque toutes les méthodes décrites ici recevront ce message. et certains d'entre eux utilisent beaucoup de mémoire supplémentaire pour dupliquer un tableau (ou une partie de celui-ci). Un moyen simple de l'éviter consiste simplement à attribuer la valeur en ligne avant d'appeler l'une de ces fonctions :

De cette façon, vous n'obtenez pas le message STRICT à l'écran, ni dans les journaux, et vous ne créez pas de tableaux supplémentaires. ça marche avec à la fois indexé ET associatif tableaux.


Le premier type de modèle de régression que vous allez créer est un modèle de régression linéaire généralisée (GLR). Vous utiliserez l'un des outils de géotraitement ArcGIS Spatial Statistics.

Pour ouvrir le volet Géotraitement, sur le ruban, cliquez sur l'onglet Analyse et dans le groupe Géotraitement, cliquez sur Outils .

  • Pour Entités en entrée , sélectionnez kc_house_data .
  • Pour Variable dépendante , sélectionnez le prix .
  • Pour Type de modèle , acceptez l'option par défaut Continu (Gaussien)

Vous pouvez utiliser l'outil Régression linéaire généralisée (GLR) pour prédire différents types de variables dépendantes. Le modèle correct à utiliser dépend du type de la variable dépendante. Étant donné que vous prévoyez une variable continue (prix de vente), vous utiliserez un modèle gaussien pour prédire le prix de vente de la maison.

Si vous prédisiez une variable cible qui était 0 ou 1 (une variable binaire), par exemple si une maison s'est vendue pour plus de 500 000 $, vous utiliseriez l'option binaire (logistique) de cet outil.

Si la variable cible était un décompte, comme le nombre de personnes faisant une offre pour la maison, vous utiliseriez l'option décompte (Poisson) de cet outil.

Dans l'exploration de la matrice de nuage de points, vous avez déterminé que sqft_living est une bonne variable à utiliser pour prédire le prix de vente des maisons.

Vous allez créer plusieurs modèles GLR, il est donc recommandé de donner des noms significatifs aux différentes sorties. Ce nom indique la variable de prédiction et la méthode.

Vous ne définirez aucune entrée dans la section Options de prédiction. Dans cette étape, vous effectuez une régression exploratoire pour définir un modèle décrivant le prix d'une maison en fonction des caractéristiques de la propriété. En d'autres termes, vous travaillez à comprendre les facteurs potentiels derrière le prix de vente des maisons. A ce stade, vous n'êtes pas concerné par l'attribution d'un prix à une maison où aucun prix de vente n'est attribué (prédiction). Plus tard, vous prévoirez les prix de vente des maisons neuves et cette section de l'outil vous sera utile.

L'outil s'exécute et se termine par un avertissement : AVERTISSEMENT 001605 : Les distances pour les coordonnées géographiques (degrés, minutes, secondes) sont analysées à l'aide des distances chordales en mètres .

Les mesures de distance à la corde sont utilisées car elles peuvent être calculées rapidement et fournissent de bonnes estimations des vraies distances géodésiques. Assurez-vous de projeter vos données si votre zone d'étude s'étend au-delà de 30 degrés. Les distances à la corde ne sont pas de bons estimateurs des distances géodésiques au-delà d'environ 30 degrés.

L'un des résultats de cet outil est une carte des résidus standardisés.

Le vert foncé et le violet foncé indiquent un écart important entre le prix de vente prévu des maisons et le prix de vente réel des maisons.

Le graphique Relation entre les variables affiche les prédictions effectuées par GLR et les points de données réels.

Idéalement, les points de données doivent être proches de la ligne. Plus les points de données sont proches de la ligne, plus la relation est forte entre les deux variables.

Dans ce graphique, les couleurs vertes indiquent une sous-estimation du prix de vente de la maison, où le prix réel de la maison est supérieur à celui prédit par le modèle. Le violet indique une surestimation, où le prix prévu est supérieur au prix réel de la maison.

Les points verts plus foncés semblent se regrouper autour des plans d'eau. Le modèle de régression sous-estime systématiquement le prix de vente des maisons proches des plans d'eau. Il semble que de petits changements dans la taille de l'espace de vie puissent entraîner des changements plus importants du prix d'une maison par un plan d'eau par rapport à une maison située à l'intérieur des terres.

Ensuite, vous évaluerez les diagnostics globaux à partir de la sortie GLR.

Le volet Historique du géotraitement s'affiche.

La fenêtre de détails des résultats de l'outil GLR apparaît.

Vous pouvez agrandir la fenêtre en faisant glisser les bords de la fenêtre.

La valeur R-carré ajustée est de 0,492830. Il s'agit de la même valeur R2 indiquée sur le nuage de points pour le prix par rapport à sqft_living .

Les statistiques Joint F , Joint Wald et Koenker (BP) sont significatives avec des valeurs P ( Prob(>chi-squared) ) d'environ 0 (approximatif en raison de l'arrondi). Cela indique que la probabilité que la relation définie par ce modèle se produise de manière aléatoire est d'environ 0. En d'autres termes, il existe une relation statistiquement significative entre le prix de vente des maisons et la superficie de l'espace de vie modélisé par le RGL.

Vous avez utilisé GLR pour déterminer qu'il existe une relation significative entre la variable sqft_living et le prix . Vous avez également découvert que le modèle GLR sous-estime les valeurs des maisons situées à proximité de plans d'eau. Ensuite, vous chercherez un modèle GLR amélioré en ajoutant une autre variable pour tenir compte de cette sous-estimation. Vous utiliserez les données d'ArcGIS Online pour géo-enrichir votre prédiction.


Abstrait

La sécurité des travailleurs pendant la construction est largement acceptée, mais la sélection de sites sûrs pour un bâtiment n'est généralement pas prise en compte. La sélection d'un site sûr (SSS) dépend en grande partie de la compilation, de l'analyse et de l'affinement des informations d'une zone où un bâtiment est susceptible d'être situé. Les aspects de localisation et topographiques d'une zone située dans des régions vallonnées jouent un rôle majeur dans la SSS, mais sont généralement négligés dans les systèmes traditionnels et basés sur la CAO utilisés pour la sélection de sites. Les architectes et les ingénieurs sélectionnent un site en fonction de leur jugement, de leurs connaissances et de leur expérience, mais les problèmes liés à la sécurité du site sont généralement ignorés. Cette étude a passé en revue la littérature existante sur les techniques de sélection de sites, les codes du bâtiment et les approches des normes existantes pour identifier divers aspects cruciaux pour les SSS dans les régions vallonnées. Une enquête par questionnaire a été menée pour identifier divers aspects que les professionnels de la construction considèrent comme critiques pour la SSS. Cette étude a exploré l'application des systèmes d'information géographique (SIG) dans la modélisation des aspects géographiques et topographiques afin d'identifier les zones d'adéquation. Une méthodologie basée sur le SIG pour localiser un site sûr qui satisfasse à divers aspects de la sécurité spatiale a été développée.


Analyse basée sur la distance

Ensuite, nous explorerons trois différentes analyses basées sur la distance : le voisin le plus proche moyen, les fonctions (K) et (L) et la fonction de corrélation de paires (g) .

Analyse moyenne du plus proche voisin

Ensuite, nous calculerons les distances moyennes du voisin le plus proche (ANN) entre les magasins Starbucks.

Pour calculer la moyenne première distance du plus proche voisin (en kilomètres) set k=1 :

Pour calculer la moyenne seconde distance du voisin le plus proche défini k=2 :

Le paramètre k peut prendre n'importe quel ordre voisin (jusqu'à n-1 où n est le nombre total de points).

La fonction moyenne du voisin le plus proche peut être utilisée pour générer un graphique ANN vs voisin. Dans l'exemple suivant, nous tracerons ANN en fonction de l'ordre des voisins pour les 100 premiers voisins les plus proches :

L'axe du bas montre le numéro d'ordre du voisin et l'axe de gauche montre la distance moyenne en kilomètres.

Fonctions K et L

Pour calculer la fonction K, tapez :

Le tracé renvoie différentes estimations de (K) en fonction de la correction de contour choisie. Par défaut, les corrections isotrope , translate et border sont implémentées. Pour en savoir plus sur ces méthodes de correction des contours, tapez ?Kest sur la ligne de commande. Les fonctions (K) estimées sont répertoriées avec un chapeau ^ . La ligne noire ( (K_) ) représente la fonction théorique (K) sous l'hypothèse nulle que les points sont distribués de manière complètement aléatoire (CSR/IRP). Où (K) tombe sous le (K_ théorique) ligne les points sont réputés plus dispersés que prévu à la distance (r) . Où (K) se situe au-dessus du (K_ théorique) line les points sont considérés comme plus groupés que prévu à la distance (r) .

Pour calculer la fonction L, tapez :

Pour tracer la fonction L avec le Lattendu ligne définie horizontalement :

Fonction de corrélation de paires g

Pour calculer le type de fonction de corrélation de paire :

Comme pour les fonctions Kest et Lest, la fonction pcf génère différentes estimations de (g) en utilisant différentes méthodes de correction de contour ( Ripley et Translate ). La (g) -fonction théorique (g_) dans le cadre d'un processus CSR (ligne pointillée verte) est également affiché à des fins de comparaison. Où le (g) observé est supérieur à (g_) nous pouvons nous attendre à plus de clustering que prévu et où le (g) observé est inférieur à (g_) nous pouvons nous attendre à plus de dispersion que prévu.


Vectorisation des courbes de niveau à partir de cartes topographiques scannées

Dans cet article, nous proposons une méthode générale pour la reconnaissance de contours et la génération de DEM (Digital Elevation Models) à partir de cartes topographiques imprimées disponibles dans le commerce. La reconnaissance automatique des contours d'une carte topographique numérisée est un problème difficile en raison de la présence de contours rapprochés ou brisés, des couches de données qui se chevauchent et des complexités résultant de l'arrière-plan texturé, etc. En commençant par une carte numérisée, notre approche utilise un processus en plusieurs étapes qui comprend largement l'identification des contours. , nettoyage et vectorisation. Alors que les étapes d'identification et de vectorisation sont basées sur le calibrage des techniques de traitement d'images existantes, l'étape de nettoyage utilise une approche modifiée basée sur la distance géodésique.

La technique proposée a été testée sur des régions de contour de complexité variable numérisées à partir d'une feuille topographique Survey of India à l'échelle 1:50 000, numérisée à 300 DPI. Il a été constaté que la technique proposée entraînait une segmentation nette et des contours nets dans le cas de régions de contour régulières. Cependant, différents niveaux d'interventions manuelles ont été nécessaires pour vectoriser les régions de contour complexes représentées sur la carte imprimée.

Points forts

► Nous proposons une procédure pour développer un modèle altimétrique numérique à partir d'une carte topographique papier scannée. ► La procédure proposée surmonte de nombreux défis en raison des caractéristiques cartographiques existantes. ► De bons résultats sont obtenus pour la plupart des cas de test évalués. ► Une correction manuelle est nécessaire dans les régions de fortes pentes et de falaises.


Annexes

ANNEXE

Paramètres empiriques de krigeage bayésien (analyste géostatistique)

Entités en entrée = Entités multipoints situées dans une géodatabase ou un fichier de formes

Champ de valeur Z = Shape.Z (valeurs Z stockées dans le champ de géométrie de forme)

Taille de la cellule de sortie = Variable (100 m à 1 m, selon la densité spatiale de points)

Type de transformation de données = Aucun

Type de modèle de semi-variogramme = Linéaire

Type de surface de sortie = Prédiction (Surface produite à partir de valeurs interpolées)

Paramètres de modèle supplémentaires :

Nombre maximum de points dans chaque modèle local (semi-variogramme) = 150

Facteur de chevauchement du modèle local (facteur de lissage) = Variable (1,5 à 3,5), utilisez 2,5 ou 3 mais réduisez si des problèmes de mémoire surviennent sur le système.

Nombre de semi-variogrammes simulés = 150

Paramètres de quartier de recherche :

Quartier de recherche = Circulaire standard (Maintient plus de détails spatiaux dans le modèle) mais Circulaire lisse génère une surface bathymétrique plus continue et plus lisse. La circulaire lisse a été choisie comme quartier désigné.

Espace de travail = Définir le chemin de l'espace de travail actuel

Coordonnées en sortie = Définir le système de coordonnées en sortie sur le même que les données d'entité multipoint

Étendue du traitement = Définissez l'étendue spatiale sur le fichier de formes de limite MCH ou la classe d'entités pour contraindre l'étendue de sortie EBK.

Analyse raster = Définir la taille de la cellule et définir le masque sur le fichier de formes des limites MCH ou sur une autre couche de classe d'entités appropriée.


Voir la vidéo: ArcMap 10: Suitability analysis using rasters, identifying suitable residential areas 3 of 5 (Octobre 2021).