Sdílet prostřednictvím


Výrazy stylu řízené daty v sadě iOS SDK (Preview)

Poznámka:

Vyřazení sady Azure Mapy iOS SDK

Sada Azure Mapy Native SDK pro iOS je teď zastaralá a bude vyřazena 31. 31. 25. Pokud se chcete vyhnout přerušení služeb, proveďte migraci do sady Azure Mapy Web SDK do 31. 31. 25. Další informace najdete v průvodci migrací sady Azure Mapy iOS SDK.

Vrstvy používají predikáty a výrazy k určení toho, co se má zobrazit a jak ho formátovat. Predikáty jsou reprezentovány stejnou NSPredicate třídou, která filtruje výsledky ze základních dat nebo položek v NSArray Objective-C. Predikáty jsou založeny na výrazech reprezentovaných NSExpression třídou.

Tento dokument popisuje konkrétní podmnožinu predikátu a syntaxe výrazů podporovanou touto sadou SDK. Obecnější úvod k predikátům a výrazům najdete v průvodci programováním predikátu v dokumentaci pro vývojáře Apple.

Použití predikátů k filtrování vektorových dat

Většina tříd vrstev zobrazuje Feature objekty, které můžete zobrazit nebo skrýt na základě vlastností funkce. filter Pomocí této možnosti můžete zahrnout pouze funkce ve zdrojové vrstvě, které splňují podmínku, kterou definujete.

Operátory

Podporují se následující relační operátory:

NSPredicateOperatorType Syntaxe formátu řetězce
NSEqualToPredicateOperatorType key = value
key == value
NSGreaterThanOrEqualToPredicateOperatorType key >= value
key => value
NSLessThanOrEqualToPredicateOperatorType key <= value
key =< value
NSGreaterThanPredicateOperatorType key > value
NSLessThanPredicateOperatorType key < value
NSNotEqualToPredicateOperatorType key != value
key <> value
NSBetweenPredicateOperatorType key BETWEEN { 32, 212 }

Chcete-li otestovat, zda má funkce nebo chybí konkrétní vlastnost, porovnejte atribut s NULL nebo NIL. Podporují se také predikáty vytvořené pomocí inicializátoru NSPredicate(value:) . Operátory řetězců a vlastní operátory se nepodporují.

Podporují se následující složené operátory:

NSCompoundPredicateType Syntaxe formátu řetězce
NSAndPredicateType predicate1 AND predicate2
predicate1 && predicate2
NSOrPredicateType predicate1 OR predicate2
predicate1 \|\| predicate2
NSNotPredicateType NOT predicate
!predicate

Podporují se následující agregační operátory:

NSPredicateOperatorType Syntaxe formátu řetězce
NSInPredicateOperatorType key IN { 'iOS', 'macOS', 'tvOS', 'watchOS' }
NSContainsPredicateOperatorType { 'iOS', 'macOS', 'tvOS', 'watchOS' } CONTAINS key

Operátory a operátory IN můžete použít k otestování, zda se hodnota zobrazí v kolekci, zda je řetězec podřetězec většího řetězce, nebo zda vyhodnocená funkce (SELF) leží v daném Featureřetězci .CONTAINS

Podporují se následující kombinace relačních operátorů a modifikátorů:

NSComparisonPredicateModifier NSPredicateOperatorType Syntaxe formátu řetězce
NSAllPredicateModifier NSNotEqualToPredicateOperatorType ALL haystack != needle
NSAnyPredicateModifier NSEqualToPredicateOperatorType ANY haystack = needle
SOME haystack = needle

Pro porovnání a agregační operátory používané v predikátech jsou podporovány následující možnosti predikátu porovnání:

NSComparisonPredicateOptions Syntaxe formátu řetězce
NSCaseInsensitivePredicateOption 'QUEBEC' =[c] 'Quebec'
NSDiacriticInsensitivePredicateOption 'Québec' =[d] 'Quebec'

