Dela via


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
  • 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, Featureeller 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 trueoch returnerar sedan det associerade värdet. Om inget booleskt villkor utvärderas till truereturneras 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å nullfö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, , 0false, nulleller 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 falseblir 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.

Skärmbild av en karta som visar exemplet med strängoperatoruttryck.

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ärdet base styr den hastighet med vilken utdata ökar. Högre värden gör att utdata ökar mer mot den övre änden av intervallet. Ett base 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
Linjär interpoleringsdiagram Exponentiell interpoleringsdiagram Kubik bezier interpoleringsdiagram

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.

Exempel på interpolera 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.

Exempel på steguttryck

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 det size egenskapen textOptions 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 det font egenskapen textOptions 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:

Bild av point-funktionen med formaterat textfält

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:

Exempel på talformatuttryck

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:

Exempel på bilduttryck

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: