J'ai une classe Contours Featureclass, avec un intervalle de 0,2 mètre. Je souhaite sélectionner uniquement les contours qui sont à 1 m d'intervalle?
J'ai essayé d'utiliser la syntaxe suivante dans la boîte de dialogue "Sélectionner par attribut" (dans ArcMap), mais elle sélectionne tous les contours:
Mod("ELEVATION", 1)=0
Quelle requête dois-je exécuter?
arcgis-desktop
sql
select-by-attribute
contour
Devdatta Tengshe
la source
la source
Réponses:
L'astuce simple pour sélectionner uniquement des valeurs entières est d'utiliser la syntaxe suivante:
Mod(Round("ELEVATION", 0)*10, 10)=0
Cette multiplication par 10, rend toutes les valeurs entières, puis nous sélectionnons uniquement celles qui sont des multiples de 10.
Si vous souhaitez sélectionner des multiples d'un autre nombre, multipliez simplement 10 par l'intervalle.
Pour obtenir des contours à des intervalles de 5 m, utilisez:
Mod(Round("ELEVATION",0) * 10, 50)=0
Pour obtenir des contours à 100 m d'intervalle, utilisez:
Mod(Round("ELEVATION", 0) * 10, 1000)=0
Mise à jour
Selon les conseils de Whuber donnés dans le commentaire ci-dessous, j'ai ajouté la fonction d'arrondi dans l'expression de requête.
la source
MOD
sera soumis à une erreur d'arrondi à virgule flottante - et c'est essentiel ici: si vous êtes faible, même par le chiffre le moins significatif,MOD
peut retourner la mauvaise valeur (selon la façon dont il est implémenté). Je voudrais suggérer d' arrondir les valeurs avant d'appliquerMOD
comme moyen de prévenir ces erreurs subtiles (et insidieuses).ROUND
pour obtenir plus de précision dans l'arrondi.Voici une autre option de requête. Il fait en grande partie la même chose que les réponses énumérées ci-dessus mais est (à mon avis) un peu plus facile à personnaliser pour différents scénarios.
Pour afficher tout contour divisible par 10
Pour afficher tout contour divisible par 50
Pour afficher les contours d'un demi-mètre
Pour afficher les contours de 10 mètres avec un décalage arbitraire (par exemple 10.2, 20.2, 30.2)
À la fin de la journée, ce n'est qu'une autre option à considérer.
la source
C'était censé être un commentaire sur la réponse ci-dessus - désolé .
La syntaxe varie en fonction du type de base de données dans lequel vos contours sont stockés, mais la solution donnée semble choisir les contours après avoir arrondi leurs valeurs. Ainsi, par exemple, dans mon test, cela a permis d'obtenir un ensemble sélectionné qui comprenait 0,3 m ainsi que 0,4 m. En fait, il n'a exclu aucune des valeurs.
Cette équation
Mod(Round("ELEVATION" * 10, 0), 2)=0
M'a donné des résultats qui semblaient correspondre à ce que le questionneur demandait.
la source
Pour obtenir les contours d'index, j'utilise ceci sur la calculatrice de champ:
Dans ARCMAP
'Tapez "c" (sans guillemets) dans le champ de saisie de texte en bas de la boîte de dialogue et cliquez sur OK.
Dans QGIS
"" niveau "" Régler sur le champ de hauteur de contour "200" Régler sur l'intervalle des contours d'index
Ensuite: "1" est un contour d'index et "0" n'est pas un contour d'index
la source
Multipliez le contour par 10 puis le module par 10 pour déterminer s'il y a un reste. S'il n'y a pas de reste que c'est un entier, sinon c'est float.
la source