Jiné možnosti predikátu porovnání nejsou podporovány, konkrétně l (pro citlivost národního prostředí) a n (pro normalizaci). Porovnání je citlivé na národní prostředí, pokud se jedná o malá a malá písmena nebo diakritická nerozlišující. Možnosti predikátu porovnání nejsou podporovány s modifikátory porovnání jako ALL a ANY.

Operandy

Operandy v predikátech můžou být proměnné, klíčové cesty nebo téměř cokoli jiného, co se může objevit uvnitř výrazu.

Automatické přetypování typu se neprovádí. Funkce proto odpovídá predikátu pouze v případě, že jeho hodnota pro danou vlastnost je stejného typu jako hodnota zadaná v predikátu. Pomocí operátoru CAST() převeďte cestu klíče nebo proměnnou na odpovídající typ:

  • Chcete-li přetypovat hodnotu na číslo, použijte CAST(key, 'NSNumber').
  • Chcete-li přetypovat hodnotu na řetězec, použijte CAST(key, 'NSString').
  • Pokud chcete přetypovat hodnotu na barvu, použijte CAST(key, 'UIColor').
  • Chcete-li přetypovat UIColor objekt na pole, použijte CAST(noindex(color), 'NSArray').

Další informace o syntaxi řetězce formátu predikátu najdete v kapitole "Syntaxe řetězce formátu predikátu" v průvodci programováním predikátu v dokumentaci pro vývojáře Apple.

Příklady operandů

Bublinové vrstvy a vrstvy symbolů ve výchozím nastavení vykreslují souřadnice všech geometrií ve zdroji dat. Toto chování může zvýraznit vrcholy mnohoúhelníku nebo čáry. Možnost filter vrstvy lze použít k omezení typu geometrie vlastností, které vykresluje, pomocí NSExpression.geometryTypeAZMVariable v rámci predikátu. Následující příklad omezuje vrstvu bublin tak, aby se vykreslovaly pouze Point funkce.

let layer = BubbleLayer(source: source, options: [
    .filter(
        from: NSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable)
    )
])

Následující příklad umožňuje vykreslení obou Point funkcí Polygon .

let layer = BubbleLayer(source: source, options: [
    .filter(
        from: NSCompoundPredicate(orPredicateWithSubpredicates: [
            NSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable),
            NSPredicate(format: "%@ == \"Polygon\"", NSExpression.geometryTypeAZMVariable)
        ])
    )
])

Konfigurace možností vrstvy pomocí výrazů

Výraz může obsahovat dílčí výrazy různých typů. Každý z podporovaných typů výrazů je popsán níže.

Některé příklady v této části dokumentu používají následující funkci k předvedení různých způsobů použití těchto výrazů.

{
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [-122.13284, 47.63699]
    },
    "properties": {
        "id": 123,
        "entityType": "restaurant",
        "revenue": 12345,
        "subTitle": "Building 40", 
        "temperature": 64,
        "title": "Cafeteria", 
        "zoneColor": "purple",
        "abcArray": ["a", "b", "c"],
        "array2d": [["a", "b"], ["x", "y"]],
        "_style": {
            "fillColor": "red"
        }
    }
}

Následující kód ukazuje, jak ručně vytvořit tuto funkci GeoJSON v aplikaci.

// Create a point feature.
let feature = Feature(Point(CLLocationCoordinate2D(latitude: 45, longitude: -100)))

// Add properties to the feature.
feature.addProperty("id", value:  123)
feature.addProperty("entityType", value: "restaurant")
feature.addProperty("revenue", value:  12345)
feature.addProperty("subTitle", value: "Building 40")
feature.addProperty("temperature", value:  64)
feature.addProperty("title", value: "Cafeteria")
feature.addProperty("zoneColor", value: "purple")
feature.addProperty("abcArray", value: ["a", "b", "c"])
feature.addProperty("array2d", value: [["a", "b"], ["x", "y"]])
feature.addProperty("_style", value: ["fillColor": "red"])

Následující kód ukazuje, jak deserializovat řetězcovou verzi objektu JSON do funkce GeoJSON v aplikaci.

let featureString = "{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.13284,47.63699]},\"properties\":{\"id\":123,\"entityType\":\"restaurant\",\"revenue\":12345,\"subTitle\":\"Building 40\",\"temperature\":64,\"title\":\"Cafeteria\",\"zoneColor\":\"purple\",\"abcArray\":[\"a\",\"b\",\"c\"],\"array2d\":[[\"a\",\"b\"],[\"x\",\"y\"]],\"_style\":{\"fillColor\":\"red\"}}}"

let feature = Feature.fromJson(featureString)

Založené na FORMÁTU JSON

Sada Azure Mapy Web SDK také podporuje výrazy stylu řízené daty, které jsou reprezentované pomocí pole JSON. Tyto stejné výrazy je možné znovu vytvořit pomocí nativní NSExpression třídy v sadě iOS SDK. Alternativně je možné tyto výrazy založené na JSON sdílet do aplikace pro ios (například připojené k odpovědi) a předat do NSExpression(azmJSONObject:) metody. Například použijte následující výraz JSON.

var exp = ['get','title'];

Rychlá verze výše uvedeného výrazu by byla ["get", "title"] a lze ji přečíst do sady SDK pro iOS následujícím způsobem.

let jsonResponse = ["get", "title"]
let exp = NSExpression(azmJSONObject: jsonResponse)

Použití tohoto přístupu usnadňuje opakované použití výrazů stylu mezi mobilními a webovými aplikacemi, které používají Azure Mapy.

Toto video poskytuje přehled stylů řízených daty v Azure Mapy.

Internet věcí Show – styly řízené daty pomocí Azure Mapy

Konstantní hodnoty

Konstantní hodnota může být z některého z následujících typů:

  • UIColor
  • String
  • NSNumber.boolValue
  • NSNumber.doubleValue
  • [Float]
  • [String]
  • NSValue.cgVectorValue
  • NSValue.uiEdgeInsetsValue

Příklad konstantních hodnot

NSExpression(forConstantValue: UIColor.red)
NSExpression(forConstantValue: "constant")
NSExpression(forConstantValue: true)
NSExpression(forConstantValue: 20)
NSExpression(forConstantValue: [20, 21, 22])
NSExpression(forConstantValue: ["constant1", "constant2"])
NSExpression(forConstantValue: NSValue(cgVector: CGVector(dx: 2, dy: -4)))
NSExpression(forConstantValue: NSValue(uiEdgeInsets: UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)))

Klíčové cesty

Výraz cesty klíče odkazuje na vlastnost objektu, který Feature se vyhodnocuje pro zobrazení. Pokud například slovník mnohoúhelníku Feature.properties obsahuje floorCount klíč, cesta floorCount ke klíči odkazuje na hodnotu vlastnosti při vyhodnocování tohoto konkrétního floorCount mnohoúhelníku.

Některé znaky nemusí být použity přímo jako součást cesty ke klíči v řetězci formátu. Pokud je například vlastnost funkce pojmenovaná ISO 3166-1:2006, řetězec formátu výrazu lowercase(ISO 3166-1:2006) nebo řetězec ISO 3166-1:2006 == 'US-OH' formátu predikátu vyvolá výjimku. Místo toho použijte %K zástupný symbol nebo NSExpression(forKeyPath:) inicializátor:

NSPredicate(format: "%K == 'US-OH'", "ISO 3166-1:2006")
NSExpression(
   forFunction: "lowercase:",
   arguments: [NSExpression(forKeyPath: "ISO 3166-1:2006")]
)

Functions

Z funkcí předdefinovaných metodouNSExpression(forFunction:arguments:) se v možnostech vrstvy podporuje následující podmnožina:

Parametr inicializátoru Syntaxe formátu řetězce
average: average({1, 2, 2, 3, 4, 7, 9})
sum: sum({1, 2, 2, 3, 4, 7, 9})
count: count({1, 2, 2, 3, 4, 7, 9})
min: min({1, 2, 2, 3, 4, 7, 9})
max: max({1, 2, 2, 3, 4, 7, 9})
add:to: 1 + 2
from:subtract: 2 - 1
multiply:by: 1 * 2
divide:by: 1 / 2
modulus:by: modulus:by:(1, 2)
sqrt: sqrt(2)
log: log(10)
ln: ln(2)
raise:toPower: 2 ** 2
exp: exp(0)
ceiling: ceiling(0.99999)
abs: abs(-1)
trunc: trunc(6378.1370)
floor: floor(-0.99999)
uppercase: uppercase('Elysian Fields')
lowercase: lowercase('DOWNTOWN')
noindex: noindex(0 + 2 + c)
length: length('Wapakoneta')
castObject:toType: CAST(ele, 'NSString')
CAST(ele, 'NSNumber')

Následující předdefinované funkce nejsou podporovány:

Parametr inicializátoru Syntaxe formátu řetězce
median: median({1, 2, 2, 3, 4, 7, 9})
mode: mode({1, 2, 2, 3, 4, 7, 9})
stddev: stddev({1, 2, 2, 3, 4, 7, 9})
random random()
randomn: randomn(10)
now now()
bitwiseAnd:with: bitwiseAnd:with:(5, 3)
bitwiseOr:with: bitwiseOr:with:(5, 3)
bitwiseXor:with: bitwiseXor:with:(5, 3)
leftshift:by: leftshift:by:(23, 1)
rightshift:by: rightshift:by:(23, 1)
onesComplement: onesComplement(255)
distanceToLocation:fromLocation: distanceToLocation:fromLocation:(there, here)

Podmíněné výrazy

Podmíněné funkce jsou podporovány prostřednictvím integrované NSExpression(forAZMConditional:trueExpression:falseExpression:) metody a TERNARY() operátoru. Pokud potřebujete vyjádřit více případů ("else-if"), můžete buď vnořit podmínku v rámci podmíněného výrazu , nebo použít výraz shody.

Příklad podmíněných podmínek

Následující příklad prochází různé predikáty, dokud nenajde ten, který se vyhodnotí jako true, a poté vrátí jeho pravdivý výraz. Pokud se nevyhodnotí truežádné predikáty, vrátí se poslední nepravdivý výraz.

let layer = BubbleLayer(
    source: source,
    options: [
        .bubbleColor(
            from: NSExpression(
                // Check to see whether a feature has a zoneColor property
                forAZMConditional: NSPredicate(format: "zoneColor != NIL"),
                // If it has a zoneColor property, use its value as a color.
                trueExpression: NSExpression(forKeyPath: "zoneColor"),
                // if not, do another check
                falseExpression: NSExpression(
                    // Check to see whether it has a temperature property with a value greater than or equal to 100.
                    forConditional: NSPredicate(format: "temperature != nil && temperature >= 100"),
                    // If it has, use red color.
                    trueExpression: NSExpression(forConstantValue: UIColor.red),
                    // If not, use green color.
                    falseExpression: NSExpression(forConstantValue: UIColor.green)
                )
            )
        )
    ]
)

Souhrny

Agregační výrazy můžou obsahovat pole výrazů. V některých případech je možné místo zabalení pole do agregačního výrazu použít samotné pole.

Proměnné

Sada Th iOS SDK definuje následující proměnné pro použití s možnostmi vrstvy.

Identifikátor funkce

ID funkce. Tato proměnná odpovídá NSExpression.featureIdentifierAZMVariable vlastnosti.

Syntaxe řetězce formátu: $featureIdentifier

Vlastnosti funkce

Objekt vlastností funkce. Tato proměnná odpovídá NSExpression.featurePropertiesAZMVariable vlastnosti.

Syntaxe řetězce formátu: $featureAttributes

Kumulované funkce

Hodnota vlastnosti clusteru se zatím nashromáždila. Tuto možnost lze použít pouze v clusterProperties možnosti clusterovaného DataSource zdroje. Tato proměnná odpovídá NSExpression.featureAccumulatedAZMVariable vlastnosti.

Syntaxe řetězce formátu: $featureAccumulated

Typ geometrie

Typ geometrie reprezentované funkcí. Typ funkce je jedním z následujících řetězců:

  • Point pro funkce bodu odpovídající Point třídě.
  • MultiPoint pro funkce kolekce bodů odpovídající PointCollection třídě.
  • LineString pro funkce čar, které odpovídají Polyline třídě.
  • MultiLineString pro více funkcí čar, které odpovídají MultiPolyline třídě.
  • Polygon pro mnohoúhelníkové funkce odpovídající Polygon třídě.
  • MultiPolygon pro více mnohoúhelníku, které odpovídají MultiPolygon třídě.
  • GeometryCollection pro vlastnosti kolekce geometrie, které odpovídají GeometryCollection třídě.

Tato proměnná odpovídá NSExpression.geometryTypeAZMVariable vlastnosti.

Syntaxe řetězce formátu: $geometryType

Příklad proměnných

Podívejte se na příklady Operandů.

Zoom

Aktuální úroveň přiblížení. V možnostech stylu vrstvy se tato proměnná může zobrazit pouze jako cíl interpolace nejvyšší úrovně nebo výrazu kroku. Tato proměnná odpovídá NSExpression.zoomLevelAZMVariable vlastnosti.

Syntaxe řetězce formátu: $zoomLevel

Příklad lupy

Ve výchozím nastavení mají paprsky datových bodů vykreslených ve vrstvě heat mapy pevný poloměr bodu pro všechny úrovně přiblížení. Při přiblížení mapy se data agregují dohromady a vrstva heat mapy vypadá jinak. Výraz zoom lze použít ke škálování poloměru pro každou úroveň přiblížení tak, aby každý datový bod pokrýval stejnou fyzickou oblast mapy. Díky tomu bude vrstva heat mapy vypadat staticky a konzistentněji. Každá úroveň přiblížení mapy má dvakrát tolik bodů svisle a vodorovně jako předchozí úroveň přiblížení. Měřítko poloměru, aby se zdvojnásobil s každou úrovní přiblížení, vytvoří heat mapu, která vypadá konzistentně na všech úrovních přiblížení. Lze to provést pomocí výrazu zoom s výrazem base 2 exponential interpolation , s poloměrem bodu nastaveným pro minimální úroveň přiblížení a škálovaným poloměrem maximální úrovně přiblížení vypočítanou níže, jak pow(2, maxZoom - minZoom) * radius je znázorněno níže.

let layer = HeatMapLayer(
   source: source,
   options: [
      .heatmapRadius(
         from: NSExpression(
            forAZMInterpolating: .zoomLevelAZMVariable,
            curveType: .exponential,
            parameters: NSExpression(forConstantValue: 2),
            stops: NSExpression(forConstantValue: [
               // For zoom level 1 set the radius to 2 points.
               1: 2,

               // Between zoom level 1 and 19, exponentially scale the radius from 2 points to 2 * 2^(maxZoom - minZoom) points.
               19: pow(2, 19 - 1) * 2
            ])
         )
      )
   ]
)

Hustota heat mapy

Odhad hustoty jádra bodu obrazovky ve vrstvě heat mapy; jinými slovy relativní míra, kolik datových bodů je přeplněno kolem konkrétního pixelu. Tato proměnná se vyhodnotí jako číslo od 0 do 1. Používá se v kombinaci s výrazem interpolation k step definování barevného přechodu použitého k obarvení heat mapy. Lze použít pouze v heatmapColor možnosti vrstvy heat mapy. Tato proměnná odpovídá NSExpression.heatmapDensityAZMVariable vlastnosti.

Syntaxe řetězce formátu: $heatmapDensity

Tip

Barva indexu 0 ve výrazu interpolace nebo výchozí barva barvy kroku definuje barvu oblasti, ve které nejsou žádná data. Barvu indexu 0 lze použít k definování barvy pozadí. Mnoho dává přednost nastavení této hodnoty na průhlednou nebo poloprůhlednou černou.

Příklad hustoty HeatMap

