Mam klasę Contours Featureclass z odstępem 0,2 metra. Chcę wybrać tylko te kontury, które są w odstępie 1 m?
Próbowałem użyć następującej składni w oknie dialogowym „Wybierz według atrybutu” (w ArcMap), ale zaznacza wszystkie kontury:
Mod("ELEVATION", 1)=0
Jakie zapytanie mam uruchomić?
arcgis-desktop
sql
select-by-attribute
contour
Devdatta Tengshe
źródło
źródło
Odpowiedzi:
Prostą sztuczką, aby wybrać tylko wartości całkowite, jest użycie następującej składni:
Mod(Round("ELEVATION", 0)*10, 10)=0
To mnożenie przez 10 powoduje, że wszystkie wartości są całkowite, a następnie wybieramy tylko te, które są wielokrotnościami 10.
Jeśli chcesz wybrać wielokrotność innej liczby, po prostu pomnóż 10 przez przedział.
Aby uzyskać kontury w odstępach co 5 m, użyj:
Mod(Round("ELEVATION",0) * 10, 50)=0
Aby uzyskać kontury w odstępach co 100 m, użyj:
Mod(Round("ELEVATION", 0) * 10, 1000)=0
Aktualizacja
Zgodnie z radą Whubera podaną w komentarzu poniżej dodałem funkcję zaokrąglania w wyrażeniu zapytania.
źródło
MOD
wystąpi błąd zaokrąglania zmiennoprzecinkowego - i to jest tutaj krytyczne: jeśli jesteś niski nawet o najmniej znaczącej cyfrze,MOD
może zwrócić niepoprawną wartość (w zależności od tego, jak jest zaimplementowany). Chciałbym zasugerować zaokrąglenie wartości przed zastosowaniemMOD
jako sposobu zapobiegania tym subtelnym (i podstępnym) błędom.ROUND
aby uzyskać większą precyzję w zaokrąglaniu.Oto kolejna opcja zapytania. W dużej mierze robi to samo, co odpowiedzi wymienione powyżej, ale jest (moim zdaniem) nieco łatwiejszy do dostosowania do różnych scenariuszy.
Aby wyświetlić dowolny kontur podzielny przez 10
Aby wyświetlić dowolny kontur podzielny przez 50
Aby wyświetlić kontury półmetrowe
Aby wyświetlić 10-metrowe kontury z dowolnym przesunięciem (np. 10,2, 20,2, 30,2)
Pod koniec dnia jest to kolejna opcja do rozważenia.
źródło
To miał być komentarz do powyższej odpowiedzi - przepraszam .
Składnia będzie się różnić w zależności od typu DB, w którym przechowywane są kontury, ale dane rozwiązanie wydaje się wybierać kontury po zaokrągleniu ich wartości. Na przykład w moim teście uzyskałem wybrany zestaw, który obejmował 0,3 m oraz 0,4 m. W rzeczywistości nie wykluczył żadnej wartości.
To równanie
Mod(Round("ELEVATION" * 10, 0), 2)=0
Dał mi wyniki, które wydawały się pasować do tego, o co pytał pytający.
źródło
Aby uzyskać kontury indeksu, używam tego w kalkulatorze pola:
W ARCMAP
Wpisz „c” (bez cudzysłowów) w polu wprowadzania tekstu u dołu okna dialogowego i kliknij OK.
W QGIS
„„ poziom ”„ Ustaw na pole wysokości konturu ”200” Ustaw na odstępy konturów indeksu
Zatem: „1” jest konturem indeksu, a „0” nie jest konturem indeksu
źródło
Pomnóż kontur przez 10, a następnie moduł przez 10, aby ustalić, czy jest reszta. Jeśli nie ma nic innego niż liczba całkowita, w przeciwnym razie jest to liczba zmiennoprzecinkowa.
źródło