Datadrivna formatuttryck (Web SDK)
Med uttryck kan du använda affärslogik för formateringsalternativ som observerar de egenskaper som definierats i varje form i en datakälla. Uttryck kan filtrera data i en datakälla eller ett lager. Uttryck kan bestå av villkorsstyrd logik, till exempel if-statements. Och de kan användas för att manipulera data med hjälp av: strängoperatorer, logiska operatorer och matematiska operatorer.
Datadrivna format minskar mängden kod som behövs för att implementera affärslogik kring formatering. När de används med lager utvärderas uttryck vid återgivningen i en separat tråd. Den här funktionen ger bättre prestanda jämfört med att utvärdera affärslogik i användargränssnittstråden.
Den här videon ger en översikt över datadriven formatering i Azure Maps Web SDK.
Uttryck representeras som JSON-matriser. Det första elementet i ett uttryck i matrisen är en sträng som anger namnet på uttrycksoperatorn. Till exempel "+" eller "case". Nästa element (om några) är argumenten till uttrycket. Varje argument är antingen ett literalvärde (en sträng, ett tal, booleskt värde eller null
) eller en annan uttrycksmatris. Följande pseudokod definierar den grundläggande strukturen för ett uttryck.
[
expression_operator,
argument0,
argument1,
…
]
Azure Maps Web SDK stöder många typer av uttryck. Uttryck kan användas på egen hand eller i kombination med andra uttryck.
Typ av uttryck | beskrivning |
---|---|
Samlingsuttryck | Ett uttryck som definierar en beräkning som bearbetas över en uppsättning data och som kan användas med clusterProperties alternativet .DataSource |
Booleska uttryck | Booleska uttryck ger en uppsättning booleska operatoruttryck för att utvärdera booleska jämförelser. |
Färguttryck | Färguttryck gör det enklare att skapa och ändra färgvärden. |
Villkorsstyrda uttryck | Villkorsuttryck tillhandahåller logikåtgärder som liknar if-statements. |
Datauttryck | Ger åtkomst till egenskapsdata i en funktion. |
Interpolera och steguttryck | Interpolera och steguttryck kan användas för att beräkna värden längs en interpolerad kurva eller stegfunktion. |
Lagerspecifika uttryck | Särskilda uttryck som endast gäller för ett enda lager. |
Matematiska uttryck | Tillhandahåller matematiska operatorer för att utföra datadrivna beräkningar inom uttrycksramverket. |
Strängoperatoruttryck | Strängoperatoruttryck utför konverteringsåtgärder på strängar som att sammanfoga och konvertera skiftläget. |
Skriv uttryck | Typuttryck tillhandahåller verktyg för att testa och konvertera olika datatyper som strängar, tal och booleska värden. |
Variabelbindningsuttryck | Variabelbindningsuttryck lagrar resultatet av en beräkning i en variabel och refereras någon annanstans i ett uttryck flera gånger utan att behöva beräkna om det lagrade värdet. |
Zoomuttryck | Hämtar kartans aktuella zoomnivå vid återgivningstiden. |
Alla exempel i det här dokumentet använder följande funktion för att demonstrera olika sätt på vilka de olika typerna av uttryck kan användas.
{
"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"
}
}
}
Datauttryck
Datauttryck ger åtkomst till egenskapsdata i en funktion.
Uttryck | Returtyp | beskrivning |
---|---|---|
['at', number, array] |
värde | Hämtar ett objekt från en matris. |
['geometry-type'] |
sträng | Hämtar funktionens geometrityp: Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon. |
['get', string] |
värde | Hämtar egenskapsvärdet från den aktuella funktionens egenskaper. Returnerar null om den begärda egenskapen saknas. |
['get', string, object] |
värde | Hämtar egenskapsvärdet från egenskaperna för det angivna objektet. Returnerar null om den begärda egenskapen saknas. |
['has', string] |
boolean | Avgör om egenskaperna för en funktion har den angivna egenskapen. |
['has', string, object] |
boolean | Avgör om objektets egenskaper har den angivna egenskapen. |
['id'] |
värde | Hämtar funktionens ID om den har ett. |
['in', boolean | string | number, array] |
boolean | Avgör om ett objekt finns i en matris |
['in', substring, string] |
boolean | Avgör om en delsträng finns i en sträng |
['index-of', boolean | string | number, array | string] ['index-of', boolean | string | number, array | string, number] |
Nummer | Returnerar den första position där ett objekt kan hittas i en matris eller en delsträng finns i en sträng, eller -1 om indata inte kan hittas. Accepterar ett valfritt index varifrån sökningen ska påbörjas. |
['length', string | array] |
Nummer | Hämtar längden på en sträng eller en matris. |
['slice', array | string, number] ['slice', array | string, number, number] |
sträng | samling | Returnerar ett objekt från en matris eller en delsträng från en sträng från ett angivet startindex, eller mellan ett startindex och ett slutindex om det anges. Returvärdet ingår i startindexet men inte för slutindexet. |
Exempel
Egenskaper för en funktion kan nås direkt i ett uttryck med hjälp av ett get
uttryck. I det zoneColor
här exemplet används värdet för funktionen för att ange färgegenskapen för ett bubbellager.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: ['get', 'zoneColor'] //Get the zoneColor value.
});
Exemplet ovan fungerar bra om alla punktfunktioner har egenskapen zoneColor
. Om de inte gör det är färgen som standard "svart". Om du vill ändra återställningsfärgen använder du ett case
uttryck i kombination med has
uttrycket för att kontrollera om egenskapen finns. Om egenskapen inte finns returnerar du en reservfärg.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'case', //Use a conditional case expression.
['has', 'zoneColor'], //Check to see if feature has a "zoneColor" property
['get', 'zoneColor'], //If it does, use it.
'blue' //If it doesn't, default to blue.
]
});
Bubbel- och symbolskikt återger som standard koordinaterna för alla former i en datakälla. Det här beteendet kan markera hörnen för en polygon eller en rad. Alternativet filter
för lagret kan användas för att begränsa geometritypen för de funktioner som återges med hjälp av ett ['geometry-type']
uttryck i ett booleskt uttryck. I följande exempel begränsas ett bubbellager så att endast Point
funktioner återges.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
filter: ['==', ['geometry-type'], 'Point']
});
I följande exempel kan både Point
och MultiPoint
funktioner återges.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']]
});
På samma sätt återges konturen av Polygoner i linjeskikt. Om du vill inaktivera det här beteendet i ett linjeskikt lägger du till ett filter som endast tillåter LineString
och MultiLineString
funktioner.
Här följer några fler exempel på hur du använder datauttryck:
//Get item [2] from an array "properties.abcArray[1]" = "c"
['at', 2, ['get', 'abcArray']]
//Get item [0][1] from a 2D array "properties.array2d[0][1]" = "b"
['at', 1, ['at', 0, ['get', 'array2d']]]
//Check to see if a value is in an array "properties.abcArray.indexOf('a') !== -1" = true
['in', 'a', ['get', 'abcArray']]
//Gets the index of the value 'b' in an array "properties.abcArray.indexOf('b')" = 1
['index-of', 'b', ['get', 'abcArray']]
//Get the length of an array "properties.abcArray.length" = 3
['length', ['get', 'abcArray']]
//Get the value of a subproperty "properties._style.fillColor" = "red"
['get', 'fillColor', ['get', '_style']]
//Check that "fillColor" exists as a subproperty of "_style".
['has', 'fillColor', ['get', '_style']]
//Slice an array starting at index 2 "properties.abcArray.slice(2)" = ['c']
['slice', ['get', 'abcArray'], 2]
//Slice a string from index 0 to index 4 "properties.entityType.slice(0, 4)" = 'rest'
['slice', ['get', 'entityType'], 0, 4]
Matematiska uttryck
Matematiska uttryck tillhandahåller matematiska operatorer för att utföra datadrivna beräkningar inom uttrycksramverket.
Uttryck | Returtyp | beskrivning |
---|---|---|
['+', number, number, …] |
Nummer | Beräknar summan av de angivna talen. |
['-', number] |
Nummer | Subtraherar 0 med det angivna talet. |
['-', number, number] |
Nummer | Subtraherar de första talen med det andra talet. |
['*', number, number, …] |
Nummer | Multiplicerar de angivna talen tillsammans. |
['/', number, number] |
Nummer | Dividerar det första talet med det andra talet. |
['%', number, number] |
Nummer | Beräknar resten när det första talet divideras med det andra talet. |
['^', number, number] |
Nummer | Beräknar värdet för det första värdet som höjs till kraften i det andra talet. |
['abs', number] |
Nummer | Beräknar det absoluta värdet för det angivna talet. |
['acos', number] |
Nummer | Beräknar arccosinus för det angivna talet. |
['asin', number] |
Nummer | Beräknar arcsinus för det angivna talet. |
['atan', number] |
Nummer | Beräknar arctangensen för det angivna talet. |
['ceil', number] |
Nummer | Avrundar talet upp till nästa heltal. |
['cos', number] |
Nummer | Beräknar cos för det angivna talet. |
['distance', Point \| MultiPoint \| LineString \| MultiLineString \| Polygon \| MultiPolygon \| Feature \| FeatureCollection] |
Nummer | Beräknar det kortaste avståndet i meter mellan den utvärderade funktionen och indatageometrin. De avståndsvärden som returneras kan variera i precision på grund av förlust i precision från kodningsgeometrier, särskilt under zoomnivå 13. |
['e'] |
Nummer | Returnerar den matematiska konstanten e . |
['floor', number] |
Nummer | Avrundar talet nedåt till föregående heltal. |
['ln', number] |
Nummer | Beräknar den naturliga logaritmen för det angivna talet. |
['ln2'] |
Nummer | Returnerar den matematiska konstanten ln(2) . |
['log10', number] |
Nummer | Beräknar bas-tio logaritmen för det angivna talet. |
['log2', number] |
Nummer | Beräknar bas-två logaritmen för det angivna talet. |
['max', number, number, …] |
Nummer | Beräknar det maximala talet i den angivna uppsättningen tal. |
['min', number, number, …] |
Nummer | Beräknar det minsta talet i den angivna uppsättningen tal. |
['pi'] |
Nummer | Returnerar den matematiska konstanten PI . |
['round', number] |
Nummer | Avrundar talet till närmaste heltal. Halvvägsvärden avrundas bort från noll. Utvärderas till exempel ['round', -1.5] till -2 . |
['sin', number] |
Nummer | Beräknar sinus för det angivna talet. |
['sqrt', number] |
Nummer | Beräknar kvadratroten för det angivna talet. |
['tan', number] |
Nummer | Beräknar tangensen för det angivna talet. |
Samlingsuttryck
Ett aggregeringsuttryck definierar en beräkning som bearbetas över en uppsättning data och kan användas med clusterProperties
alternativet för en DataSource
. Utdata för dessa uttryck måste vara ett tal eller ett booleskt värde.
Ett aggregeringsuttryck tar in tre värden: ett operatorvärde och ett initialt värde och ett uttryck för att hämta en egenskap från varje funktion i en data som aggregeringsåtgärden ska tillämpas på. Det här uttrycket har följande format:
[operator: string, initialValue: boolean | number, mapExpression: Expression]
- operator: En uttrycksfunktion som sedan tillämpas på mot alla värden som beräknas av
mapExpression
för varje punkt i klustret. Operatorer som stöds:- För tal:
+
,*
,max
,min
- För booleska:
all
,any
- För tal:
- initialValue: Ett initialt värde där det första beräknade värdet aggregeras mot.
- mapExpression: Ett uttryck som tillämpas mot varje punkt i datauppsättningen.
Exempel
Om alla funktioner i en datauppsättning har en revenue
egenskap, vilket är ett tal. Sedan kan den totala intäkten för alla punkter i ett kluster, som skapas från datauppsättningen, beräknas. Den här beräkningen görs med hjälp av följande aggregeringsuttryck: ['+', 0, ['get', 'revenue']]
Ackumulerat uttryck
Uttrycket accumulated
hämtar värdet för en klusteregenskap som ackumulerats hittills och som används i clusterProperties
alternativet för en klustrad DataSource
källa.
Användning
["accumulated"]
Booleska uttryck
Booleska uttryck ger en uppsättning booleska operatoruttryck för att utvärdera booleska jämförelser.
Jämförelsen skrivs strikt när värden jämförs. Värden av olika typer anses alltid vara ojämlika. Fall där typerna är kända för att vara olika vid parsningstillfället anses vara ogiltiga och ger upphov till ett parsfel.
Uttryck | Returtyp | beskrivning |
---|---|---|
['!', boolean] |
boolean | Logisk negation. Returnerar true om indata är false , och false om indata är true . |
['!=', value, value] |
boolean | Returnerar true om indatavärdena inte är lika med, false annars. |
['<', value, value] |
boolean | Returnerar true om den första indatan är strikt mindre än den andra, false annars. Argumenten måste vara antingen båda strängarna eller båda talen. |
['<=', value, value] |
boolean | Returnerar true om den första indatan är mindre än eller lika med den andra, false annars. Argumenten måste vara antingen båda strängarna eller båda talen. |
['==', value, value] |
boolean | Returnerar true om indatavärdena är lika, false annars. Argumenten måste vara antingen båda strängarna eller båda talen. |
['>', value, value] |
boolean | Returnerar true om den första indatan är strikt större än den andra, false annars. Argumenten måste vara antingen båda strängarna eller båda talen. |
['>=' value, value] |
boolean | Returnerar true om den första indatan är större än eller lika med den andra, false annars. Argumenten måste vara antingen båda strängarna eller båda talen. |
['all', boolean, boolean, …] |
boolean | Returnerar true om alla indata är true , false annars. |
['any', boolean, boolean, …] |
boolean | Returnerar true om någon av indata är true , false annars. |
['within', Polygon | MultiPolygon | Feature<Polygon | MultiPolygon>] |
boolean | Returnerar true om den utvärderade funktionen är helt innesluten i en gräns för indatageometrin, annars falskt. Indatavärdet kan vara en giltig GeoJSON av typen Polygon , MultiPolygon , Feature eller FeatureCollection . Funktioner som stöds för utvärdering:- Punkt: Returnerar false om en punkt ligger på gränsen eller faller utanför gränsen.– LineString: Returnerar false om någon del av en linje faller utanför gränsen, linjen korsar gränsen eller om en rads slutpunkt ligger på gränsen. |
Villkorliga uttryck
Villkorsuttryck tillhandahåller logikåtgärder som liknar if-statements.
Följande uttryck utför villkorsstyrda logikåtgärder på indata. Uttrycket tillhandahåller till exempel case
"if/then/else"-logik medan match
uttrycket är som en "switch-statement".
Skiftlägesuttryck
Ett case
uttryck är en typ av villkorsuttryck som tillhandahåller logiken "if/then/else". Den här typen av uttryck går igenom en lista över booleska villkor. Det returnerar utdatavärdet för det första booleska villkoret som ska utvärderas till sant.
Följande pseudokod definierar uttryckets case
struktur.
[
'case',
condition1: boolean,
output1: value,
condition2: boolean,
output2: value,
...,
fallback: value
]
Exempel
I följande exempel går vi igenom olika booleska villkor tills det hittar ett som utvärderas till true
och returnerar sedan det associerade värdet. Om inget booleskt villkor utvärderas till true
returneras ett återställningsvärde.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'case',
//Check to see if the first boolean expression is true, and if it is, return its assigned result.
['has', 'zoneColor'],
['get', 'zoneColor'],
//Check to see if the second boolean expression is true, and if it is, return its assigned result.
['all', ['has', ' temperature '], ['>', ['get', 'temperature'], 100]],
'red',
//Specify a default value to return.
'green'
]
});
Matcha uttryck
Ett match
uttryck är en typ av villkorsuttryck som tillhandahåller switch-statement som logik. Indata kan vara valfritt uttryck som ['get', 'entityType']
returnerar en sträng eller ett tal. Varje etikett måste vara antingen ett enda literalvärde eller en matris med literalvärden, vars värden måste vara alla strängar eller alla tal. Indata matchar om något av värdena i matrisen matchar. Varje etikett måste vara unik. Om indatatypen inte matchar typen av etiketter blir resultatet återställningsvärdet.
Följande pseudokod definierar uttryckets match
struktur.
[
'match',
input: number | string,
label1: number | string | (number | string)[],
output1: value,
label2: number | string | (number | string)[],
output2: value,
...,
fallback: value
]
Exempel
I följande exempel tittar vi på entityType
egenskapen för en point-funktion i ett bubbellager och söker efter en matchning. Om den hittar en matchning returneras det angivna värdet eller returnerar återställningsvärdet.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'match',
//Get the property to match.
['get', 'entityType'],
//List the values to match and the result to return for each match.
'restaurant', 'red',
'park', 'green',
//Specify a default value to return if no match is found.
'black'
]
});
I följande exempel används en matris för att visa en uppsättning etiketter som alla ska returnera samma värde. Den här metoden är mycket effektivare än att lista varje etikett individuellt. I det här fallet returneras färgen "röd" om egenskapen entityType
är "restaurang" eller "grocery_store".
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'match',
//Get the property to match.
['get', 'entityType'],
//List the values to match and the result to return for each match.
['restaurant', 'grocery_store'], 'red',
'park', 'green',
//Specify a default value to return if no match is found.
'black'
]
});
Sammansejningsuttryck
Ett coalesce
uttryck går igenom en uppsättning uttryck tills det första värdet som inte är null hämtas och returnerar det värdet.
Följande pseudokod definierar uttryckets coalesce
struktur.
[
'coalesce',
value1,
value2,
…
]
Exempel
I följande exempel används ett coalesce
uttryck för att ange textField
alternativet för ett symbolskikt. Om egenskapen title
saknas i funktionen eller är inställd på null
försöker uttrycket leta efter egenskapen, om den subTitle
saknas eller null
, återgår den till en tom sträng.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
textField: [
'coalesce',
//Try getting the title property.
['get', 'title'],
//If there is no title, try getting the subTitle.
['get', 'subTitle'],
//Default to an empty string.
''
]
}
});
I följande exempel används ett coalesce
uttryck för att hämta den första tillgängliga bildikonen som är tillgänglig i map sprite från en lista med angivna bildnamn.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
image: [
'coalesce',
//Try getting the image with id 'missing-image'.
['image', 'missing-image'],
//Specify an image id to fallback to.
'marker-blue'
]
}
});
Typuttryck
Typuttryck tillhandahåller verktyg för att testa och konvertera olika datatyper som strängar, tal och booleska värden.
Uttryck | Returtyp | beskrivning |
---|---|---|
['array', value] | ['array', type: "string" | "number" | "boolean", value] |
Object[] | Hävdar att indata är en matris. |
['boolean', value] | ["boolean", value, fallback: value, fallback: value, ...] |
boolean | Hävdar att indatavärdet är ett booleskt värde. Om flera värden anges utvärderas var och en i ordning tills ett booleskt värde hämtas. Om ingen av indata är booleska värden är uttrycket ett fel. |
['collator', { 'case-sensitive': boolean, 'diacritic-sensitive': boolean, 'locale': string }] |
collator | Returnerar en sorterare för användning i språkberoende jämförelseåtgärder. De skiftlägeskänsliga och diakritiska-känsliga alternativen är som standard falska. Språkargumentet för nationella inställningar anger IETF-språktaggen för språkvarianten som ska användas. Om inget anges används standardspråket. Om det begärda språket inte är tillgängligt använder sorteraren ett systemdefinierat återställningsspråk. Använd löst språk för att testa resultatet av nationella återställningsbeteenden. |
['literal', array] ['literal', object] |
matris | objekt | Returnerar en literalmatris eller ett objektvärde. Använd det här uttrycket för att förhindra att en matris eller ett objekt utvärderas som ett uttryck, vilket krävs när en matris eller ett objekt returneras av ett uttryck. |
['image', string] |
sträng | Kontrollerar om ett angivet bild-ID läses in i mappningsbildens sprite. I så fall returneras ID:t, annars returneras null. |
['number', value] | ["number", value, fallback: value, fallback: value, ...] |
Nummer | Anger att indatavärdet är ett tal. Om flera värden anges utvärderas var och en i ordning tills ett tal hämtas. Om ingen av indata är tal är uttrycket ett fel. |
['object', value] | ["object", value, fallback: value, fallback: value, ...] |
Objekt | Hävdar att indatavärdet är ett objekt. Om flera värden anges utvärderas var och en i ordning tills ett objekt hämtas. Om ingen av indata är objekt är uttrycket ett fel. |
['string', value] | ["string", value, fallback: value, fallback: value, ...] |
sträng | Anger att indatavärdet är en sträng. Om flera värden anges utvärderas var och en i ordning tills en sträng hämtas. Om ingen av indata är strängar är uttrycket ett fel. |
['to-boolean', value] |
boolean | Konverterar indatavärdet till ett booleskt värde. Resultatet är false när indata är en tom sträng, , 0 false , null eller NaN , annars dess true . |
['to-color', value] ['to-color', value1, value2…] |
color | Konverterar indatavärdet till en färg. Om flera värden anges utvärderas var och en i ordning tills den första lyckade konverteringen erhålls. Om ingen av indata kan konverteras är uttrycket ett fel. |
['to-number', value] ['to-number', value1, value2, …] |
Nummer | Konverterar indatavärdet till ett tal, om möjligt. Om indata är null eller false blir resultatet 0. Om indata är true är resultatet 1. Om indata är en sträng konverteras den till ett tal med hjälp av strängfunktionen ToNumber i ECMAScript Language Specification. Om flera värden anges utvärderas var och en i ordning tills den första lyckade konverteringen erhålls. Om ingen av indata kan konverteras är uttrycket ett fel. |
['to-string', value] |
sträng | Konverterar indatavärdet till en sträng. Om indata är null är "" resultatet . Om indata är ett booleskt värde blir "true" resultatet eller "false" . Om indata är ett tal konverteras det till en sträng med hjälp av funktionen ToString number i ECMAScript Language Specification. Om indata är en färg konverteras den till CSS RGBA-färgsträngen "rgba(r,g,b,a)" . Annars konverteras indata till en sträng med hjälp av funktionen JSON.stringify i ECMAScript Language Specification. |
['typeof', value] |
sträng | Returnerar en sträng som beskriver typen av angivet värde. |
Dricks
Om ett felmeddelande som liknar Expression name must be a string, but found number instead. If you wanted a literal array, use ["literal", [...]].
visas i webbläsarkonsolen innebär det att det finns ett uttryck någonstans i koden som har en matris som inte har en sträng för sitt första värde. Om du vill att uttrycket ska returnera en matris omsluter du matrisen literal
med uttrycket. I följande exempel anges ikonalternativet offset
för ett symbolskikt, som måste vara en matris som innehåller två tal, genom att använda ett match
uttryck för att välja mellan två förskjutningsvärden baserat på värdet entityType
för egenskapen för punktfunktionen.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
offset: [
'match',
//Get the entityType value.
['get', 'entityType'],
//If the entity type is 'restaurant', return a different pixel offset.
'restaurant', ['literal', [0, -10]],
//Default to value.
['literal', [0, 0]]
]
}
});
Färguttryck
Färguttryck gör det enklare att skapa och ändra färgvärden.
Uttryck | Returtyp | beskrivning |
---|---|---|
['interpolate-hcl', interpolation: ["linear"] \| ["exponential", base] \| ["cubic-bezier", x1, y1, x2, y2], input: number, stop_input_1: number, stop_output_1: Color, stop_input_n: number, stop_output_n: Color, ...] |
color | Ger kontinuerliga, jämna resultat genom att interpolera mellan par med indata- och utdatavärden ("stopp"). Fungerar som interpolate , men utdatatypen måste vara en färg och interpoleringen utförs i färgrymden Hue-Chroma-Luminance. |
['interpolate-lab', interpolation: ["linear"] \| ["exponential", base] \| ["cubic-bezier", x1, y1, x2, y2], input: number, stop_input_1: number, stop_output_1: Color, stop_input_n: number, stop_output_n: Color, ...] |
color | Ger kontinuerliga, jämna resultat genom att interpolera mellan par med indata- och utdatavärden ("stopp"). Fungerar som interpolate , men utdatatypen måste vara en färg och interpoleringen utförs i CIELAB-färgområdet. |
['rgb', number, number, number] |
color | Skapar ett färgvärde från röda, gröna och blå komponenter som sträcker sig mellan 0 och 255 , och en alfakomponent i 1 . Om någon komponent ligger utom räckhåll är uttrycket ett fel. |
['rgba', number, number, number, number] |
color | Skapar ett färgvärde från röda, gröna, blå komponenter som sträcker sig mellan 0 och 255 , och en alfakomponent inom ett intervall av 0 och 1 . Om någon komponent ligger utom räckhåll är uttrycket ett fel. |
['to-rgba'] |
[tal, tal, tal, tal] | Returnerar en matris med fyra element som innehåller indatafärgens röda, gröna, blå och alfakomponenter i den ordningen. |
Exempel
I följande exempel skapas ett RGB-färgvärde som har ett rött värde på 255
, och gröna och blå värden som beräknas genom att 2.5
multiplicera med värdet för temperature
egenskapen. När temperaturen ändras ändras färgen till olika nyanser av rött.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'rgb', //Create a RGB color value.
255, //Set red value to 255.
['*', 2.5, ['get', 'temperature']], //Multiple the temperature by 2.5 and set the green value.
['*', 2.5, ['get', 'temperature']] //Multiple the temperature by 2.5 and set the blue value.
]
});
Strängoperatoruttryck
Strängoperatoruttryck utför konverteringsåtgärder på strängar som att sammanfoga och konvertera skiftläget.
Uttryck | Returtyp | beskrivning |
---|---|---|
['concat', string, string, …] |
sträng | Sammanfogar flera strängar. Varje värde måste vara en sträng. to-string Använd typuttrycket för att konvertera andra värdetyper till strängar om det behövs. |
['downcase', string] |
sträng | Konverterar den angivna strängen till gemener. |
['is-supported-script', string] | ['is-supported-script', Expression] |
boolean | Avgör om indatasträngen använder en teckenuppsättning som stöds av den aktuella teckensnittsstacken. Till exempel: ['is-supported-script', 'ಗೌರವಾರ್ಥವಾಗಿ'] |
['resolved-locale', string] |
sträng | Returnerar IETF-språktaggen för språkvarianten som används av den tillhandahållna sorteringsenheten som kan användas för att fastställa standardspråket för systemet eller för att avgöra om en begärd språkvariant har lästs in. |
['upcase', string] |
sträng | Konverterar den angivna strängen till versaler. |
Exempel
I följande exempel konverteras temperature
egenskapen för punktfunktionen till en sträng och sammanfogar sedan "°F" till slutet av den.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
textField: ['concat', ['to-string', ['get', 'temperature']], '°F'],
//Some additional style options.
offset: [0, -1.5],
size: 12,
color: 'white'
}
});
Ovanstående uttryck renderar en pin-kod på kartan med texten "64°F" överlagrad ovanpå den enligt följande bild.
Interpolera och steguttryck
Interpolera och steguttryck kan användas för att beräkna värden längs en interpolerad kurva eller stegfunktion. Dessa uttryck tar in ett uttryck som returnerar ett numeriskt värde som indata, till exempel ['get', 'temperature']
. Indatavärdet utvärderas mot par med indata- och utdatavärden för att fastställa det värde som bäst passar den interpolerade kurvan eller stegfunktionen. Utdatavärdena kallas "stopp". Indatavärdena för varje stopp måste vara ett tal och vara i stigande ordning. Utdatavärdena måste vara ett tal och en matris med tal eller en färg.
Interpolera uttryck
Ett interpolate
uttryck kan användas för att beräkna en kontinuerlig, smidig uppsättning värden genom att interpolera mellan stoppvärden. Ett interpolate
uttryck som returnerar färgvärden ger en färgtoning där resultatvärden väljs från.
Det finns tre typer av interpoleringsmetoder som kan användas i ett interpolate
uttryck:
['linear']
- Interpolerar linjärt mellan stoppparet.['exponential', base]
- Interpolerar exponentiellt mellan stoppen. Värdetbase
styr den hastighet med vilken utdata ökar. Högre värden gör att utdata ökar mer mot den övre änden av intervallet. Ettbase
värde nära 1 ger en utdata som ökar linjärt.['cubic-bezier', x1, y1, x2, y2]
- Interpolerar med hjälp av en kubisk Bezier-kurva som definieras av de angivna kontrollpunkterna.
Här är ett exempel på hur dessa olika typer av interpolationer ser ut.
Linjär | Exponentiellt | Kubik bezier |
---|---|---|
Följande pseudokod definierar uttryckets interpolate
struktur.
[
'interpolate',
interpolation: ['linear'] | ['exponential', base] | ['cubic-bezier', x1, y1, x2, y2],
input: number,
stopInput1: number,
stopOutput1: value1,
stopInput2: number,
stopOutput2: value2,
...
]
Exempel
I följande exempel används ett linear interpolate
uttryck för att ange color
egenskapen för ett bubbellager baserat på temperature
egenskapen för punktfunktionen. Om värdet temperature
är mindre än 60 returneras "blå". Om den är mellan 60 och mindre än 70 returneras gult. Om det är mellan 70 och mindre än 80 returneras "orange". Om den är 80 eller högre returneras "röd".
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'interpolate',
['linear'],
['get', 'temperature'],
50, 'blue',
60, 'yellow',
70, 'orange',
80, 'red'
]
});
Följande bild visar hur färgerna väljs för ovanstående uttryck.
Steguttryck
Ett step
uttryck kan användas för att beräkna diskreta, stegvisa resultatvärden genom att utvärdera en bitvis konstant funktion som definieras av stopp.
Följande pseudokod definierar uttryckets step
struktur.
[
'step',
input: number,
output0: value0,
stop1: number,
output1: value1,
stop2: number,
output2: value2,
...
]
Steguttryck returnerar utdatavärdet för stoppet precis före indatavärdet, eller det första indatavärdet om indata är mindre än det första stoppet.
Exempel
I följande exempel används ett step
uttryck för att ange color
egenskapen för ett bubbellager baserat på temperature
egenskapen för punktfunktionen. Om värdet temperature
är mindre än 60 returneras "blå". Om den är mellan 60 och mindre än 70 returneras "gul". Om det är mellan 70 och mindre än 80 returneras "orange". Om den är 80 eller högre returneras "röd".
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
'step',
['get', 'temperature'],
'blue',
60, 'yellow',
70, 'orange',
80, 'red'
]
});
Följande bild visar hur färgerna väljs för ovanstående uttryck.
Lagerspecifika uttryck
Särskilda uttryck som endast gäller för specifika lager.
Uttryck för värmekartadensitet
Ett uttryck för värmekartans densitet hämtar värdet för värmekartans densitet för varje pixel i ett termisk kartskikt och definieras som ['heatmap-density']
. Det här värdet är ett tal mellan 0
och 1
. Den används i kombination med ett interpolation
eller step
ett uttryck för att definiera den färgtoning som används för att färglägga värmekartan. Det här uttrycket kan bara användas i färgalternativet för termisk kartskikt.
Dricks
Färgen vid index 0, i ett interpolationsuttryck eller standardfärgen för en stegfärg, definierar färgen på det område där det inte finns några data. Färgen på index 0 kan användas för att definiera en bakgrundsfärg. Många föredrar att ange det här värdet till transparent eller halvtransparent svart.
Exempel
I det här exemplet används ett linerinterpolationsuttryck för att skapa en jämn färgtoning för återgivning av värmekartan.
var layer = new atlas.layer.HeatMapLayer(datasource, null, {
color: [
'interpolate',
['linear'],
['heatmap-density'],
0, 'transparent',
0.01, 'purple',
0.5, '#fb00fb',
1, '#00c3ff'
]
});
Förutom att använda en jämn toning för att färglägga en värmekarta kan färger anges inom en uppsättning intervall med hjälp av ett step
uttryck. Om du använder ett step
uttryck för att färglägga värmekartan bryts densiteten visuellt upp i områden som liknar en kontur- eller radarkarta.
var layer = new atlas.layer.HeatMapLayer(datasource, null, {
color: [
'step',
['heatmap-density'],
'transparent',
0.01, 'navy',
0.25, 'navy',
0.5, 'green',
0.75, 'yellow',
1, 'red'
]
});
Mer information finns i dokumentationen Lägg till en termisk karta.
Linjeförloppsuttryck
Ett linjeförloppsuttryck hämtar förloppet längs en toningslinje i ett linjeskikt och definieras som ['line-progress']
. Det här värdet är ett tal mellan 0 och 1. Den används i kombination med ett interpolation
eller step
ett uttryck. Det här uttrycket kan bara användas med alternativet strokeGradient i linjeskiktet.
Kommentar
Alternativet strokeGradient
för linjeskiktet kräver lineMetrics
att alternativet för datakällan anges till true
.
Exempel
I det ['line-progress']
här exemplet används uttrycket för att tillämpa en färgtoning på linjestrecket.
var layer = new atlas.layer.LineLayer(datasource, null, {
strokeGradient: [
'interpolate',
['linear'],
['line-progress'],
0, "blue",
0.1, "royalblue",
0.3, "cyan",
0.5, "lime",
0.7, "yellow",
1, "red"
]
});
Ett interaktivt arbetsexempel finns i Lägga till en linjetoning till en linje.
Textfältformatuttryck
Textfältformatuttrycket kan användas med textField
alternativet för egenskapen symbolskikt textOptions
för att ge blandad textformatering. Med det här uttrycket kan du ange en uppsättning indatasträngar och formateringsalternativ. Följande alternativ kan anges för varje indatasträng i det här uttrycket.
'font-scale'
– Anger skalningsfaktorn för teckenstorleken. Om det här värdet anges åsidosätter detsize
egenskapentextOptions
för den enskilda strängen.'text-font'
– Anger en eller flera teckensnittsfamiljer som ska användas för den här strängen. Om det här värdet anges åsidosätter detfont
egenskapentextOptions
för den enskilda strängen.
Följande pseudokod definierar strukturen för textfältformatuttrycket.
[
'format',
input1: string,
options1: {
'font-scale': number,
'text-font': string[]
},
input2: string,
options2: {
'font-scale': number,
'text-font': string[]
},
…
]
Exempel
Följande exempel formaterar textfältet genom att lägga till ett fetstilt teckensnitt och skala upp teckenstorleken för title
egenskapen för funktionen. Det här exemplet lägger också till subTitle
egenskapen för funktionen på en ny rad, med en nedskalad teckenstorlek.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
textField: [
'format',
//Bold the title property and scale its font size up.
['get', 'title'],
{
'text-font': ['literal', ['StandardFont-Bold']],
'font-scale': 1.25
},
'\n', {}, //Add a new line without any formatting.
//Scale the font size down of the subTitle property.
['get', 'subTitle'],
{
'font-scale': 0.75
}
]
}
});
Det här lagret återger punktfunktionen enligt följande bild:
Talformatuttryck
Uttrycket number-format
kan bara användas med textField
alternativet för ett symbolskikt. Det här uttrycket konverterar det angivna talet till en formaterad sträng. Det här uttrycket omsluter Funktionen Number.toLocalString i JavaScript och stöder följande uppsättning alternativ.
locale
– Ange det här alternativet för att konvertera tal till strängar på ett sätt som överensstämmer med det angivna språket. Skicka en BCP 47-språktagg till det här alternativet.currency
– Konvertera talet till en sträng som representerar en valuta. Möjliga värden är ISO 4217-valutakoder, till exempel "USD" för US-dollarn, "EUR" för euron eller "CNY" för den kinesiska RMB.'min-fraction-digits'
– Anger det minsta antalet decimaler som ska inkluderas i strängversionen av talet.'max-fraction-digits'
– Anger det maximala antalet decimaler som ska inkluderas i strängversionen av talet.
Följande pseudokod definierar strukturen för textfältformatuttrycket.
[
'number-format',
input: number,
options: {
locale: string,
currency: string,
'min-fraction-digits': number,
'max-fraction-digits': number
}
]
Exempel
I följande exempel används ett number-format
uttryck för att ändra hur revenue
egenskapen för punktfunktionen återges i textField
alternativet för ett symbolskikt så att det visas som ett us-dollarvärde.
var layer = new atlas.layer.SymbolLayer(datasource, null, {
textOptions: {
textField: [
'number-format',
['get', 'revenue'],
{ 'currency': 'USD' }
],
offset: [0, 0.75]
}
});
Det här lagret återger punktfunktionen enligt följande bild:
Bilduttryck
Ett bilduttryck kan användas med image
alternativen och textField
för ett symbolskikt och fillPattern
alternativet för polygonskiktet. Det här uttrycket kontrollerar att den begärda bilden finns i formatet och returnerar antingen det lösta bildnamnet eller null
, beroende på om bilden för närvarande är i formatet eller inte. Den här valideringsprocessen är synkron och kräver att avbildningen har lagts till i formatet innan den begärs i bildargumentet.
Exempel
I följande exempel används ett image
uttryck för att lägga till en ikon infogad med text i ett symbollager.
//Load the custom image icon into the map resources.
map.imageSprite.add('wifi-icon', 'wifi.png').then(function () {
//Create a data source and add it to the map.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Create a point feature and add it to the data source.
datasource.add(new atlas.data.Point(map.getCamera().center));
//Add a layer for rendering point data as symbols.
map.layers.add(new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
image: 'none'
},
textOptions: {
//Create a formatted text string that has an icon in it.
textField: ["format", 'Ricky\'s ', ["image", "wifi-icon"], ' Palace']
}
}));
});
Det här lagret återger textfältet i symbolskiktet enligt följande bild:
Zoomuttryck
Ett zoom
uttryck används för att hämta kartans aktuella zoomnivå vid återgivningstiden och definieras som ['zoom']
. Det här uttrycket returnerar ett tal mellan kartans minsta och högsta zoomnivåintervall. Azure Maps interaktiva kartkontroller för webben och Android stöder 25 zoomnivåer, numrerade 0 till och med 24. Med uttrycket zoom
kan format ändras dynamiskt när kartans zoomnivå ändras. Uttrycket zoom
kan bara användas med interpolate
och step
uttryck.
Exempel
Som standard har radien av datapunkter som återges i värmekartans lager en fast pixelradie för alla zoomnivåer. När kartan zoomas aggregeras data och värmekartlagret ser annorlunda ut. Ett zoom
uttryck kan användas för att skala radien för varje zoomnivå så att varje datapunkt täcker samma fysiska område på kartan. Det gör att värmekartlagret ser mer statiskt och konsekvent ut. Varje zoomningsnivå på kartan har dubbelt så många bildpunkter lodrätt och vågrätt som föregående zoomnivå. Om du skalar radien, så att den fördubblas med varje zoomnivå, skapas en värmekarta som ser konsekvent ut på alla zoomnivåer. Det kan åstadkommas med uttrycket zoom
med ett base 2 exponential interpolation
uttryck, med pixelradien inställd för den minsta zoomnivån och en skalad radie för den maximala zoomnivå som beräknas enligt vad som 2 * Math.pow(2, minZoom - maxZoom)
visas i följande exempel.
var layer = new atlas.layer.HeatMapLayer(datasource, null, {
radius: [
'interpolate',
['exponential', 2],
['zoom'],
//For zoom level 1 set the radius to 2 pixels.
1, 2,
//Between zoom level 1 and 19, exponentially scale the radius from 2 pixels to 2 * Math.pow(2, 19 - 1) pixels (524,288 pixels).
19, 2 * Math.pow(2, 19 - 1)
]
};
Ett interaktivt arbetsexempel finns i Konsekvent zoombar värmekarta.
Variabelbindningsuttryck
Variabelbindningsuttryck lagrar resultatet av en beräkning i en variabel. Så att beräkningsresultaten kan refereras någon annanstans i ett uttryck flera gånger. Det är en användbar optimering för uttryck som omfattar många beräkningar.
Uttryck | Returtyp | beskrivning |
---|---|---|
[ Låt, name1: string, value1: any, name2: string, value2: any, … childExpression ] |
Lagrar ett eller flera värden som variabler för användning av var uttrycket i det underordnade uttrycket som returnerar resultatet. |
|
['var', name: string] |
någon | Refererar till en variabel som skapades med uttrycket let . |
Exempel
I det här exemplet används ett uttryck som beräknar intäkten i förhållande till temperaturförhållandet och sedan använder ett case
uttryck för att utvärdera olika booleska åtgärder för det här värdet. Uttrycket let
används för att lagra intäkter i förhållande till temperaturförhållandet, så att det bara behöver beräknas en gång. Uttrycket var
refererar till den här variabeln så ofta som det behövs utan att behöva beräkna om den.
var layer = new atlas.layer.BubbleLayer(datasource, null, {
color: [
//Divide the point features `revenue` property by the `temperature` property and store it in a variable called `ratio`.
'let', 'ratio', ['/', ['get', 'revenue'], ['get', 'temperature']],
//Evaluate the child expression in which the stored variable is used.
[
'case',
//Check to see if the ratio is less than 100, return 'red'.
['<', ['var', 'ratio'], 100],
'red',
//Check to see if the ratio is less than 200, return 'green'.
['<', ['var', 'ratio'], 200],
'green',
//Return `blue` for values greater or equal to 200.
'blue'
]
]
});
Nästa steg
I följande artiklar finns fler kodexempel som implementerar uttryck:
Läs mer om de lageralternativ som stöder uttryck: