Ręczne klasyfikowanie stopniowanych danych poza zakresem w ArcGIS na komputery?

13

Mam dwa pliki kształtów reprezentujące siatki o wartościach symbolizowanych za pomocą stopniowanych kolorów, pokazanych poniżej:

Oryginał

Widać, że dwa pliki kształtów obejmują podobne zakresy danych, ale przypisują nieco inne kolory zakresom w tych danych. Chciałbym symbolizować zakresy w każdym z dwóch plików kształtów za pomocą tych samych kolorów dla tych samych zakresów, umożliwiając łatwiejsze porównywanie plików i pozwalając na użycie jednej legendy.

Jednak gdy próbuję sklasyfikować zakresy z ręcznym interwałem, ArcGIS wymusza, aby zakres, który powinien być najwyższy, obejmował również minimalną wartość z zestawu danych. Możesz to zobaczyć w przedziale „-81.64 - 10.00” lewej ramki danych poniżej. Wymusza to symbolizację całej warstwy tym kolorem. Zasadniczo ArcGIS wymaga, aby minimalna wartość w zbiorze danych była używana jako wartość w jednym z zakresów.

Nowe interwały

Czy istnieje sposób na obejście tej funkcji?

hfisch
źródło
Pamiętam też, że miałem ten problem, chociaż nie pamiętam dokładnie, jak go rozwiązałem. Jeśli sklasyfikujesz jako „równy interwał” i klikniesz dwukrotnie wartości, czy możesz je w ten sposób zmienić?
GISKid,
@GISKid, jak tylko kliknę dwukrotnie, klasyfikacja powraca niestety do „Manual”.
hfisch
Co z dopasowaniem wartości na samym histogramie?
GISKid,
@GISK Zwróciło wartości do wartości minimalnej, jeśli przeciągniesz je poniżej wartości minimalnej.
hfisch
2
Myślę, że najlepszą i najprostszą odpowiedzią na to pytanie jest gis.stackexchange.com/a/136497 - pierwsza (i obecnie akceptowana) odpowiedź jest zdecydowanie za długa dla moich upodobań.
PolyGeo

Odpowiedzi:

12

To zdecydowanie poważny ból, gdy ArcMap stara się być pomocny, nawet jeśli naprawdę tego nie chcesz.

Jednym z obejść, które znalazłem, jest utworzenie nowego tymczasowego zestawu danych i dodanie kilku punktów z minimalnymi i maksymalnymi wartościami, które, jak wiesz, będą potrzebne w danych wyjściowych - pamiętaj, aby objąć cały zakres.

Utwórz swoją symbolikę na podstawie tego fałszywego zestawu danych i zapisz tę symbolikę w pliku warstwy :

wprowadź opis zdjęcia tutaj

... następnie zaimportuj symbolikę z pliku * .lyr do prawdziwego zestawu danych:

wprowadź opis zdjęcia tutaj

Stephen Lead
źródło
1
To rozwiązanie jest mniej hackerskie niż moje. Przełączam się na twoją odpowiedź.
hfisch
Dzięki, działa jak urok, jeśli przeczytasz wszystkie okna dialogowe, które arcmap rzuca ci z wystarczającą ostrożnością.
Luuklag
6

@ChrisW powiedział:

O ile mi wiadomo i mogę znaleźć dowody, nie można ustawić zakresu klasyfikacji poniżej wartości minimalnej w danych.

To skłoniło mnie do myślenia i faktycznie znalazłem sposób na ustawienie zakresu klasyfikacji poniżej wartości minimalnej. Mój oryginalny problem opierał się na fakcie, że do zawarcia minimalnej wartości w danych wymagany był najniższy zakres klasyfikacji.

Jednak takie ograniczenie nie jest nakładane na inne stosowane zakresy klasyfikacji. Dlatego można zmusić dwa (lub więcej) zakresy klasyfikacji, aby spadły poniżej wartości minimalnej w danych. Jeden z nich będzie reprezentował preferowany minimalny zakres klasyfikacji, podczas gdy drugi będzie działał jako fikcyjny zakres zawierający minimalną wartość.


Oto punkt początkowy, który wykorzystałem do klasyfikacji. Każda z warstw w czterech ramkach danych została sklasyfikowana przy użyciu określonego przedziału 10 stóp bez względu na zakresy danych innych warstw.

Punkt początkowy

Maksymalny zakres klasyfikacji w którejkolwiek z czterech ramek danych to „0,01 do 10,00”, a minimalny zakres klasyfikacji to „-110,62 do -110,00” (idealnie będzie to „-119,00 do -110,00”). Ponieważ próbuję utrzymać 10-stopowe odstępy, przekłada się to w sumie na 13 odstępów.


Używam lewej górnej ramki danych jako źródła mojej ogólnej legendy. Zaczynam od otwarcia Właściwości warstwy i przejścia do Klasyfikacji. Ponieważ chcę, aby 13 przedziałów było widocznych, muszę wybrać 14 przedziałów, aby mieć dostępny zakres zastępczy. Robię to, wybierając Metoda jako metodę i tworząc 14 klas.

Krok 1a

Przy zakresach ustawionych w ich bieżącym stanie (z największymi wartościami na górze) wszelkie zmiany wartości wprowadzonych w zakresie nie będą miały wpływu na nic innego niż zakres na samym dole listy. @ChrisW wskazał, że nie jest to błąd, ale raczej funkcja przypisywania wartości przerwania przez ArcGIS. Oto okno Właściwości warstwy po wybraniu metody Ręcznie, ale przed wprowadzeniem jakichkolwiek zmian w zakresach:

Krok 1b


Aby rozwiązać ten problem, tymczasowo odwracam sortowanie warstwy. W tym momencie najniższe zakresy znajdują się na górze, a najwyższe na dole.

Krok 2a

Teraz, jeśli przejdę na dół listy zakresów (gdzie wyświetlany jest najwyższy zakres) i zacznę definiować odpowiednie przedziały od dołu do góry, ArcGIS zapamięta zdefiniowane przeze mnie zakresy:

Krok 2b

Na tym obrazie zdefiniowałem górną wartość w 5 z 14 zakresów, zaczynając od największej wartości (10,00) i pracując w dół.


Kiedy osiągnę szczyt listy i edytuję mój 14. zakres, jego minimalna wartość będzie nadal definiowana jako wartość minimalna w warstwie, ponieważ nie ma pod nią innego zakresu, aby mógł pobrać wartość z:

Krok 3a

Nie ma to jednak znaczenia, ponieważ to zakres manekinów, o którym wspomniałem wcześniej. W tym momencie jeszcze raz odwracam sortowanie warstwy, więc najwyższe zakresy znów znajdują się na górze. Poniższy obraz przedstawia zaktualizowaną legendę dla lewej górnej ramki danych, która teraz odzwierciedla prawidłowe zakresy dla wszystkich czterech ramek danych, w tym dla 14-go zakresu zastępczego:

Krok 3b


Następnym krokiem jest propagowanie tych zmian do pozostałych ramek danych. Pewne problemy są jednak widoczne, gdy próbuję zaimportować symbolikę do innych ramek danych:

Krok 4a

Jak wskazał @ChrisW, wynika to z mojej decyzji, by zacząć od warstwy, która nie ma absolutnie minimalnej wartości we wszystkich ramkach danych. Wygląda na to, że ramka danych nie wyświetla żadnych zakresów, które mieszczą się poniżej zakresów istniejących w pierwotnej ramce danych.

Jeśli zaczynasz od warstwy podobnej do tej, którą zrobiłem, najlepszym rozwiązaniem, jakie znalazłem, jest powtórzenie kroków omówionych powyżej dla każdej z czterech ramek danych; ręczne zdefiniowanie 14 klas, odwrócenie sortowania klas, ponowne zdefiniowanie górnej części każdego zakresu, a następnie cofnięcie sortowania w celu umieszczenia najwyższych zakresów na górze.

Najprostszym rozwiązaniem jest jednak rozpoczęcie procesu klasyfikacji od warstwy o najmniejszej wartości. Opcja Importuj symbolikę może być następnie używana poprawnie dla innych ramek danych.

Krok 4b


Wreszcie mogę usunąć trzy legendy i ukryć zakres manekina w pozostałej legendzie lub przekonwertować go na grafikę i usunąć zakres manekina.

Punkt końcowy

hfisch
źródło
Cieszę się, że udało ci się coś wypracować. Zredagowałem swoją odpowiedź, aby poprawić cytowane przez ciebie błąd (nie jestem pewien, dlaczego to powiedziałem - twoje oryginalne obrazy pokazały , że potrafisz).
Chris W
Właściwie mam problem z odtworzeniem tego. Aby uczynić odpowiedź nieco bardziej przydatną, czy mógłbyś edytować dokładnie w jaki sposób stworzyłeś te zakresy poniżej wartości minimalnej?
Chris W
@ChrisW Znacznie rozwinąłem ten proces. Daj mi znać, jeśli nadal nie ma to sensu!
hfisch
2
Dziękuję za aktualizację. Zrozumiałem problem - istnieje znacząca różnica w sposobie definiowania przerw między oknami dialogowymi klasyfikacji i symboliki, które odnoszą się do tego, co kwestionujesz jako błąd. Zasadniczo automatycznie sortuje wartości podziału, ale najniższy podział poniżej wartości minimalnej jest zawsze powiązany z wartością minimalną i pojawia się na górze (lub na dole w zależności od sortowania). Do Twojej wiadomości, chociaż nie możesz podać całkowitej liczby, możesz dodać lub usunąć zajęcia w Manual, klikając histogram prawym przyciskiem myszy.
Chris W
1
Jeśli chodzi o zastosowanie symboliki do innych ramek danych, jak wspomniano w mojej odpowiedzi, spróbuj zacząć od danych o najniższej wartości (-110,62), wykorzystując ją do początkowej symboliki. Zwracam uwagę na trzecim do ostatniego obrazu, że wartość minimalna klasy manekina wciąż wynosi -61.01 dla wszystkich czterech, co wydaje mi się, dlaczego nic poniżej tego nie renderuje, nawet jeśli jest do tego klasa. Jeśli zaczniesz od najniższej, a wartość minimalna jest wyższa, uważam, że będzie ona uwzględniać lub wyświetlać min. Symboliki w danych min, kiedy zastosujesz symbolikę w innych zestawach danych.
Chris W
5

Myślę, że natknąłem się na ten sam problem ... Jeśli dobrze to rozumiem, masz dwa (lub więcej) zestawów danych i musisz dopasować zakresy skali zestawu danych, aby można było dokonać porównań.

Rozwiązałem to przez:

  1. Utwórz pierwszy zestaw danych, który ma się pojawiać. Idealnie z największym zakresem danych tylko po to, aby symbole można było łatwiej skopiować do drugiego (mniejszego zakresu) zestawu danych.

wprowadź opis zdjęcia tutaj

  1. Utwórz drugi zestaw danych, ale jeszcze nie martw się o żadną symbolikę. W drugim zestawie danych Właściwości warstwy> zakładka Symbolika wybierz ten sam typ klasyfikacji jak w pierwszym zestawie danych, w tym przykładzie używam kategorii> Unikalne wartości, a następnie kliknij przycisk Dodaj wszystkie wartości .

wprowadź opis zdjęcia tutaj

  1. Grupuj wartości, aby mieściły się w odpowiednich zakresach używanych w pierwszym zestawie danych. Wybierz wszystkie wartości dla określonej kategorii, a następnie kliknij prawym przyciskiem myszy i wybierz opcję Grupa . Dwie górne kategorie zostały już pogrupowane na poniższym obrazku, cztery wyróżnione walory zostaną „wciągnięte” w trzecią grupę.

wprowadź opis zdjęcia tutaj

  1. Na tym etapie łatwiej jest mi ponownie wyznaczyć kategorie, aby łatwiej było je śledzić. W tym momencie widać pięć z siedmiu zapełnionych kategorii.

wprowadź opis zdjęcia tutaj

  1. Wreszcie (prawie) i sedno tego problemu, aby dodać puste kategorie, które istnieją poza zakresem danych drugiego zestawu danych. Na karcie Właściwości warstwy> symbolika kliknij przycisk Dodaj wartości i wypełnij wymagane kategorie powyżej i poniżej zakresów danych zgodnie z wymaganiami.

wprowadź opis zdjęcia tutaj

  1. Na koniec ponownie etykietuj nowe puste kategorie, aby odpowiadały pierwszemu zestawowi danych, a następnie ponownie koloruj każdą kategorię, aby pasowała do pierwszej.

wprowadź opis zdjęcia tutaj

Przepraszam, jeśli jest to trochę za uproszczone lub nawet zwykłe złe / złe postępowanie. Od dłuższego czasu korzystam z GIS Stack Exchange i pomyślałem o czasie, w którym zacząłem pisać, więc to mój pierwszy post!

Nige
źródło
2
Niestety, właśnie zdałem sobie sprawę, że OP dotyczy danych stopniowanych i po szybkim sprawdzeniu, teraz uświadomiłem sobie, że moje rozwiązanie jest nieprawidłowe. Przeczytam uważniej następnym razem ....
Nige
4
  1. Wybierz liczbę klas, którą chcesz.
  2. Kliknij symbole prawym przyciskiem myszy i wybierz save class breaks
  3. zapisuje to plik XML, który można otworzyć i edytować w dowolnym edytorze tekstu
  4. edytuj podziały klas, które chcesz w pliku xml i zapisz
  5. ponownie kliknij prawym przyciskiem myszy symbole i zaimportuj nowo edytowany plik podziałów klas

GOTOWY

Craig
źródło
3

Podczas gdy klasyfikacja wykorzystuje podobne zakresy, dane nie dzielą zakresu. Myślę, że rozwiązaniem jest rozwiązanie legendy i przypisania kolorów, a nie faktyczna klasyfikacja.

Zacznij od wyniku w lewym dolnym rogu i przekonwertuj tę legendę na grafikę. Edytuj tekst, aby uzyskać żądane zakresy. Zauważyłem, że wszystkie inne obrazy mają zasięg 10 jednostek, ale ten robi 20 i nakłada się. Na przykład trzy obrazy mają -49,99 do -40,00, ale dolna lewa strona ma -49,99 do -60,00, a następna klasa to -59.99 do -70,00. Obrazy mają również przeciwne zakresy - tj. Trzy są niższą wartością po lewej, podczas gdy dolna lewa to niższa wartość po prawej stronie (która odczytuje dla mnie znacznie bardziej naturalny, zwiększając liczby, jeśli nie wartości od lewej do prawej). Być może najpierw należy rozwiązać te problemy, aby zaoszczędzić trochę czasu, a nie tylko ręczną edycję tekstu.

Po uzyskaniu legendy z zakresami i rampą kolorów, którą lubisz, możesz wrócić do pierwszych dwóch warstw (które są już poprawnie sklasyfikowane) i ręcznie edytować łatkę kolorów każdego zakresu, aby dopasować kolor wybrany dla zakresu w legendzie . Ponieważ dwie warstwy nie będą wyświetlać swoich własnych legend, nie będzie miało znaczenia, że ​​w jednej z nich zakres wynosi w rzeczywistości od -89,99 do -80,00, a w drugiej - od 81,64 do -80,00, ponieważ obie będą miały ten sam kolor .

Należy jednak pamiętać, że oznacza to, że oba zestawy danych mają ten sam zakres, co nie. W rzeczywistości wygląda na to, że będą dwie łaty kolorów, które są używane tylko na jednej mapie (najwyższa i najniższa). Możesz umieścić notatkę na każdej mapie, która podaje ich bezwzględny zakres danych. Używałbym również „do” zamiast „-” między zakresami, ponieważ przy wartościach ujemnych czytanie jest nieco mylące.


Alternatywne rozwiązanie:

O ile wiem i potrafię znaleźć dowody, musisz mieć klasę, która zaczyna się od twojej minimalnej wartości. Możesz ręcznie dodawać klasy (nawet puste) powyżej lub poniżej zakresu danych, ale jedna klasa musi zaczynać się od wartości minimalnej.

Tak więc ustaw swoją symbolikę za pomocą rastra, który zawiera najniższą / minimalną wartość ze wszystkich rastrów. Zdobądź je symbolizowane. Następnie możesz edytować etykietę klasy, aby powiedzieć co chcesz. Więc jeśli twoja najniższa wartość wynosiła 0,4, nadal możesz zmienić etykietę na 0.

Gdy to zrobisz i skonfigurujesz z rampą koloru, którą lubisz, zapisz plik lyr symboliki. Powinieneś być w stanie otworzyć inne rastry i zastosować tę samą symbolikę. Ponieważ wszystkie inne rastry będą miały wyższe wartości, powinny poprawnie klasyfikować, a tylko wartość minimalna wzrośnie (a może ta klasa zostanie odrzucona, jeśli nic w niej nie mieści się). Które ponownie możesz zmienić etykietę klasy na podłogę klasy zamiast wartości rzeczywistej, jeśli nie przeniesie to symboli.

Chris W.
źródło
Możesz faktycznie pominąć krok .lyr i po prostu sklasyfikować jeden raster tak, jak chcesz (zakresy, kolory itp.), A następnie użyć funkcji importu symboliki, aby zastosować to do wszystkich innych rastrów. Otwórz Właściwości warstwy, wybierz kartę Symbolika, wybierz ikonę folderu @ w prawym górnym rogu (co wskaże opcję Importuj po najechaniu na nią kursorem) - a następnie wybierz raster, który chcesz naśladować.
JWallace,
@JWallace Prawda, pod warunkiem, że twoje inne rastry są już załadowane do tego samego dokumentu mapy (być może tej samej ramki danych - nie możesz sobie przypomnieć, czy pozwoli ci to zaimportować symbolikę z innego) i jesteś gotów pozwolić na swoją pracę przy konfigurowaniu symbolika znajduje się tylko w mxd (i możesz zapisać jej kopię zapasową na wypadek zmiany). Mam graficzną odpowiedź obejmującą te kroki tutaj .
Chris W
Dobry chwyt na dziwnych jednostkach dla lewego dolnego wyniku. Myślę, że to był artefakt moich prób ręcznego zdefiniowania zakresów i zdefiniowałem je w odwrotnej kolejności. Użycie „do” zamiast „-” również jest dobre. Problem, który mam z twoim oryginalnym rozwiązaniem, polega na tym, że wymaga dużo pracy ręcznej z kolorowaniem i etykietowaniem, i muszę wygenerować serię tych liczb. Jednak twoje alternatywne rozwiązanie dało mi kilka pomysłów. Myślę, że znalazłem sposób, aby uczynić go nieco bardziej eleganckim i usunąć problemy o minimalnej wartości.
hfisch
3

Łatwiejsze, ale i bardziej brudne rozwiązanie, które zadziałało dla mnie. Nie zapomnij utworzyć kopii zapasowej oryginalnych danych.

  1. Otwórz tabelę atrybutów i rozpocznij edycję
  2. Edytuj dowolne dwie wartości ręcznie, aby uwzględnić minimalną i maksymalną wartość, na której opiera się klasyfikacja (pamiętaj oryginalne wartości)
  3. Zapisz i zakończ edycję
  4. Klasyfikuj na podstawie nowego ekstremum
  5. Zacznij od nowa i ręcznie zastąp zmienione wartości oryginalnymi wartościami
  6. Nie wpłynie to na istniejącą klasyfikację
Alex_A
źródło
2

Myślę, że chodzi o legendę fabularną, ale nie o rastry. Jeśli chodzi o rastry, zignoruj ​​moją sugestię. Zwykle używam tych:

  • Połącz 2 (lub więcej plików kształtów) DZIECI w jeden, nazwijmy to RODZINNY
  • stwórz legendę dla RODZINY
  • importuj symbol dla każdego DZIECKA z RODZINY

Mam nadzieję, że to pomaga, FP

FelixIP
źródło
Po prostu uświadom sobie, że jest bardzo podobny do JWallace
FelixIP
2

Zrobiłem następujące obejście. Stworzyłem własne podziały klas w dokumencie XML i załadowałem go do niejawnej symboliki obu warstw.

  1. Aby uzyskać szablon dokumentu podziału klas XML-dokument: we właściwościach warstwy kliknij prawym przyciskiem myszy zakres klasyfikacji, a następnie „zapisz podziały klas”.
  2. Edytuj dokument XML: wprowadź podziały klas w dokumencie XML, możesz także wprowadzić liczby, które będą poza zakresem twoich zbiorów danych.
  3. Załaduj podziały klas XML: w tym samym menu, w którym zapisałeś szablon (patrz 1), kliknij „wczytaj podziały klas”

    Krok 1 i 3

Krok 2

Maja Ott
źródło
1
Jaka wersja ArcMap? Nie mam opcji zapisywania przerw klasowych w wersji 10.6: i.imgur.com/znDqUpQ.png
matt wilkie
@mattwilkie To nie jest kwestia wersji, ale typu danych. Patrzysz na okno dialogowe symboli dla danych wektorowych, a zapisywanie podziałów klas jest dostępne tylko dla danych rastrowych. Ta odpowiedź w zasadzie powiela odpowiedź Craiga, ale zawiera ilustracje.
Chris W
1

Alternatywnym sposobem jest połączenie wszystkich wartości z każdej warstwy w jedną warstwę, w ten sposób będziesz mieć minimalne i maksymalne wartości w warstwie.

Ilustracja: 1.
połącz wartości ze wszystkich warstw w jedną kolumnę (nazwijmy to jako All_Vals) w arkuszu programu Excel

  1. obok kolumny All_Vals dodaj dwie nowe kolumny o nazwach X i Y i wypełnij je zerami.

  2. W arcmap dodaj arkusz programu Excel jako tabelę i użyj go, aby utworzyć punktową klasę obiektów za pomocą polecenia / narzędzia display xy data, a następnie wyeksportuj warstwę zdarzeń do pliku kształtu (nadam jej nazwę NB_Point) i dodaj ją do ramki danych.

4 Konwertuj plik kształtu NB_Point na wiele typów klas obiektów na warstwach, na przykład jeśli typem twojej warstwy obiektów jest wielokąt, użyj narzędzia bufora, aby utworzyć klasę obiektów wielokąta z pliku kształtu NB_Point (nazwijmy to jako NB_polygon).

  1. Teraz wszystko, co musisz zrobić, to kliknąć prawym przyciskiem myszy ostatnią warstwę NB_polygon i zastosować stopniowaną symbolikę kolorów przy użyciu klasyfikacji naturalnych podziałów, wyeksportować ją do pliku .lyr, aby użyć jej jako warstwy wejściowej podczas korzystania z narzędzia do symbologii warstwy importu dla każdego oryginalnych warstw.

Mam nadzieję, że to pomoże i przepraszamy za wszelkie błędy ortograficzne.

BMB
źródło