Tento příklad používá interpolační výraz pro vložení k vytvoření hladkého barevného přechodu pro vykreslení heat mapy.

let layer = HeatMapLayer(
   source: source,
   options: [
      .heatmapColor(
         from: NSExpression(
            forAZMInterpolating: .heatmapDensityAZMVariable,
            curveType: .linear,
            parameters: nil,
            stops: NSExpression(forConstantValue: [
               0: UIColor.magenta.withAlphaComponent(0),
               0.01: UIColor.magenta,
               0.5: UIColor(red: 251 / 255, green: 0, blue: 251 / 255, alpha: 1),
               1: UIColor(red: 0, green: 195 / 255, blue: 1, alpha: 1)
            ])
         )
      )
   ]
)

Kromě použití hladkého přechodu k obarvení heat mapy je možné barvy zadat v sadě oblastí pomocí výrazu kroku. Pomocí výrazu kroku pro zbarvení heat mapy vizuálně rozdělí hustotu do oblastí, které se podobají obrysové nebo paprskové mapě stylu.

let layer = HeatMapLayer(
   source: source,
   options: [
      .heatmapColor(
         from: NSExpression(
            forAZMStepping: .heatmapDensityAZMVariable,
            from: NSExpression(forConstantValue: UIColor.clear),
            stops: NSExpression(forConstantValue: [
               0.01: UIColor(red: 0, green: 0, blue: 128 / 255, alpha: 1),
               0.25: UIColor.cyan,
               0.5: UIColor.green,
               0.75: UIColor.yellow,
               1: UIColor.red
            ])
         )
      )
   ]
)

Další informace najdete v článku Přidání vrstvy heat mapy.

Průběh řádku

Číslo, které označuje relativní vzdálenost podél čáry v daném bodě podél čáry. Tato proměnná se vyhodnotí jako 0 na začátku řádku a 1 na konci řádku. Lze ji použít pouze s LineLayerOption.strokeGradient možností vrstvy čáry. NSExpression.lineProgressAZMVariable Odpovídá vlastnosti.

Syntaxe řetězce formátu: $lineProgress

Poznámka:

Možnost strokeGradient vrstvy čáry vyžaduje lineMetrics , aby byla možnost zdroje dat nastavena na truehodnotu .

Příklad průběhu řádku

Tento příklad používá NSExpression.lineProgressAZMVariable výraz k použití barevného přechodu na tah čáry.

let layer = LineLayer(
   source: source,
   options: [
      .strokeGradient(
         from: NSExpression(
            forAZMInterpolating: NSExpression.lineProgressAZMVariable,
            curveType: .linear,
            parameters: nil,
            stops: NSExpression(forConstantValue: [
               0: UIColor.blue,
               0.1: UIColor(red: 0.25, green: 0.41, blue: 1, alpha: 1), // Royal Blue
               0.3: UIColor.cyan,
               0.5: UIColor(red: 0, green: 1, blue: 0, alpha: 1), // Lime
               0.7: UIColor.yellow,
               1: UIColor.red
            ])
         )
      )
   ]
)

Zobrazení živého příkladu

Metody specifické pro Azure Mapy

Následující část ukazuje konkrétní metody Azure Mapy které rozšiřují NSExpression třídu.

Shoda výrazu

Výraz shody je typ podmíněného výrazu, který poskytuje logiku typu switch-statement. Vstupem může být libovolný výraz, například NSExpression(forKeyPath: "entityType") který vrací řetězec nebo číslo. Odpovídající výraz je slovník, který by měl mít klíče jako výrazy, které se vyhodnocují jako jeden řetězec nebo číslo nebo na pole všech řetězců nebo všech čísel a hodnot jako libovolných výrazů. Pokud typ vstupního výrazu neodpovídá typu klíčů, je výsledkem výchozí záložní hodnota.

Porovnání příkladů výrazů

Následující příklad se podívá na entityType vlastnost Point funkce ve vrstvě bubliny a vyhledá shodu. Pokud najde shodu, vrátí se zadaná hodnota nebo vrátí náhradní hodnotu.

let layer = BubbleLayer(
    source: source,
    options: [
        .bubbleColor(
            from: NSExpression(
                // Get the input value to match.
                forAZMMatchingKey: NSExpression(forKeyPath: "entityType"),
                // List the keys to match and the value to return for each match.
                in: [
                    // If value is "restaurant" return red color.
                    NSExpression(forConstantValue: "restaurant"): NSExpression(forConstantValue: UIColor.red),
                    // If value is "park" return green color.
                    NSExpression(forConstantValue: "park"): NSExpression(forConstantValue: UIColor.green)
                ],
                // Specify a default value to return if no match is found.
                default: NSExpression(forConstantValue: UIColor.black)
            )
        )
    ]
)

Následující příklad používá výraz, který vyhodnocuje pole řetězců k určení sady popisků, které by měly vrátit stejnou hodnotu. Tento přístup je mnohem efektivnější než výpis jednotlivých popisků. V tomto případě, pokud entityType je "restaurant" vlastnost nebo "grocery_store", červená barva je vrácena.

let layer = BubbleLayer(
    source: source,
    options: [
        .bubbleColor(
            from: NSExpression(
                // Get the input value to match.
                forAZMMatchingKey: NSExpression(forKeyPath: "entityType"),
                // List the keys to match and the value to return for each match.
                in: [
                    // If value is "restaurant" or "grocery_store" return red color.
                    NSExpression(forConstantValue: ["restaurant", "grocery_store"]): NSExpression(forConstantValue: UIColor.red),
                    // If value is "park" return green color.
                    NSExpression(forConstantValue: "park"): NSExpression(forConstantValue: UIColor.green)
                ],
                // Specify a default value to return if no match is found.
                default: NSExpression(forConstantValue: UIColor.black)
            )
        )
    ]
)

Výraz coalesce

Výraz coalesce prochází sadou výrazů, dokud se nezískne první hodnota, která není null, a vrátí tuto hodnotu.

Příklad výrazu Coalesce

Následující příklad používá výraz coalesce k nastavení textField možnosti vrstvy symbolu. Pokud vlastnost title chybí ve funkci nebo je nastavena na nil, výraz vyhledá subTitle vlastnost, pokud chybí nebo nil, vrátí prázdný řetězec.

let layer = SymbolLayer(
    source: source,
    options: [
        .textField(
            from: NSExpression(forAZMFunctionCoalesce: [
                // Try getting the title property.
                NSExpression(forKeyPath: "title"),

                // If there is no title, try getting the subTitle.
                NSExpression(forKeyPath: "subTitle"),

                // Default to an empty string.
                NSExpression(forConstantValue: "")
            ])
        )
    ]
)

Výraz spojení

Spojí více řetězců dohromady. Každá hodnota musí být řetězec nebo číslo.

Příklad výrazu join

Následující příklad spojí temperature vlastnost point funkce a "°F".

let layer = SymbolLayer(
    source: source,
    options: [
        .textField(
            from: NSExpression(forAZMFunctionJoin: [
                NSExpression(forKeyPath: "temperature"),
                NSExpression(forConstantValue: "°F")
            ])
        ),

        // Some additional style options.
        .textOffset(CGVector(dx: 0, dy: -1.5)),
        .textSize(12),
        .textColor(.white)
    ]
)

Výše uvedený výraz vykreslí špendlík na mapě s překryvným textem "64°F" , jak je znázorněno na následujícím obrázku.

Příklad výrazu join

Interpolace a výrazy kroku

Interpolace a výrazy kroku lze použít k výpočtu hodnot podél interpolované křivky nebo funkce kroku. Tyto výrazy přebírají výraz, který jako vstup vrací číslo, například NSExpression(forKeyPath: "temperature"). Vstupní hodnota se vyhodnocuje podle dvojic vstupních a výstupních hodnot, aby bylo možné určit hodnotu, která nejlépe odpovídá interpolované křivkě nebo funkci kroku. Výstupní hodnoty se nazývají "stop". Vstupní hodnoty pro každou zarážku musí být číslo a musí být ve vzestupném pořadí. Výstupní hodnoty musí být číslo, matice čísel nebo barva.

