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žijteCAST(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.
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 true
hodnotu .
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
])
)
)
]
)
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.
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 |
---|---|---|
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.
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.
Další informace
Přečtěte si další informace o vrstvách, které podporují výrazy: