Dzięki obliczeniom wartości pól właściciel hostowanej warstwy obiektowej lub administrator instytucji może zmienić wartości każdego wiersza dla jednego pola w tabeli atrybutów warstwy.
Jeśli na przykład istnieje hostowana warstwa obiektowa przechowująca informacje o sprzedażach nieruchomości — w tym cenę sprzedaży i stawkę podatku dla nieruchomości — można dodać pole do warstwy, aby zapisać szacowane podatki od nieruchomości. Aby zapełnić pole estimated_property_taxes zdefiniuj dla niego wyrażenie obliczeniowe, które pobiera wartości znajdujące się w polu sale_price i mnoży je przez wartości tax_rate.
Istnieją dwie możliwości pisania wyrażeń obliczających wartości pól w warstwach hostowanej warstwy obiektowej:
- Język ArcGIS Arcade — język Arcade to idealne narzędzie do wykonywania obliczeń wymagających użycia funkcji, których nie ma w języku SQL. Język Arcade zapewnia dostęp do wartości atrybutów i geometrii obiektów, co pozwala na tworzenie wyrażeń uwzględniających operacje przestrzenne. Ponadto w przypadku wystąpienia błędu podczas obliczania konkretnego wiersza można zatrzymać się i rozwiązać problem, a następnie ponownie uruchomić obliczenia.
Notatka:
Interfejs ArcGIS API for JavaScript w wersji 3.44 lub nowszej nie otrzyma najnowszych funkcji języka ArcGIS Arcade. Wyrażenia Arcade napisane przy użyciu aplikacji z interfejsem JavaScript API w wersji 3.44 lub nowszej będą obsługiwały tylko funkcje języka Arcade wprowadzone w wersji Arcade 1.21 lub wcześniejszej. Więcej informacji o obsłudze języka Arcade w produktach ArcGIS znajduje się w zestawieniu wersji języka Arcade.
- Język SQL — użycie języka SQL zapewnia największą wydajność obliczeń, które mogą być wykonane przy użyciu standardowych wyrażeń SQL (SQL-92) zawierających atrybuty o charakterze nieprzestrzennym. Instrukcje SQL można wykonywać w hostowanych warstwach obiektowych i warstwach z włączoną synchronizacją, co pozwala śledzić autorów i użytkowników edytujących obiekty. Możliwości takiej nie dają wyrażenia w języku Arcade wykonywane w tych warstwach.
W następnej sekcji objaśniono sposób obliczania wartości dla pola z poziomu strony elementu hostowanej warstwy obiektowej. W kolejnych sekcjach zaprezentowano przykłady typowych obliczeń.
Obliczanie wartości pola ze strony elementu
Wykonaj poniższe czynności, aby obliczyć wartości pola znakowego, liczbowego lub daty w polu ze strony elementu warstwy obiektowej.
Notatka:
Nie można cofnąć obliczeń wartości pola. Z tego powodu zaleca się dodanie pola, obliczenie w nim wartości i potwierdzenie, że wykonane obliczenia są zgodne z oczekiwaniami. Jeśli tak jest, można następnie obliczyć wartość oryginalnego pola, aby było równe dodanemu polu. Po potwierdzeniu poprawności wartości w oryginalnym polu można usunąć dodane pole.- Na stronie elementu warstwy kliknij kartę Dane, aby wyświetlić tabelę.
- Kliknij kolumnę zawierającą wartości, które mają zostać obliczone.
- Wykonaj jedną z następujących czynności, aby otworzyć okno dialogowe Oblicz pole:
- Kliknij przycisk Oblicz.
- Kliknij opcję Pokaż widok szczegółowy > Oblicz.
- Wybierz język, który ma być używany do wykonywania obliczeń: Arcade lub SQL.
Jeśli w hostowanej warstwie obiektowej włączono synchronizację lub jest ona skonfigurowana w sposób umożliwiający śledzenie użytkowników tworzących i aktualizujących obiekty, strona ta nie zostanie wyświetlona. Zamiast niej zostanie wyświetlone okno języka SQL.
- Utwórz wyrażenie obliczeniowe.
- W przypadku języka SQL należy używać operatorów podstawowych, listy pól oraz funkcji. Kliknij przycisk Sprawdź poprawność, aby upewnić się, że w wyrażeniu nie ma błędów. Jeśli wyrażenie jest niepoprawne, kliknij przycisk Usuń i utwórz nowe wyrażenie. Po utworzeniu i sprawdzeniu wyrażenia kliknij przycisk Oblicz.
- W wyrażeniach w języku Arcade można używać zmiennych globalnych, funkcji i stałych. Kliknij przycisk OK, aby obliczyć wyrażenie. W przypadku wystąpienia błędu podczas obliczania wyrażenia można kliknąć opcję Przejrzyj błąd, aby otworzyć okno wyrażenia i poprawić błąd. W przeciwnym razie kliknij przycisk Anuluj. Po poprawieniu i ponownym uruchomieniu wyrażenia obliczenia rozpoczynają się od nowa.
Czas potrzebny na wykonanie obliczeń zależy od złożoności wyrażenia i liczby obiektów w warstwie.
Przykładowe obliczenia
Poniższe sekcje zawierają przykładowe składnie umożliwiające wykonanie typowych obliczeń w usłudze ArcGIS Online.
Wykonywanie operacji matematycznej na wartościach liczbowych w dwóch istniejących polach w celu wypełnienia trzeciego pola
Jednym z najbardziej typowych obliczeń jest określenie nowej wartości liczbowej na podstawie istniejących wartości w warstwie obiektowej. Na przykład można odjąć sumy sprzedaży we wszystkich sklepach z jednego roku od sum sprzedaży z innego roku, aby uzyskać zmianę zysku w kolejnych latach lub podzielić łączną liczbę mieszkańców w wieku poniżej 18 lat przez całkowitą wielkość populacji, aby określić ułamek populacji w wieku poniżej 18 lat.
Arcade — przykłady
Obliczanie różnicy wartości dwóch pól liczbowych Sales2016 i Sales2017 w celu zapełnienia pola liczbowego.
$feature.Sales2016 - $feature.Sales2017
Przykłady w języku SQL
Wypełnienie pola liczbowego liczbą dziesiętną będącą wynikiem obliczenia części populacji w wieku poniżej 18 lat.
PopUnder18/TotalPop
Połączenie wartości znakowych z istniejących pól w nowym polu znakowym
Inne obliczenie wypełniające nowe pole, które uwzględnia połączenie wartości z istniejących pól znakowych. Na przykład w przypadku istnienia dwóch pól znakowych reprezentujących lokalizacje pokoi hotelowych — piętro i pokój — można je połączyć w polu znakowym zawierającym oba te numery.
W poniższych przykładach wartości pól piętra i pokoju zostaną połączone w jednym polu.
Przykład użycia interfejsu Arcade
Concatenate($feature.room,$feature.floor)
Przykład w języku SQL
CONCAT(Floor,Room)
Usunięcie spacji na początku lub na końcu pól znakowych
Gdy użytkownicy wpisują lub wklejają wartości podczas edycji pól, mogą popełniać błędy i pozostawiać początkowe lub końcowe spacje w tekście. Błędy te można eliminować, przycinając wartości.
W tych przykładach edytujący dodał końcową spację podczas wklejania tekstu New Hampshire do pola zawierającego nazwy stanów, dlatego należy obciąć spacje na końcu ciągu znakowego.
Przykład użycia interfejsu Arcade
Trim('New Hampshire ')
Przykład w języku SQL
Trim(TRAILING ' ' FROM 'New Hampshire ')
Wypełnianie pola różnymi wartościami w zależności od wartości w innym polu
W niektórych przypadkach wartość, która ma zostać dodana w polu, różni się w zależności od obiektu i zależy od innej wartości tego samego obiektu. Na przykład można dodać do warstwy obiektowej pole znakowe, w którym ma znaleźć się tekst opisujący liczbową lub skróconą wartość znakową w innym polu. Ponieważ interfejs obliczeń języka SQL tego nie obsługuje, do obliczeń tego typu należy używać języka Arcade.
Przykład użycia interfejsu Arcade
W poniższym przykładzie w polu tekstowym warunkowo zapisywane są różne ciągi znakowe — None (Brak), Low (Niski), High (Wysoki) lub Other (Inne) — w zależności od wartości liczbowej znajdującej się w innym polu warstwy (HowMany — Ile).
When(
$feature.HowMany == 0, "None",
$feature.HowMany == 1, "Low",
$feature.HowMany == 2, "High",
"Other")
Zastępowanie jednej wartości inną
Jeśli potrzebne jest zastąpienie istniejącej wartości inną, na przykład ze względu na zmianę sposobu reprezentowania określonej wartości lub w celu poprawienia błędnie wpisanych wartości, można znaleźć wszystkie istniejące wartości dla pola i zastąpić je nową wartością. Ponieważ interfejs obliczeń języka SQL tego nie obsługuje, do obliczeń tego typu należy używać języka Arcade.
Uwaga:
Obliczenia są natychmiast zapisywane w warstwie obiektowej. Jeśli istniejąca wartość zostanie zastąpiona niepoprawnie, należy ponowić obliczenie, aby przywrócić pierwotną wartość.
Przykład użycia interfejsu Arcade
W tym przykładzie zmieniono brytyjską pisownię słowa (colour) na pisownię amerykańską za pomocą funkcji Replace.Replace($feature.color, 'colour', 'color')
Określanie gęstości atrybutu liczbowego dla obiektu powierzchniowego
Aby obliczyć gęstość atrybutu w obszarze, należy użyć wyrażenia w języku Arcade, ponieważ niemożliwe jest wykonywanie obliczeń SQL dla pola przestrzennego z poziomu interfejsu obliczeń.
Przykład użycia interfejsu Arcade
W tym przykładzie przedstawiono sposób określania gęstości zaludnienia na obiekt przez podzielenie całkowitej wielkości populacji (TotalPop) przez powierzchnię obiektu poligonowego wyrażoną w milach kwadratowych:
$feature.TotalPop / Area ($feature,
'square-miles')
Wyprowadzanie współrzędnych obiektów punktowych
Za pomocą wyrażeń w języku Arcade można zwrócić współrzędną długości lub szerokości geograficznej dla pól przestrzennych w hostowanej warstwie obiektowej, która zawiera wyłącznie punkty.
Ten typ obliczeń nie jest obsługiwany w przypadku pól przestrzennych z poziomu interfejsu obliczeń.
Przykład użycia interfejsu Arcade
W tym przykładzie obliczane jest pole zawierające współrzędną x każdego punktu w warstwie punktowej za pomocą funkcji Geometry.
Geometry($feature).x
Dodawanie lub odejmowanie czasu od daty
W celu uzyskania zaktualizowanego pola daty może być konieczne dodanie czasu do pola daty bądź do wartości literału daty lub odjęcie czasu od niego. Na przykład można obliczyć datę przyszłej kontroli lub przeglądu, dodając czas do daty.
Przykład użycia interfejsu Arcade
W tym przykładzie za pomocą funkcji DateAdd do daty dodawane jest siedem dni, aby uzyskać datę w kolejnym tygodniu.var startDate = Date($feature.dateField);
var oneWeekLater = DateAdd(startDate, 7, 'days');
return oneWeekLater;
Przykłady w języku SQL
W celu dodania lub odjęcia czasu od pola daty można używać poniższych obliczeń lub obsługiwanych w języku SQL wartości literału daty. W pierwszym są używane pola daty, a w drugim — wartości literałów daty. Można także używać pól liczbowych i literałów liczbowych. Obsługiwana jest dowolna kombinacja pól i literałów, co przedstawiono w trzecim i czwartym obliczeniu.<DateField> +/- <NumberField> = updated date
DATE'<SQL-supported Date Literal>' +/- <Number of Days> = updated date
<DateField> +/- <Number of Days> = updated date
DATE'<SQL-supported Date Literal >' +/- <NumberField> = updated date
Obliczone pole daty to oryginalna data zwiększona lub pomniejszona o liczbę dni, które mają zostać dodane lub odjęte. Liczba dni może być liczbą całkowitą lub ułamkową — na przykład 1,5 oznacza półtora dnia, czyli 36 godzin.
W poniższym przykładzie część urządzenia jest instalowana 6/14/2016 o godzinie 10:00. Można użyć dowolnego z obliczeń w celu uzyskania daty kontroli przypadającej miesiąc (30 dni) po tej dacie instalacji. W pierwszym obliczeniu jest używane pole daty z wartością 6/14/2016 i pole liczbowe z wartością 30, a w drugim obliczeniu używany jest literał daty i literał liczbowy.<MyDateField> + <MyNumberField> = 7/14/2016 10:00 AM
DATE'6/14/2016' + 30 = 7/14/2016 10:00 AM
Obliczanie różnicy między dwiema datami
Czasami konieczne jest obliczenie czasu między dwoma datami. Na przykład jeśli podana jest data instalacji liczników prądu oraz data kontroli, można obliczyć różnicę między tymi dwiema datami i sprawdzić, czy okres od instalacji do kontroli jest zgodny z przepisami. Wynikiem obliczenia jest pole liczbowe, a nie pole daty.
Przykład użycia interfejsu Arcade
W poniższym przykładzie za pomocą funkcji DateDiff obliczany jest wiek danej osoby przez obliczenie różnicy między datą bieżącą (endDate) a datą urodzenia tej osoby (startDate):var startDate = Date($feature.startDateField);
var endDate = Date($feature.endDateField);
var age = DateDiff(endDate, startDate, 'years');
return age;
Przykłady w języku SQL
Do obliczania czasu między dwiema datami można użyć dowolnej kombinacji pól daty i literałów daty. W pierwszym obliczeniu poniżej jest używane pole daty, a w drugim — literał daty. W trzecim i czwartym obliczeniu używane jest pole daty i literał daty.<DateField1> - <DateField2> = number of days in between
DATE'<SQL-supported Date Literal>' - DATE'< SQL-supported Date Literal>' = number of days in between
<DateField1> - DATE'<SQL-supported Date Literal>' = number of days in between
DATE'<SQL-supported Date Literal>' - <DateField2> = number of days in between
Wynikiem jest pole liczbowe obliczane przez odjęcie jednego pola lub literału daty od drugiego pola lub literału. Wynik liczbowy (w dniach) może być liczbą całkowitą lub ułamkową — na przykład 1,5 oznacza półtora dnia, czyli 36 godzin.
W przykładzie z licznikami prądu przytoczonym powyżej można użyć dowolnych z poniższych obliczeń w celu obliczenia czasu między datą instalacji 6/1/2015 i datą kontroli 10/1/2015. W pierwszym obliczeniu używane są pola daty, w drugim literały daty, a w trzecim i czwartym są używane zarówno pole daty, jak i literał daty.<InspectionDateField> - <InstallationDateField> = 122 (days)
DATE'10/1/2015' - DATE'6/1/2015' = 122 (days)
<InspectionDateField> - DATE'6/1/2015' = 122 (days)
DATE'10/1/2015' - <InstallationDateField> = 122 (days)
Uwagi dotyczące obliczania wartości pól
- Jeśli w warstwie wyświetlanej na mapie zastosowano filtr, obliczone zostaną tylko wartości rekordów spełniających kryteria filtru.
- Podczas pisania wyrażeń SQL funkcja Oblicz pole obsługuje wyłącznie nazwy pól, a nie ich aliasy. Na liście Pola wyświetlane są wszystkie nazwy pól, dla których można obliczyć wartość. Tę listę można filtrować według typów pól: Znakowe, Numeryczne oraz Data.
- Po umieszczeniu kursora na nazwie pola widocznej na liście Pola wyświetlone zostają alias pola oraz typ pola.
- Kliknięcie nazwy pola widocznej na liście Pola powoduje dodanie pola do wyrażenia.
- Nie można obliczać wartości pól w kopiach hostowanych warstw obiektowych ani dla hostowanych warstw obiektowych, które mają powiązane warstwy kafli.
- Obliczone wartości nie są przekazywane z hostowanej warstwy obiektowej lub widoku do zależnych hostowanych warstw scen.
- Dla liczb w wyrażeniach SQL nie jest obsługiwane ustawienie Formatowanie według ustawień regionalnych. Jeśli na przykład ustawienia regionalne skonfigurowano dla Hiszpanii, należy jako separatora miejsca dziesiętnego w wartościach tabeli atrybutów użyć kropki, a nie przecinka.
- Nie można używać funkcji liczbowej MOD dla pól typu liczba zmiennoprzecinkowa podwójnej precyzji. Takie pole należy przekształcić na typ liczba całkowita, jak pokazano w przykładzie.
- Nie można pisać wyrażeń w języku Arcade dla hostowanych warstw obiektowych z włączoną synchronizacją lub warstw, w których skonfigurowano możliwość śledzenia użytkowników tworzących i aktualizujących obiekty.
- Nie można używać języka Arcade do obliczania wartości następujących typów danych terenowych na stronie elementu warstwy obiektowej:
- Duże liczby całkowite
- Tylko data
- Tylko czas
- Przesunięcie datownika
Notatka:
Gdy jakakolwiek warstwa w hostowanej warstwie obiektowej zawiera te typy danych, obliczenia w języku Arcade są wyłączane dla całej hostowanej warstwy obiektowej, nawet tych warstw podrzędnych, które nie zawierają nieobsługiwanych typów danych.
Informacje na temat standardowego języka SQL (SQL-92)
Tworząc wyrażenia SQL do obliczania wartości pól, należy używać standardowego języka SQL. Ta sekcja zawiera listę operatorów i funkcji języka SQL, których można użyć do obliczeń SQL w usłudze ArcGIS Online.
Po utworzeniu wyrażenia SQL kliknij przycisk Oblicz. Jeśli wystąpiły jakiekolwiek błędy, u dołu okna dialogowego wyświetlony zostanie odpowiedni komunikat. Popraw składnię wyrażenia i oblicz ponownie.
Operatory
Okno dialogowe Oblicz pole umożliwia budowanie prostych wyrażeń w języku SQL przy użyciu operatorów, takich jak plus, minus, znak mnożenia oraz dzielenia. Przykłady i wskazówki dotyczące korzystania z tych operatorów są następujące:
- Aby pomnożyć wszystkie wartości w polu numerycznym o nazwie SAMPLE przez wartość 100,0, wprowadź wyrażenie SAMPLE * 100.0.
- W przypadku bardziej skomplikowanych równań można skorzystać z nawiasów, aby podać kolejność wykonywania działań, na przykład SAMPLE * (BASELINE – 40).
- Operatorów matematycznych nie można stosować z polami znakowymi. Konieczne jest skorzystanie z funkcji ciągów opisanych w sekcji Funkcje ciągów znakowych.
- Jeśli wartość pola typu liczba zmiennoprzecinkowa podwójnej precyzji zostanie obliczona w polu typu liczba całkowita, do wyrażenia może zostać automatycznie dodana funkcja CAST. Na przykład: podczas obliczania wartości pola typu liczba zmiennoprzecinkowa podwójnej precyzji o nazwie POP w polu typu liczba całkowita o nazwie SAMPLE wyrażenie zostanie wyświetlone w postaci CAST(SAMPLE AS FLOAT). Nie należy usuwać funkcji CAST. Informacje na temat funkcji CAST można znaleźć w sekcji Funkcje numeryczne znajdującej się poniżej.
- Aby do ciągu znakowego dołączyć apostrof, użyj dwóch cudzysłowów pojedynczych. Na przykład 'Nightingale''s'. Nie używaj podwójnych cudzysłowów.
Funkcje
Oprócz prostych wyrażeń zawierających operatory do budowania wyrażeń w języku SQL można również używać funkcji. Funkcje obsługują nazwy pól, literały oraz inne funkcje. Na przykład: użytkownik chce obliczyć wartość pola zmiennoprzecinkowego podwójnej precyzji jako TOTALPOP podzielone przez POP18. Jeżeli dla dowolnego obiektu wartość pola POP18 jest równa zero, obliczenie nie zostanie wykonane i wyświetlony zostanie komunikat o błędzie dzielenia przez zero. Aby zapobiec wystąpieniu tego typu błędu, można skorzystać z funkcji NULLIF opisanej poniżej. Po jej zastosowaniu wyrażenie miałoby postać TOTALPOP / NULLIF(POP18, 0).
Funkcje przyjmują argumenty. W poniższej tabeli każdy z argumentów może być jednym z następujących elementów:
- Nazwa pola — typ pola musi być zgodny z typem argumentu (ciąg znakowy, liczba lub data).
- Literał — na przykład 'Zaglowka' (ciąg znakowy umieszczony w pojedynczych cudzysłowach), liczba 5 lub data w formacie MM/DD/RRRR hh:mm:ss umieszczona w pojedynczych cudzysłowach.
- Funkcja zwracająca wartość odpowiedniego typu (ciąg znakowy, liczba lub data). Na przykład funkcja FLOOR(POWER(SAMP_ERR, 0.5)) zwraca największą liczbę całkowitą, która jest równa wartości pierwiastka kwadratowego z wartości pola SAMP_ERR (lub mniejsza).
Ze względów demonstracyjnych przykłady przedstawione w kolumnie z opisem w poniższych tabelach przyjmują argumenty w postaci literałów. Dla tych argumentów można również użyć nazwy pola lub innej funkcji.
Funkcje daty
Na polach dat można wykonywać kilka rodzajów obliczeń. Na przykład można dodawać lub odejmować czas od pola daty albo obliczać różnicę między dwoma polami daty.
Przed rozpoczęciem pracy z polami daty należy zapoznać się z tymi ważnymi uwagami.
Podczas obliczania pól daty można użyć dowolnej kombinacji pól daty i pól liczbowych oraz literałów. W przypadku korzystania z literałów daty konieczne jest używanie formatów daty obsługiwanych przez SQL.
Dostępne są następujące funkcje daty:
Funkcja | Opis |
---|---|
CURRENT_DATE() | Zwraca bieżącą datę jako czas UTC. Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online daty są wyświetlane zgodnie ze strefą czasową danej instytucji lub profilu. |
CURRENT_TIME() | Zwraca datę i czas w formacie UTC (w godzinach, minutach i sekundach). Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu. |
CURRENT_TIMESTAMP() | Zwraca datę i czas w formacie UTC (w godzinach, minutach, sekundach i milisekundach). Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu. |
EXTRACT(<unit> FROM <date>) | Zwraca jedną część (<unit>) podanej wartości <date>. Możliwe wartości <unit> to na przykład rok, miesiąc, dzień, godzina i minuta. Przykłady
|
Funkcje liczbowe
Funkcje ciągów znakowych
Funkcja | Opis |
---|---|
CHAR_LENGTH(<string>) | Zwraca liczbę znaków w podanym ciągu znakowym. Wynik ma postać liczby całkowitej. Przykład
|
CONCAT(<string1>, <string2>) | Łączy dwie wartości ciągu znakowego. Można podać tylko dwa ciągi. Aby połączyć więcej niż dwa ciągi znakowe, należy zagnieździć kilka funkcji CONCAT, jak przedstawiono poniżej. Przykłady
Wartości puste są przekształcane do pustych ciągów znakowych. |
POSITION(<substring>, <string>) | Zwraca pozycję pierwszego wystąpienia podanego podciągu w podanym ciągu znakowym. Jeżeli podany podciąg nie zostanie znaleziony, wynik wynosi 0. Przykłady
|
SUBSTRING(<string>, <start>, <length>) | Zwraca część wartości ciągu znakowego; <start> to indeks liczby całkowitej określający, gdzie rozpoczynają się zwracane znaki, a <length> jest liczbą zwracanych znaków. Przykłady
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | Zwraca ciąg znakowy, który jest podanym ciągiem z usuniętymi wszystkimi spacjami początkowymi i końcowymi. Przykład
Należy zwrócić uwagę na to, że drugi argument to dwa pojedyncze cudzysłowy, pomiędzy którymi znajduje się znak spacji. |
UPPER(<string>) | Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane wielkimi literami. Przykład
|
LOWER(<string>) | Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane małymi literami. Przykład
|