Wyrażenia etykiet, aby zastąpić wartości null tekstem spoza klasy elementów

9

Muszę oznaczyć niektóre hydranty (punkty) - niektóre z nich należą do straży pożarnej i mają przypisany numer, niektóre nie, a zatem nie mają numeru. Chciałbym napisać wyrażenie w stylu:

„Oznacz hydrant numerem, jeśli numer istnieje, jeśli hydrant ma etykietę o wartości zerowej oznaczeniem„ WO ”.”

Po prostu nie mogę tego rozgryźć.

Najprostszym sposobem, aby to zrobić, jest zmiana wartości zerowej na WO, ale dane nie są moje i nie chcę ich zmieniać. Przypuszczam, że mógłbym wykonać kopię i umieścić wartości w kopii, ale idealnie chciałbym wyrażenie.

Dzięki!

jorp
źródło
Dzięki, myślę, że wciąż brakuje mi czegoś, co robię: 1. Zaznacz funkcje etykiet w warstwie 2. Wybierz „Definiuj klasy cech i oznaczaj każdą klasę inaczej 3. Dodaj etykietę Numer klasy 4. Dodaj etykietę Klasa WO 5 . zaznaczyć „cechy etykiety w tej klasie” dla każdej <br/> 6. W obszarze „Liczba” kliknij opcję Zapytanie SQL („SYMBOLCODE” = 3) ORAZ („FIREAUTHOR” <> „”) 7. Pole etykiety jest ustawione na FIREAUTHOR 8. Dla WO SQL to („SYMBOLCODE” = 3) AND („FIREAUTHOR” = „”) 9. Wyrażenie to „WO” 10. Uzyskaj błąd ”nie znaleziono funkcji.
jorp

Odpowiedzi:

9

Możesz użyć takiego prostego skryptu, aby oznaczyć funkcje wartościami Null.

Function FindLabel ( [yourfield] )
  if isnull( [yourfield]) then
    FindLabel = "WO"
  else
    FindLabel = [yourfield]
  end if
End Function
kenbuja
źródło
1
Miło cię widzieć na gis.se. Twoje odpowiedzi na forach ESRI pomogły wielu osobom, w tym mnie.
Devdatta Tengshe
Dzięki - ten skrypt jest z pewnością zgrabny, ale wartości zerowe nie są oznaczane jako WO.
jorp
1
Czy pracujesz z wartościami wyświetlanymi jako <Null> lub jako spacje w tabeli atrybutów?
kenbuja
3

Oto, co możesz zrobić.

  1. Skonfiguruj dwie klasy etykietowania w zakładce Etykietowanie w metodzie: Zdefiniuj klasy cech i oznacz każdą klasę inaczej.
  2. Utwórz klasę hydrantu, która ma liczby i taką, która nie ma (np. Liczba i WO).
  3. Dla klasy liczb zdefiniuj zapytanie SQL jako „MyLabelField” <> ”„
  4. Wskaż klasę liczb na prawidłowe pole etykiety.
  5. Dla klasy WO zdefiniuj zapytanie SQL jako „MyLabelField” = „”
  6. Dla klasy WO w typie opcji Wyrażenie „WO”
  7. Włącz etykietowanie.
grafika 21
źródło
2

Dalej do @kenbuja sript, która jest poprawną odpowiedzią; Jeśli masz kombinację ciągów zerowych i zerowych lub spacji bez znaków, możesz zrobić coś takiego:

Function FindLabel ( [LABELFIELD] )
  if  isnull([LABELFIELD]) then
    FindLabel = "WO"
  elseif trim([LABELFIELD]) = "" then
    FindLabel = "WO"
  else
    FindLabel = ucase([LABELFIELD])
  end if
End Function
Jakub Sisak GeoGraphics
źródło