Suite

Sélection de zones d'altitude spécifiques contiguës au littoral pour la cartographie des inondations côtières


C'est moins un problème qu'une enquête sur une meilleure façon de faire quelque chose. Je suis curieux de savoir comment les gens pourraient sélectionner, disons, toutes les zones inférieures ou égales à 10 pieds (à partir d'un DEM) qui sont contigu au littoral. Le but de cet exercice serait de cartographier les zones basses le long de la côte qui peuvent être inondées en raison d'une onde de tempête lors d'une tempête côtière.

Voici une version abrégée de la façon dont j'ai fait ce genre de chose :

1) Extrayez du DEM toutes les valeurs inférieures ou égales à 10 pieds à l'aide de l'outil de découpage (raster).
2) Convertissez le raster en polygone à l'aide de l'outil Raster en polygone.
3) Sélectionnez les zones contiguës à la couche du littoral :
a) Sélectionnez toutes les zones de polygone qui coupent la ligne de côte. Exporter la sélection.
b) Ajoutez à la sélection toutes les zones qui croisent la nouvelle sélection. Exportation.
c) Répétez ce processus jusqu'à ce que la différence dans le nombre d'attributs d'une sélection exportée
au prochain atteint 0, ce qui signifie que vous ne sélectionnez plus de nouvelles fonctionnalités lorsque vous sélectionnez
caractéristiques qui se croisent.
4) Supprimez les zones "orphelines" restantes.

C'est vraiment à l'étape "3" que j'essaie de trouver une méthode alternative. Cela peut prendre jusqu'à 20 itérations de cette étape pour sélectionner ces zones pour NYC. Cela semble tellement fastidieux. Je suis vraiment curieux de savoir comment les autres pourraient s'y prendre pour accomplir cette tâche.


Mettre à jour: J'ai trouvé une autre méthode qui élimine l'étape 3 très itérative d'en haut. Je suis toujours curieux de lire comment d'autres pourraient accomplir cette tâche cependant.

Méthode alternative:

1) Extrayez du DEM toutes les valeurs inférieures ou égales à 10 pieds à l'aide de l'outil de découpage (raster).
2) Donnez à chaque cellule raster la même valeur (c'est-à-dire créer un nouveau champ et avoir toutes les valeurs de ce champ = 1).
3) Convertissez raster en polygone à l'aide de l'outil Raster en polygone.
4) Sélectionnez et exportez les entités qui coupent le littoral.
Ce qui précède vous donnera votre zone "inondée" contiguë, mais aucune valeur d'élévation ne lui sera attribuée, comme la première étape des étapes ci-dessus. Pour les récupérer, vous devrez procéder comme suit :

A) Utilisez les entités résultantes (shapefile ou classe d'entités) comme masque pour découper le raster.
B) Convertissez le raster en polygone.


  1. Utiliser la calculatrice raster Con(raster<30,1)

Appliquez le groupe de régions dans l'analyste spatial avec ces options :

  • Convertir la sortie en polygones
  • Sélectionnez-les par littoral
  • Exporter la sélection vers un ensemble de données séparé et le joindre à un ensemble plus grand à l'aide du champ Grid_Code dans les deux

Les enregistrements qui ont une correspondance sont ce dont vous avez besoin


Cela va nécessiter une automatisation, et python est probablement votre meilleur pari. Python a une boucle while, qui répétera un ensemble de commandes tant qu'une condition est remplie. Dans ce cas, la condition serait aucune nouvelle entité sélectionnée.

Voici un exemple non testé. Vous devrez affecter des chemins à vos classes d'entités. coller les chemins entre le r"…" au début (Entredes locauxetMettre fin aux locaux).

Voir les commentaires (après le hachage (#)) pour comprendre ce qui se passe.

#--------------Locals #Coastline feature class chemin complet coastLineFc = r"C:	est	est.gdbCoastline" #Polygon feature class from raster elevFc = r"C: test	est.gdbDEMPolygon" #Emplacement pour l'exportation outLoc = r"C:	est	est.gdb" #Nom de la classe d'entités de sortie #La classe d'entités aura des extensions numériques indiquant chaque itération #ie sortie1, sortie2, etc etc. outName = "DEMPoly_iteration_" #------------Fin des locaux #Importez vos outils ArcGIS import arcpy #Couche d'entités de la classe d'entités polygonales d'altitude #Cela vous permet de sélectionner des entités arcpy .MakeFeatureLayer_management (elevFc, "elevLyr") #Sélection initiale - sélectionnez les polygones coupant la côte arcpy.SelectLayerByLocation_management ("elevLyr", "", coastLineFc) #Variable d'itération - pour nommer la classe d'entités i = 1 #Exporter la première sélection vers la nouvelle classe d'entités iOutName = outName + str(i) arcpy.FeatureClassToFeatureClass_conversion ("elevLyr", outLoc, iOutName) print "Created:", iOutName #Comptage des variables #Définir le décompte initial à zéro oldCount = 0 #Obtenir un nouveau décompte à partir de la sélection newCount = int (arcpy. GetCount_management ("elevLyr").getOutput (0)) #While loop - sélectionnez jusqu'à ce qu'il n'y ait pas de nouvelles sélections tandis que oldCount != newCount: #Ajouter 1 à l'itération i += 1 #Définir l'ancien décompte sur le décompte précédent oldCount = newCount #Sélectionner les polygones qui se croisent à partir de la dernière sélection arcpy.SelectLayerByLoc ation_management ("elevLyr", "", "elevLyr") #Vérifier le nombre d'entités sélectionnées newCount = int (arcpy.GetCount_management ("elevLyr").getOutput (0)) #Vérifier la nouvelle sélection #Quitter la boucle si aucune nouvelle sélection # Rend la boucle while redondante mais pas de mal/pas de faute si newCount == oldCount: break #Export (si nouvelle sélection) iOutName = outName + str(i) arcpy.FeatureClassToFeatureClass_conversion ("elevLyr", outLoc, iOutName) print "Created:", iOutName #Clean up arcpy.Delete_management ("elevLyr") #Done print "Done"


Voir la vidéo: E-NUNDATION: une plateforme web pour la cartographie et la gestion opérationnelle des inondations (Octobre 2021).