Interpolační výraz

Interpolační výraz lze použít k výpočtu souvislé a hladké sady hodnot interpolací mezi hodnotami zarážky.

Existují tři typy interpolačních metod, které lze použít ve výrazu interpolace:

Název Popis Parametry
ExpressionInterpolationMode.linear Interpoluje lineárně mezi dvojicí zarážek. nil
ExpressionInterpolationMode.exponential Interpoluje exponenciálně mezi zarážkami. Zadává se základ a řídí rychlost, s jakou se výstup zvyšuje. Vyšší hodnoty zvyšují výstup směrem k vysokému konci rozsahu. Základní hodnota blížící se 1 vytváří výstup, který se lineárně zvyšuje. Výraz, který se vyhodnotí jako číslo, určuje základ exponenciální interpolace.
ExpressionInterpolationMode.cubicBezier Interpoluje pomocí krychlové bezierové křivky definované danými kontrolními body. Maticový nebo agregační výraz obsahující čtyři výrazy, z nichž každý se vyhodnocuje jako číslo. Čtyři čísla jsou řídicí body pro krychlovou Bézierovou křivku.

Tady je příklad toho, jak tyto různé typy interpolací vypadají.

Lineární Exponenciální Krychlový Bezier
Graf lineární interpolace Graf exponenciální interpolace Graf interpolace krychlových Bezier
Příklad interpolačního výrazu

Následující příklad používá lineární interpolační výraz k nastavení bubbleColor vlastnosti bublinové vrstvy na temperature základě vlastnosti funkce bodu. temperature Pokud je hodnota menší než 60, vrátí se modrá barva. Pokud je mezi 60 a méně než 70, vrátí se žlutá. Pokud je mezi 70 a méně než 80, vrátí se oranžová. Pokud je 80 nebo vyšší, vrátí se červená.

let layer = BubbleLayer(
    source: source,
    options: [
        .bubbleColor(
            from: NSExpression(
                forAZMInterpolating: NSExpression(forKeyPath: "temperature"),
                curveType: .linear,
                parameters: nil,
                stops: NSExpression(forConstantValue: [
                    50: UIColor.blue,
                    60: UIColor.yellow,
                    70: UIColor.orange,
                    80: UIColor.red
                ])
            )
        )
    ]
)

Následující obrázek ukazuje, jak jsou barvy zvoleny pro výše uvedený výraz.

Příklad interpolačního výrazu

Výraz kroku

Výraz kroku lze použít k výpočtu diskrétních stupňovitých výsledných hodnot vyhodnocením stupňovité konstantní funkce definované zarážkami.

Výrazy kroku vrátí výstupní hodnotu zarážky těsně před vstupní hodnotou nebo z hodnoty, pokud je vstup menší než první zastavení.

Příklad výrazu kroku

Následující příklad používá výraz kroku k nastavení bubbleColor vlastnosti bublinové vrstvy na temperature základě vlastnosti funkce bodu. temperature Pokud je hodnota menší než 60, vrátí se modrá. Pokud je mezi 60 a méně než 70, vrátí se žlutá. Pokud je mezi 70 a méně než 80, vrátí se oranžová. Pokud je 80 nebo vyšší, vrátí se červená.

let layer = BubbleLayer(
    source: source,
    options: [
        .bubbleColor(
            from: NSExpression(
                forAZMStepping: NSExpression(forKeyPath: "temperature"),
                from: NSExpression(forConstantValue: UIColor.blue),
                stops: NSExpression(forConstantValue: [
                    50: UIColor.blue,
                    60: UIColor.yellow,
                    70: UIColor.orange,
                    80: UIColor.red
                ])
            )
        )
    ]
)

Následující obrázek ukazuje, jak jsou barvy zvoleny pro výše uvedený výraz.

Příklad výrazu kroku

Další informace

Přečtěte si další informace o vrstvách, které podporují výrazy: