Odnosząc się do NaN lub ± ∞ (specjalne wartości zmiennoprzecinkowe) w zapytaniach definicji ArcMap?


10

Przez przypadek odkryłem, jak ArcMap wyświetla użytkownikowi specjalne wartości zmiennoprzecinkowe.

  • + ∞ (dodatnia nieskończoność) jest wyświetlana jako 1.#INF
  • –∞ (ujemna nieskończoność) miałby być wyświetlany jako -1.#INF- Nie zweryfikowałem tego.
  • NaN (nie liczba) jest wyświetlany jako wyrównany do prawej <Null>- nie należy mylić z wyrównaniem do lewej <Null>, co oznacza NULL (brakujące wartości):

    Zrzut ekranu tabeli wyświetlanej w ArcMap, która pokazuje dwa różne typy wartości NULL

    (Przy okazji, uzyskaj unikalne wartości w kalkulatorze polowym, w ogóle nie podaje NaN).

Ale nie odkryłem, jak pisać zapytania dotyczące definicji warstw, aby wybrać wiersze na podstawie tych specjalnych wartości:

  • ColumnName IS NULL wybierze tylko zwykłe wartości NULL, ale nie NaN.
  • ColumnName = 1.#INF jest odrzucany jako niepoprawna składnia.

Czy ktoś wie jak to zrobić?


Fragment kodu C # ArcObjects do przechowywania wartości 1. # INF w polu tabeli (podstawowa koncepcja):

Zgodnie z prośbą. Ponieważ nie jestem już w pracy, poniższy kod nie jest prawdziwym kodem, którego użyłem i nie mogę go teraz przetestować, ale powinien dać efekt pokazany na zrzucie ekranu powyżej:

ITable table = …;
int doubleFieldIndex = table.FindField(…);
IRow row = table.CreateRow(); 
row.Value[doubleFieldIndex] = double.PositiveInfinity;
row.Store();

Doskonałe pytanie. Nie wiedziałem, że NaN jest reprezentowany jako wyrównany do prawej <Null>. Ja również czekam na odpowiedzi. btw, Jak wygląda wyrównany do prawej <null> w oknie Wyszukaj według atrybutu (kiedy uzyskasz wszystkie wyraźne wartości dla tego pola?)
Devdatta Tengshe

@Devdatta, o ile mogę stwierdzić, Get unikalne wartości w ogóle nie zawiera NaN.
stakx

Co to za dane? Czy to jest tabela atrybutów siatki? Czy zaimportowałeś te dane ze źródła spoza ArcGIS?
Jakub Sisak GeoGraphics

@Jakub: To jest tabela wewnątrz geobazy plików, a pola pokazane na zrzucie ekranu mają typ Double. I nie, tabela została utworzona i edytowana za pomocą ArcObjects & ArcMap.
stakx

Tak, ale jak dostałeś takie wartości w pola?
whuber

Odpowiedzi:


2

W ArcGIS liczba zmiennoprzecinkowa pojedynczej precyzji ma zakres od około -3,4E38 do 1,2E38.

Jeśli faktycznie widzisz wartości 1. # INF -1. # INF wyświetlone w tabeli atrybutów (lub za pomocą MS Access podczas analizy atrybutów) lub statystyki siatki, mogą to być liczby spoza zakresu obsługiwanego przez ESRI. A jeśli te liczby faktycznie wykraczają poza obsługiwany zakres, można bezpiecznie stwierdzić, że nie będzie można zapytać o te wartości. Możesz wypróbować wartość większą i mniejszą od wartości maksymalnej i minimalnej (od -3,4E38 do 1,2E38) i zobaczyć, co ona zwraca, ale wątpię, czy zapytanie w ogóle zadziała, jeśli tabela / pole zawiera nieobsługiwany zakres wartości.

To źródło sugeruje, że takie wartości mogły zostać zaimportowane z aplikacji innej firmy niż ESRI innej firmy . Przed zaimportowaniem do produktu ESRI może być konieczne przekonwertowanie wartości na obsługiwany zakres wartości.

Jeśli chodzi o wartości NULL / NuN, dobrze byłoby wiedzieć dokładnie, na co patrzymy w twoim przykładzie; Tabela attrubute siatki, pliku kształtów, klasy obiektów geobazy itp. Na przykład pliki kształtów nie mogą przechowywać wartości NULL, więc jeśli klasa elementów Thant zawiera wartości NULL, jest konwertowana na plik kształtu, są one przechowywane jako różne inne wartości („”, 0, NuN? Itd.), Ale wyświetlane w tabeli atrybutów ArcMap są nadal wizualnie przedstawiane jako „<Null>". Możliwe, że wyrównanie wartości NULL w tabeli atrybutów jest taką sytuacją. Spekuluję tylko, dlaczego jesteś w stanie zapytać o wyrównane do lewej wartości NULL, ale nie do wyrównanych do prawej wartości NULL, ale jeśli jest to plik kształtu, spróbuj zaimportować do geobazy, a następnie ponownie uruchom zapytanie. Możliwe, że wszystkie zostaną przekonwertowane na prawidłowe wartości NULL.


@stakx - Właśnie zauważyłem twoje komentarze powyżej. Nie widziałem komentarzy podczas formułowania odpowiedzi. W każdym razie zostawiam to tutaj.
Jakub Sisak GeoGraphics

W rzeczywistości plik kształtu jest jednym możliwym sposobem, w jaki mogą wystąpić takie wartości. W przypadku pliku shapefile liczby są przechowywane w formacie 10 znaków ASCII, a nie jako liczby binarne zmienne lub podwójne. Jeśli przechowywana wartość zamienia się w nieskończoność lub NaN, jak ArcGIS ją zinterpretuje? Prawdopodobnie na kaprys tego, kto zakodował czytnik plików kształtu (co oznacza, że ​​zachowanie ArcGIS może się zmienić w dowolnym momencie, w zależności od wersji, wydania i aktualnie wprowadzonej poprawki błędów :-).
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.