Ich habe eine Contours-Feature-Class mit einem Intervall von 0,2 Metern. Ich möchte nur die Konturen auswählen, die im Abstand von 1 m liegen.
Ich habe versucht, im Dialogfeld "Nach Attributen auswählen" (in ArcMap) die folgende Syntax zu verwenden, aber es werden alle Konturen ausgewählt:
Mod("ELEVATION", 1)=0
Welche Abfrage soll ich ausführen?
arcgis-desktop
sql
select-by-attribute
contour
Devdatta Tengshe
quelle
quelle
Antworten:
Der einfache Trick, um nur Ganzzahlwerte auszuwählen, besteht darin, die folgende Syntax zu verwenden:
Mod(Round("ELEVATION", 0)*10, 10)=0
Diese Multiplikation mit 10 ergibt alle Werte als Ganzzahl, und dann wählen wir nur diejenigen aus, die Vielfache von 10 sind.
Wenn Sie ein Vielfaches einer anderen Zahl auswählen möchten, multiplizieren Sie einfach 10 mit dem Intervall.
Um Konturen in Abständen von 5 m zu erhalten, verwenden Sie:
Mod(Round("ELEVATION",0) * 10, 50)=0
Um Konturen im Abstand von 100 m zu erhalten, verwenden Sie:
Mod(Round("ELEVATION", 0) * 10, 1000)=0
Aktualisieren
Gemäß dem Ratschlag von Whuber im Kommentar unten habe ich die Rundungsfunktion im Abfrageausdruck hinzugefügt.
quelle
MOD
kann es zu Gleitkomma-Rundungsfehlern kommen - und das ist hier entscheidend: Wenn Sie um die niedrigste Stelle niedriger sind, wirdMOD
möglicherweise der falsche Wert zurückgegeben (abhängig von der Implementierung). Ich möchte vorschlagen, die Werte vor dem Anwenden zu rundenMOD
, um diese subtilen (und heimtückischen) Fehler zu verhindern.ROUND
, um eine genauere Rundung zu erzielen.Hier ist eine weitere Abfrageoption. Es funktioniert im Wesentlichen genauso wie die oben aufgeführten Antworten, ist jedoch (meiner Meinung nach) ein bisschen einfacher für verschiedene Szenarien anzupassen.
Anzeige einer durch 10 teilbaren Kontur
Anzeige einer durch 50 teilbaren Kontur
Anzeige von halben Meter Konturen
Anzeige von 10 Meter Konturen mit beliebigem Versatz (zB 10.2, 20.2, 30.2)
Letztendlich ist dies nur eine weitere Option, die Sie in Betracht ziehen sollten.
quelle
Dies sollte ein Kommentar zu der obigen Antwort sein - sorry .
Die Syntax variiert je nach Art der DB, in der Ihre Konturen gespeichert sind. Die angegebene Lösung scheint jedoch Konturen auszuwählen, nachdem ihre Werte gerundet wurden. So wurde zum Beispiel in meinem Test ein ausgewähltes Set mit 0,3 m und 0,4 m erreicht. Tatsächlich wurde keiner der Werte ausgeschlossen.
Diese Gleichung
Mod(Round("ELEVATION" * 10, 0), 2)=0
Hat mir Ergebnisse geliefert, die mit denen des Fragestellers übereinstimmen.
quelle
Um Indexkonturen zu erhalten, verwende ich diese im Feldrechner:
In ARCMAP
'Geben Sie "c" (ohne Anführungszeichen) in das Texteingabefeld am unteren Rand des Dialogfelds ein und klicken Sie auf OK.
In QGIS
"" level "" Auf Konturhöhe einstellen field "200" Auf Intervall der Indexkonturen einstellen
Dann: "1" ist eine Indexkontur und "0" ist keine Indexkontur
quelle
Multiplizieren Sie die Kontur mit 10 und den Modul mit 10, um festzustellen, ob ein Rest vorhanden ist. Wenn es keinen Rest gibt als eine ganze Zahl, dann ist es float.
quelle