Veri tabanlı stil ifadeleri (Android SDK)

İfadeler, bir veri kaynağındaki her bir şekil için tanımlanan özellikleri gözlemleyecek stil seçeneklerine iş mantığı uygulamanızı sağlar. İfadeler, bir veri kaynağındaki veya katmandaki verileri filtreleyebilir. İfadeler, if-deyimleri gibi koşullu mantığdan oluşabilir. Ayrıca, bunları kullanarak verileri işlemek için kullanılabilir: dize işleçleri, mantıksal işleçler ve matematik işleçleri.

Veri odaklı stiller, Stillendirme etrafında iş mantığını uygulamak için gereken kod miktarını azaltır. Katmanlarla kullanıldığında, ifadeler ayrı bir iş parçacığında işleme zamanında değerlendirilir. Bu işlevsellik, UI iş parçacığında iş mantığını değerlendirmeye kıyasla daha yüksek performans sağlar.

azure Haritalar Android SDK, azure Haritalar Web sdk 'sı ile neredeyse tüm aynı stil ifadelerini destekler, böylece veri odaklı stil ifadelerinde (Web sdk) özetlenen tüm kavramlar bir Android uygulamasına uygulanabilir. Azure Haritalar Android SDK tüm stil ifadeleri com.microsoft.azure.maps.mapcontrol.options.Expression ad alanı altında kullanılabilir. Birçok farklı tür stil ifadesi vardır.

İfade türü Description
Mantıksal ifadeler Boolean ifadeleri, Boole karşılaştırmaları değerlendirmek için bir dizi Boole işleci sağlar.
Renk ifadeleri Renk ifadeleri renk değerleri oluşturmayı ve işlemeyi kolaylaştırır.
Koşullu ifadeler Koşullu ifadeler, IF-deyimleri gibi mantıksal işlemler sağlar.
Veri ifadeleri Bir özelliğindeki Özellik verilerine erişim sağlar.
Ara ve adım ifadelerini enterpolala Enterpolasyonlu ve step ifadeleri, bir ara değerli eğri veya adım işlevi üzerinde değerleri hesaplamak için kullanılabilir.
JSON tabanlı ifadeler , Web SDK için oluşturulan stil ham JSON tabanlı ifadelerin Android SDK birlikte yeniden kullanılmasını kolaylaştırır.
Katmana özgü ifadeler Yalnızca tek bir katman için geçerli olan özel ifadeler.
Matematik ifadeleri Expression Framework içinde veri odaklı hesaplamalar gerçekleştirmek için matematik işleçleri sağlar.
Dize işleci ifadeleri Dize operatörü ifadeleri, büyük/küçük harfe dönüştürme ve dönüştürme gibi dizeler üzerinde dönüştürme işlemleri gerçekleştirir.
Tür ifadeleri Tür ifadeleri, dizeler, sayılar ve Boole değerleri gibi farklı veri türlerini test etmek ve dönüştürmek için araçlar sağlar.
Değişken bağlama ifadeleri Değişken bağlama ifadeleri, bir hesaplamanın sonuçlarını bir değişkende depolar ve depolanan değeri yeniden hesaplamaya gerek kalmadan bir ifadenin başka bir yerinde birden çok kez başvurulur.
Yakınlaştırma ifadesi İşleme zamanında haritanın geçerli yakınlaştırma düzeyini alır.

Not

İfadelerin sözdizimi büyük ölçüde Java ve Kotlin içinde aynıdır. Belgeler Kotlin olarak ayarlandıysa, ancak Java için kod blokları ' na sahipseniz, kod her iki dilde de aynıdır.

Belgenin bu bölümündeki tüm örnekler, bu ifadelerin kullanılabileceği farklı yolları göstermek için aşağıdaki özelliği kullanır.

{
    "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"
        }
    }
}

Aşağıdaki kod, bu coğrafi JSON özelliğinin bir uygulamada el ile nasıl oluşturulacağını gösterir.

//Create a point feature.
Feature feature = Feature.fromGeometry(Point.fromLngLat(-100, 45));

//Add properties to the feature.
feature.addNumberProperty("id", 123);
feature.addStringProperty("entityType", "restaurant");
feature.addNumberProperty("revenue", 12345);
feature.addStringProperty("subTitle", "Building 40");
feature.addNumberProperty("temperature", 64);
feature.addStringProperty("title", "Cafeteria");
feature.addStringProperty("zoneColor", "purple");

JsonArray abcArray = new JsonArray();
abcArray.add("a");
abcArray.add("b");
abcArray.add("c");

feature.addProperty("abcArray", abcArray);

JsonArray array1 = new JsonArray();
array1.add("a");
array1.add("b");

JsonArray array2 = new JsonArray();
array1.add("x");
array1.add("y");

JsonArray array2d = new JsonArray();
array2d.add(array1);
array2d.add(array2);

feature.addProperty("array2d", array2d);

JsonObject style = new JsonObject();
style.addProperty("fillColor", "red");

feature.addProperty("_style", style);
//Create a point feature.
val feature = Feature.fromGeometry(Point.fromLngLat(-100, 45))

//Add properties to the feature.
feature.addNumberProperty("id", 123)
feature.addStringProperty("entityType", "restaurant")
feature.addNumberProperty("revenue", 12345)
feature.addStringProperty("subTitle", "Building 40")
feature.addNumberProperty("temperature", 64)
feature.addStringProperty("title", "Cafeteria")
feature.addStringProperty("zoneColor", "purple")

val abcArray = JsonArray()
abcArray.add("a")
abcArray.add("b")
abcArray.add("c")

feature.addProperty("abcArray", abcArray)

val array1 = JsonArray()
array1.add("a")
array1.add("b")

val array2 = JsonArray()
array1.add("x")
array1.add("y")

val array2d = JsonArray()
array2d.add(array1)
array2d.add(array2)

feature.addProperty("array2d", array2d)

val style = JsonObject()
style.addProperty("fillColor", "red")

feature.addProperty("_style", style)

Aşağıdaki kod, JSON nesnesinin strıngıt sürümünün bir uygulamadaki GeoJSON özelliğine nasıl seri hale alınacağını gösterir.

String 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\"}}}";

Feature feature = Feature.fromJson(featureString);
val 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\"}}}"

val feature = Feature.fromJson(featureString)

JSON tabanlı ifadeler

Azure Haritalar Web SDK 'sı ayrıca bir JSON dizisi kullanılarak temsil edilen veri tabanlı stil ifadelerini destekler. Bu aynı ifadeler Android SDK yerel sınıfı kullanılarak yeniden oluşturulabilir Expression . Alternatif olarak, bu JSON tabanlı ifadeler, gibi bir Web işlevi kullanılarak bir dizeye dönüştürülebilir JSON.stringify ve Expression.raw(String rawExpression) yöntemine geçirilir. Örneğin, aşağıdaki JSON ifadesini alın.

var exp = ['get','title'];
JSON.stringify(exp); // = "['get','title']"

Yukarıdaki ifadenin strıngısınbulunan sürümü şöyle olabilir "['get','title']" ve Android SDK şu şekilde okunabilir.

Expression exp = Expression.raw("['get','title']")
val exp = Expression.raw("['get','title']")

bu yaklaşımın kullanılması, Azure Haritalar kullanan mobil uygulamalar ve web uygulamaları arasında stil ifadelerin yeniden kullanılmasını kolaylaştırır.

bu videoda, Azure Haritalar veri tabanlı stillendirme hakkında bir genel bakış sunulmaktadır.


Veri ifadeleri

Veri ifadeleri bir özelliğin özellik verilerine erişim sağlar.

Expression Dönüş türü Description
accumulated() sayı Şimdiye kadar biriktirilen bir küme özelliğinin değerini alır. Bu, yalnızca clusterProperties kümelenmiş bir kaynak seçeneğinde kullanılabilir DataSource .
at(number | Expression, Expression) değer Diziden bir öğe alır.
geometryType() string Özelliğin geometri türünü alır: Point, MultiPoint, LineString, MultiLineString, Çokgen, MultiPolygon.
get(string | Expression) | get(string | Expression, Expression) değer Belirtilen nesnenin özelliklerinden özellik değerini alır. İstenen özellik eksikse null değerini döndürür.
has(string | Expression) | has(string | Expression, Expression) boolean Özelliğin özelliklerinin belirtilen özelliğe sahip olup olmadığını belirler.
id() değer Özelliği varsa özelliğin KIMLIĞINI alır.
in(string | number | Expression, Expression) boolean Dizide bir öğe olup olmadığını belirler
length(string | Expression) sayı Bir dizenin veya dizinin uzunluğunu alır.
properties() değer Özellik özellikleri nesnesini alır.

Aşağıdaki Web SDK stili ifadeleri Android SDK desteklenmez:

  • dizini
  • 'ın

Örnekler

Bir özelliğin özelliklerine, bir ifade kullanarak doğrudan bir ifadede erişilebilir get . Bu örnek, zoneColor bir kabarcık katmanının Color özelliğini belirtmek için özelliğinin değerini kullanır.

BubbleLayer layer = new BubbleLayer(source,
    //Get the zoneColor value.
    bubbleColor(get("zoneColor"))
);
val layer = BubbleLayer(source,
    //Get the zoneColor value.
    bubbleColor(get("zoneColor"))
)

Yukarıdaki örnek, tüm nokta özelliklerinin özelliği varsa düzgün çalışacaktır zoneColor . Aksi takdirde renk, büyük olasılıkla "siyah" a geri dönecektir. Geri dönüş rengini değiştirmek için, switchCase has özelliğinin mevcut olup olmadığını denetlemek için ifadesiyle birlikte bir ifade kullanın. Özelliği yoksa, bir geri dönüş rengi döndürün.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        //Use a conditional case expression.
        switchCase(
            //Check to see if feature has a "zoneColor" 
            has("zoneColor"), 

            //If it does, use it.
            get("zoneColor"), 

            //If it doesn't, default to blue.
            literal("blue")
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        //Use a conditional case expression.
        switchCase(
            //Check to see if feature has a "zoneColor" 
            has("zoneColor"), 

            //If it does, use it.
            get("zoneColor"), 

            //If it doesn't, default to blue.
            literal("blue")
        )
    )
)

Balon ve sembol katmanları, varsayılan olarak bir veri kaynağındaki tüm şekillerin koordinatlarını işler. Bu davranış, bir çokgenin veya çizginin köşelerini vurgulayabilir. filterKatman seçeneği, Boolean ifadesinde bir ifade kullanarak, oluşturduğu özelliklerin geometri türünü sınırlamak için kullanılabilir geometryType . Aşağıdaki örnek, yalnızca özelliklerin işlenmesi için bir kabarcık katmanını sınırlandırır Point .

BubbleLayer layer = new BubbleLayer(source,
    filter(eq(geometryType(), "Point"))
);
val layer = BubbleLayer(source,
    filter(eq(geometryType(), "Point"))
)

Aşağıdaki örnek hem hem de Point MultiPoint özelliklerinin işlenmesine izin verir.

BubbleLayer layer = new BubbleLayer(source,
    filter(any(eq(geometryType(), "Point"), eq(geometryType(), "MultiPoint")))
);
val layer = BubbleLayer(source,
    filter(any(eq(geometryType(), "Point"), eq(geometryType(), "MultiPoint")))
)

Benzer şekilde, çokgenler ana hattı çizgi katmanlarında işlenir. Bir çizgi katmanında bu davranışı devre dışı bırakmak için yalnızca ve özelliklerine izin veren bir filtre ekleyin LineString MultiLineString .

Veri ifadelerinin nasıl kullanılacağına ilişkin bazı ek örnekler aşağıda verilmiştir:

//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"))

//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"))

Matematik ifadeleri

Matematik ifadeleri, ifade çerçevesi içinde veri odaklı hesaplamalar gerçekleştirmek için matematik işleçleri sağlar.

Expression Dönüş türü Description
abs(number | Expression) sayı Belirtilen sayının mutlak değerini hesaplar.
acos(number | Expression) sayı Belirtilen sayının arkkosinüsünü hesaplar.
asin(number | Expression) sayı Belirtilen sayının arksinüsünü hesaplar.
atan(number | Expression) sayı Belirtilen sayının ark tanjantını hesaplar.
ceil(number | Expression) sayı Sayıyı bir sonraki tam tamsayıya yuvarlar.
cos(number | Expression) sayı Belirtilen sayının cos sayısını hesaplar.
division(number, number) | division(Expression, Expression) sayı İlk sayıyı ikinci sayıya böler. Web SDK denk ifadesi: /
e() sayı Matematik sabitini döndürür e .
floor(number | Expression) sayı Sayıyı, önceki tam tamsayıya yuvarlar.
log10(number | Expression) sayı Belirtilen sayının 10 tabanında logaritmasını hesaplar.
log2(number | Expression) sayı Belirtilen sayının temel iki logaritmasını hesaplar.
ln(number | Expression) sayı Belirtilen sayının doğal logaritmasını hesaplar.
ln2() sayı Matematik sabitini döndürür ln(2) .
max(numbers... | expressions...) sayı Belirtilen sayı kümesindeki en büyük sayıyı hesaplar.
min(numbers... | expressions...) sayı Belirtilen sayı kümesindeki minimum sayıyı hesaplar.
mod(number, number) | mod(Expression, Expression) sayı İlk sayıyı ikinci sayıya bölerken kalanı hesaplar. Web SDK denk ifadesi: %
pi() sayı Matematik sabitini döndürür PI .
pow(number, number) | pow(Expression, Expression) sayı İkinci sayının gücünden çıkarılan ilk değerin değerini hesaplar.
product(numbers... | expressions...) sayı Belirtilen sayıları birlikte çarpar. Web SDK denk ifadesi: *
round(number | Expression) sayı Sayıyı en yakın tamsayıya yuvarlar. Yarı-değerler sıfırdan uzağa yuvarlanır. Örneğin, round(-1.5) olarak değerlendirilir -2 .
sin(number | Expression) sayı Belirtilen sayının sinüsünü hesaplar.
sqrt(number | Expression) sayı Belirtilen sayının kare kökünü hesaplar.
subtract(number | Expression sayı Belirtilen sayı ile 0 çıkartır.
subtract(number | Expression, number | Expression) sayı İkinci sayıya göre ilk sayıları çıkartır.
sum(numbers... | expressions...) sayı Belirtilen sayıların toplamını hesaplar.
tan(number | Expression) sayı Belirtilen sayının tanjantını hesaplar.

Mantıksal ifadeler

Boolean ifadeleri, Boole karşılaştırmaları değerlendirmek için bir dizi Boole işleci sağlar.

Değerler karşılaştırılırken karşılaştırma kesin olarak yazılır. Farklı türlerin değerleri her zaman eşit kabul edilir. Türlerin ayrıştırma zamanında farklı olduğu bilinen durumlar geçersiz olarak değerlendirilir ve bir ayrıştırma hatası oluşturur.

Expression Dönüş türü Description
all(Expression...) boolean trueTüm girdilerin true , yoksa, döndürür false .
any(Expression...) boolean Girdilerden true herhangi biri ise true , false Aksi takdirde döndürür.
eq(Expression compareOne, Expression | boolean | number | string compareTwo) | eq(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueGiriş değerlerinin eşitse, false Aksi takdirde döndürür. Bağımsız değişkenlerin her iki dize veya iki sayı olması gerekir.
gt(Expression compareOne, Expression | boolean | number | string compareTwo) | gt(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueİlk girişin ikinciden kesinlikle büyük olup olmadığını döndürür, false Aksi takdirde. Bağımsız değişkenlerin her iki dize veya iki sayı olması gerekir.
gte(Expression compareOne, Expression | boolean | number | string compareTwo) | gte(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueİlk girişin ikinciden büyük veya ona eşit olup olmadığını döndürür, false Aksi takdirde. Bağımsız değişkenlerin her iki dize veya iki sayı olması gerekir.
lt(Expression compareOne, Expression | boolean | number | string compareTwo) | lt(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueİlk giriş ikinciden kesinlikle küçükse döndürür, false Aksi takdirde. Bağımsız değişkenlerin her iki dize veya iki sayı olması gerekir.
lte(Expression compareOne, Expression | boolean | number | string compareTwo) | lte(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueİlk girişin ikinciden küçük veya ona eşit olup olmadığını döndürür, false Aksi takdirde. Bağımsız değişkenlerin her iki dize veya iki sayı olması gerekir.
neq(Expression compareOne, Expression | boolean | number | string compareTwo) | neq(Expression compareOne, Expression | string compareTwo, Expression collator) boolean trueGiriş değerleri eşit değilse döndürür, false Aksi takdirde.
not(Expression | boolean) boolean Mantıksal değilleme. trueGirişin olup olmadığını ve girişin olup olmadığını döndürür false false true .

Koşullu ifadeler

Koşullu ifadeler, IF-deyimleri gibi mantıksal işlemler sağlar.

Aşağıdaki ifadeler giriş verilerinde koşullu mantık işlemleri gerçekleştirir. Örneğin, ifade " switchCase if/then/else" mantığını, ifade ise " match switch-deyimi" gibi sağlar.

Anahtar durumu ifadesi

switchCaseİfade, "if/then/else" mantığını sağlayan bir koşullu ifade türüdür. Boolean koşulların bir listesi aracılığıyla bu tür ifade adımları. True olarak değerlendirmek için ilk Boole koşulunun çıkış değerini döndürür.

Aşağıdaki sözde kod, ifadenin yapısını tanımlar switchCase .

switchCase(
    condition1: boolean expression, 
    output1: value,
    condition2: boolean expression, 
    output2: value,
    ...,
    fallback: value
)

Örnek

Aşağıdaki örnek, olarak değerlendirilen bir tane bulana kadar farklı Boolean koşullarında adımlar sağlar true ve ardından ilgili değeri döndürür. Hiçbir Boole koşulu değerlendirilirse true , bir geri dönüş değeri döndürülür.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        switchCase(
            //Check to see if the first boolean expression is true, and if it is, return its assigned result.
            //If it has a zoneColor property, use its value as a color.
            has("zoneColor"), toColor(get("zoneColor")),

            //Check to see if the second boolean expression is true, and if it is, return its assigned result.
            //If it has a temperature property with a value greater than or equal to 100, make it red.
            all(has("temperature"), gte(get("temperature"), 100)), color(Color.RED),

            //Specify a default value to return. In this case green.
            color(Color.GREEN)
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        switchCase(
            //Check to see if the first boolean expression is true, and if it is, return its assigned result.
            //If it has a zoneColor property, use its value as a color.
            has("zoneColor"), toColor(get("zoneColor")),

            //Check to see if the second boolean expression is true, and if it is, return its assigned result.
            //If it has a temperature property with a value greater than or equal to 100, make it red.
            all(has("temperature"), gte(get("temperature"), 100)), color(Color.RED),

            //Specify a default value to return. In this case green.
            color(Color.GREEN)
        )
    )
)

Match ifadesi

matchİfade, Logic gibi switch deyimi sağlayan bir koşullu ifade türüdür. Giriş, get( "entityType") bir dize veya sayı döndüren gibi herhangi bir ifade olabilir. Her durun tek bir sabit değer değeri ya da değerlerinin tümü dize veya tüm sayılar olması gereken değişmez değerler dizisi olan bir etiketi olmalıdır. Dizideki herhangi bir değer eşleşiyorsa, giriş eşleşir. Her durdurma etiketi benzersiz olmalıdır. Giriş türü etiketlerin türüyle eşleşmiyorsa, sonuç varsayılan geri dönüş değeri olacaktır.

Aşağıdaki sözde kod, ifadenin yapısını tanımlar match .

match(Expression input, Expression defaultOutput, Expression.Stop... stops)

Örnekler

Aşağıdaki örnek, bir entityType kabarcık katmanındaki bir nokta özelliğinin özelliğine bir eşleşme arayacağını bakar. Bir eşleşme bulursa, belirtilen değer döndürülür veya geri dönüş değerini döndürür.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        match(
            //Get the input value to match.
            get("entityType"),

            //Specify a default value to return if no match is found.
            color(Color.BLACK),

            //List the values to match and the result to return for each match.

            //If value is "restaurant" return "red".
            stop("restaurant", color(Color.RED)),

            //If value is "park" return "green".
            stop("park", color(Color.GREEN))
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        match(
            //Get the input value to match.
            get("entityType"),

            //Specify a default value to return if no match is found.
            color(Color.BLACK),

            //List the values to match and the result to return for each match.

            //If value is "restaurant" return "red".
            stop("restaurant", color(Color.RED)),

            //If value is "park" return "green".
            stop("park", color(Color.GREEN))
        )
    )
)

Aşağıdaki örnek, hepsi aynı değeri döndürmesi gereken bir etiket kümesini listelemek için bir diziyi kullanır. Bu yaklaşım, her bir etiketin ayrı ayrı listelenenden çok daha etkilidir. Bu durumda, entityType özellik "Restoran" veya "grocery_store" ise, "kırmızı" rengi döndürülür.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        match(
            //Get the input value to match.
            get("entityType"),

            //Specify a default value to return if no match is found.
            color(Color.BLACK),

            //List the values to match and the result to return for each match.

            //If value is "restaurant" or "grocery_store" return "red".
            stop(Arrays.asList("restaurant", "grocery_store"), color(Color.RED)),

            //If value is "park" return "green".
            stop("park", color(Color.GREEN))
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        match(
            //Get the input value to match.
            get("entityType"),

            //Specify a default value to return if no match is found.
            color(Color.BLACK),

            //List the values to match and the result to return for each match.

            //If value is "restaurant" or "grocery_store" return "red".
            stop(arrayOf("restaurant", "grocery_store"), color(Color.RED)),

            //If value is "park" return "green".
            stop("park", color(Color.GREEN))
        )
    )
)

Birleşim ifadesi

coalesceİlk null olmayan değer alınana ve bu değeri döndürene kadar bir ifade kümesi aracılığıyla ifade adımları.

Aşağıdaki sözde kod, ifadenin yapısını tanımlar coalesce .

coalesce(Expression... input)

Örnek

Aşağıdaki örnek bir coalesce sembol katmanının seçeneğini ayarlamak için bir ifade kullanır textField . Özelliği özellikte yoksa title veya olarak ayarlandıysa null , ifade daha sonra özelliği aramaya çalışır subTitle , veya eksikse, null daha sonra boş bir dizeye geri dönecektir.

SymbolLayer layer = new SymbolLayer(source,
    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.
            literal("")
        )
    )
);
val layer = SymbolLayer(source,
    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.
            literal("")
        )
    )
)

Tür ifadeleri

Tür ifadeleri, dizeler, sayılar ve Boole değerleri gibi farklı veri türlerini test etmek ve dönüştürmek için araçlar sağlar.

Expression Dönüş türü Description
array(Expression) Object [] Girişin bir dizi olduğunu onaylar.
bool(Expression) boolean Giriş değerinin bir Boole olduğunu onaylar.
collator(boolean caseSensitive, boolean diacriticSensitive) | collator(boolean caseSensitive, boolean diacriticSensitive, java.util.Locale locale) | collator(Expression caseSensitive, Expression diacriticSensitive) | collator(Expression caseSensitive, Expression diacriticSensitive, Expression locale) Collator Yerel ayara bağlı karşılaştırma işlemlerinde kullanılmak üzere bir Harmanlayıcı döndürür. Büyük/küçük harfe duyarlı ve aksan duyarlı seçenekler varsayılan olarak false şeklindedir. Yerel ayar bağımsız değişkeni, kullanılacak yerel ayarın IETF dili etiketini belirtir. Hiçbiri sağlanmazsa, varsayılan yerel ayar kullanılır. İstenen yerel ayar kullanılamıyorsa, Harmanlayıcı sistem tarafından tanımlanan bir geri dönüş yerel ayarı kullanır. Yerel ayar geri dönüş davranışının sonuçlarını sınamak için çözümlenmiş-locale ' i kullanın.
literal(boolean \| number \| string \| Object \| Object[]) Boolean | sayı | dize | nesnesi | nesnesi [] Sabit bir dizi veya nesne değeri döndürür. Bir dizi ya da nesnenin bir ifade olarak değerlendirilmesini engellemek için bu ifadeyi kullanın. Bir dizi ya da nesnenin bir ifade tarafından döndürülmesi gerektiğinde bu gereklidir.
number(Expression) sayı Giriş değerinin bir sayı olduğunu onaylar.
object(Expression) Nesne Giriş değerinin bir nesne olduğunu onaylar.
string(Expression) string Giriş değerinin bir dize olduğunu onaylar.
toArray(Expression) Object [] İfadeyi bir JSON nesne dizisine dönüştürür.
toBool(Expression) boolean Giriş değerini bir Boole değerine dönüştürür.
toNumber(Expression) sayı Mümkünse, giriş değerini bir sayıya dönüştürür.
toString(Expression) string Giriş değerini bir dizeye dönüştürür.
typeoOf(Expression) string Verilen değerin türünü tanımlayan bir dize döndürür.

Renk ifadeleri

Renk ifadeleri renk değerleri oluşturmayı ve işlemeyi kolaylaştırır.

Expression Dönüş türü Description
color(int) color Color tamsayı değerini bir Color ifadesine dönüştürür.
rgb(Expression red, Expression green, Expression blue) | rgb(number red, number green, number blue) color Ve arasında aralığa gereken kırmızı, yeşil ve mavi bileşenlerden bir renk değeri oluşturur 0 255 ve bir alfa bileşeni 1 . Herhangi bir bileşen Aralık dışında olursa ifade bir hatadır.
rgba(Expression red, Expression green, Expression blue, Expression alpha) | rgba(number red, number green, number blue, number alpha) color Ve arasında aralığa gereken kırmızı, yeşil, mavi bileşenlerden 0 255 ve bir ve aralığı içindeki bir Alfa bileşeninden bir renk değeri oluşturur 0 1 . Herhangi bir bileşen Aralık dışında olursa ifade bir hatadır.
toColor(Expression) color Giriş değerini bir renge dönüştürür.
toRgba(Expression) color Giriş renginin kırmızı, yeşil, mavi ve Alfa bileşenlerini içeren dört öğeli bir diziyi bu sırayla döndürür.

Örnek

Aşağıdaki örnek, kırmızı değeri olan bir RGB renk değeri 255 ve özelliğinin değeri ile çarpılarak hesaplanan yeşil ve mavi değerler oluşturur 2.5 temperature . Sıcaklık değiştiğinde renk, farklı kırmızı gölgelerle değişecektir.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        //Create a RGB color value.
        rgb(
            //Set red value to 255. Wrap with literal expression since using expressions for other values.
            literal(255f),    

            //Multiple the temperature by 2.5 and set the green value.
            product(literal(2.5f), get("temperature")), 

            //Multiple the temperature by 2.5 and set the blue value.
            product(literal(2.5f), get("temperature")) 
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        //Create a RGB color value.
        rgb(
            //Set red value to 255. Wrap with literal expression since using expressions for other values.
            literal(255f),    

            //Multiple the temperature by 2.5 and set the green value.
            product(literal(2.5f), get("temperature")), 

            //Multiple the temperature by 2.5 and set the blue value.
            product(literal(2.5f), get("temperature")) 
        )
    )
)

Tüm renk parametreleri sayı ise, bunları ifadesiyle sarmasına gerek yoktur literal . Örnek:

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        //Create a RGB color value.
        rgb(
            255f,  //Set red value to 255.

            150f,  //Set green value to 150.

            0f     //Set blue value to 0.
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        //Create a RGB color value.
        rgb(
            255f,  //Set red value to 255.

            150f,  //Set green value to 150.

            0f     //Set blue value to 0.
        )
    )
)

İpucu

Dize renk değerleri, yöntemi kullanılarak bir renge dönüştürülebilir android.graphics.Color.parseColor . Aşağıdaki, onaltılı renk dizesini bir katmanla birlikte kullanılabilecek bir renk ifadesine dönüştürür.

color(parseColor("#ff00ff"))

Dize işleci ifadeleri

Dize operatörü ifadeleri, büyük/küçük harfe dönüştürme ve dönüştürme gibi dizeler üzerinde dönüştürme işlemleri gerçekleştirir.

Expression Dönüş türü Description
concat(string...) | concat(Expression...) string Birden çok dizeyi birlikte birleştirir. Her değer bir dize olmalıdır. toStringGerekirse, diğer değer türlerini dizeye dönüştürmek için tür ifadesini kullanın.
downcase(string) | downcase(Expression) string Belirtilen dizeyi küçük harfe dönüştürür.
isSupportedScript(string) | isSupportedScript(Expression) boolean Giriş dizesinin geçerli yazı tipi yığını tarafından desteklenen bir karakter kümesi kullanıp kullanmadığını belirler. Örnek: isSupportedScript("ಗೌರವಾರ್ಥವಾಗಿ")
resolvedLocale(Expression collator) string Belirtilen Harmanlayıcı tarafından kullanılan yerel ayarın IETF dil etiketini döndürür. Bu, varsayılan sistem yerel ayarını belirlemekte veya istenen bir yerel ayarın başarıyla yüklenip yüklenmediğini belirleyebilmesi için kullanılabilir.
upcase(string) | upcase(Expression) string Belirtilen dizeyi büyük harfe dönüştürür.

Örnek

Aşağıdaki örnek, temperature nokta özelliğinin özelliğini bir dizeye dönüştürür ve sonra "°f" öğesini sonuna ekler.

SymbolLayer layer = new SymbolLayer(source,
    textField(
        concat(Expression.toString(get("temperature")), literal("°F"))
    ),

    //Some additional style options.
    textOffset(new Float[] { 0f, -1.5f }),
    textSize(12f),
    textColor("white")
);
val layer = SymbolLayer(source,
    textField(
        concat(Expression.toString(get("temperature")), literal("°F"))
    ),

    //Some additional style options.
    textOffset(new Float[] { 0f, -1.5f }),
    textSize(12f),
    textColor("white")
)

Yukarıdaki ifade, "64 °F" metni ile haritada, aşağıdaki görüntüde gösterildiği gibi çakışan bir PIN oluşturur.

Dize işleci ifade örneği

Ara ve adım ifadelerini enterpolala

Enterpolasyonlu ve step ifadeleri, bir ara değerli eğri veya adım işlevi üzerinde değerleri hesaplamak için kullanılabilir. Bu ifadeler, giriş olarak sayısal bir değer döndüren bir ifadeyi alır (örneğin,) get("temperature") . Giriş değeri, enterpolasyona veya Step işlevine en uygun değeri belirleyecek giriş ve çıkış değerlerinin çiftlerine göre değerlendirilir. Çıkış değerleri "Durdur" olarak adlandırılır. Her durun giriş değerleri bir sayı olmalı ve artan düzende olmalıdır. Çıkış değerleri bir sayı, sayı dizisi veya bir renk olmalıdır.

Enterpolageç ifadesi

Bir interpolate ifade, durdurma değerleri arasında ilişkilendirme yaparak sürekli, düzgün bir değer kümesini hesaplamak için kullanılabilir. interpolateRenk değerleri döndüren bir ifade, sonuç değerlerinin seçildiği bir renk gradyanı üretir. interpolateİfade aşağıdaki biçimlere sahiptir:

//Stops consist of two expressions.
interpolate(Expression.Interpolator interpolation, Expression number, Expression... stops)

//Stop expression wraps two values.
interpolate(Expression.Interpolator interpolation, Expression number, Expression.Stop... stops)

Bir ifadede kullanılabilecek üç tür ilişkilendirme yöntemi vardır interpolate :

Ad Açıklama
linear() Durak çifti arasında doğrusal bir şekilde enterpolasyonlar.
exponential(number) | exponential(Expression) Duraklar arasında katlanarak enterpolasyonlar. Bir "taban" belirtilir ve çıktının arttığı hızı denetler. Daha yüksek değerler, çıktıyı aralığın üst ucunda daha fazla artar. 1 ' e yakın bir "taban" değeri daha erken artan bir çıktı üretir.
cubicBezier(number x1, number y1, number x2, number y2) | cubicBezier(Expression x1, Expression y1, Expression x2, Expression y2) Verilen denetim noktaları tarafından tanımlanan üçüncü dereceden Bezier eğrisini kullanarak enterpolasyonlar.

stopİfadenin biçimi vardır stop(stop, value) .

İşte bu farklı türlerde ara nesnelerin nasıl görüneceğine ilişkin bir örnek.

Doğrusal Üstel Üçüncü dereceden Bezier
Doğrusal ilişkilendirme grafiği Üstel enterpolasyon grafiği Üçüncü dereceden Bezier enterpolasyon grafiği

Örnek

Aşağıdaki örnek, linear interpolate bubbleColor nokta özelliğinin özelliğine dayalı bir kabarcık katmanının özelliğini ayarlamak için bir ifade kullanır temperature . temperatureDeğer 60 ' den küçükse, "mavi" döndürülür. 60 arasındaysa ve 70 ' den küçükse, sarı döndürülür. 70 arasındaysa ve 80 ' den küçükse, "turuncu" ( #FFA500 ) döndürülür. 80 veya daha büyükse, "Red" döndürülür.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        interpolate(
            linear(),
            get("temperature"),
            stop(50, color(Color.BLUE)),
            stop(60, color(Color.YELLOW)),
            stop(70, color(parseColor("#FFA500"))),
            stop(80, color(Color.RED))
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        interpolate(
            linear(),
            get("temperature"),
            stop(50, color(Color.BLUE)),
            stop(60, color(Color.YELLOW)),
            stop(70, color(parseColor("#FFA500"))),
            stop(80, color(Color.RED))
        )
    )
)

Aşağıdaki görüntüde, yukarıdaki ifade için renklerin nasıl seçildiği gösterilmektedir.

Enterpolageç ifade örneği

Adım ifadesi

Bir step ifade, duraklar tarafından tanımlanan bir piecewise-sabit işlevi değerlendirerek ayrık ve basamaklı sonuç değerlerini hesaplamak için kullanılabilir.

interpolateİfade aşağıdaki biçimlere sahiptir:

step(Expression input, Expression defaultOutput, Expression... stops)

step(Expression input, Expression defaultOutput, Expression.Stop... stops)

step(Expression input, number defaultOutput, Expression... stops)

step(Expression input, number defaultOutput, Expression.Stop... stops)

step(number input, Expression defaultOutput, Expression... stops)

step(number input, Expression defaultOutput, Expression.Stop... stops)

step(number input, number defaultOutput, Expression... stops)

step(number input, number defaultOutput, Expression.Stop... stops)

Adım ifadeleri, giriş değerinden hemen önce durun çıkış değerini ya da giriş ilk durmadan daha küçükse ilk giriş değerini döndürür.

Örnek

Aşağıdaki örnek, step bubbleColor nokta özelliğinin özelliğine dayalı bir kabarcık katmanının özelliğini ayarlamak için bir ifade kullanır temperature . temperatureDeğer 60 ' den küçükse, "mavi" döndürülür. 60 arasındaysa ve 70 ' den küçükse, "sarı" döndürülür. 70 arasındaysa ve 80 ' den küçükse, "turuncu" döndürülür. 80 veya daha büyükse, "Red" döndürülür.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(
        step(
            get("temperature"),
            color(Color.BLUE),
            stop(60, color(Color.YELLOW)),
            stop(70, color(parseColor("#FFA500"))),
            stop(80, color(Color.RED))
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(
        step(
            get("temperature"),
            color(Color.BLUE),
            stop(60, color(Color.YELLOW)),
            stop(70, color(parseColor("#FFA500"))),
            stop(80, color(Color.RED))
        )
    )
)

Aşağıdaki görüntüde, yukarıdaki ifade için renklerin nasıl seçildiği gösterilmektedir.

Adım ifadesi örneği

Katmana özgü ifadeler

Yalnızca belirli katmanlara uygulanan özel ifadeler.

Isı haritası yoğunluğu ifadesi

Isı haritası yoğunluğu ifadesi, ısı haritası katmanındaki her bir piksel için ısı haritası yoğunluğu değerini alır ve olarak tanımlanır heatmapDensity . Bu değer ile arasında bir sayıdır 0 1 . interpolation step Isı haritasını renklendirmek için kullanılan renk degradesini tanımlamak için veya ifadesiyle birlikte kullanılır. Bu ifade yalnızca heatmapColor ısı haritası katmanının seçeneğinde kullanılabilir.

İpucu

Dizin 0 ' daki, bir enterpolasyon ifadesinde veya bir adım renginin varsayılan renginden renk, veri bulunmayan alanın rengini tanımlar. 0 dizinindeki renk, bir arka plan rengi tanımlamak için kullanılabilir. Birçok, bu değeri saydam veya yarı saydam bir siyah olarak ayarlamayı tercih eder.

Örnek

Bu örnek, ısı haritasını işlemek için yumuşak bir renk gradyanı oluşturmak üzere bir Oluşturucu ilişkilendirme ifadesi kullanır.

HeatMapLayer layer = new HeatMapLayer(source,
    heatmapColor(
        interpolate(
            linear(),
            heatmapDensity(),
            stop(0, color(Color.TRANSPARENT)),
            stop(0.01, color(Color.MAGENTA)),
            stop(0.5, color(parseColor("#fb00fb"))),
            stop(1, color(parseColor("#00c3ff")))
        )
    )
);
val layer = HeatMapLayer(source,
    heatmapColor(
        interpolate(
            linear(),
            heatmapDensity(),
            stop(0, color(Color.TRANSPARENT)),
            stop(0.01, color(Color.MAGENTA)),
            stop(0.5, color(parseColor("#fb00fb"))),
            stop(1, color(parseColor("#00c3ff")))
        )
    )
)

Bir ısı haritasını renklendirmeye yönelik düz bir gradyan kullanmanın yanı sıra, renkler bir ifade kullanılarak bir aralıklar kümesi içinde belirlenebilir step . stepIsı haritasının renklendirilebilmesini için bir ifade kullanılması, yoğunluğu bir dağılım veya radar stil eşlemesine benzer aralıklar halinde ayırır.

HeatMapLayer layer = new HeatMapLayer(source,
    heatmapColor(
        step(
            heatmapDensity(),
            color(Color.TRANSPARENT),
            stop(0.01, color(parseColor("#000080"))),
            stop(0.25, color(parseColor("#000080"))),
            stop(0.5, color(Color.GREEN)),
            stop(0.5, color(Color.YELLOW)),
            stop(1, color(Color.RED))
        )
    )
);
val layer = HeatMapLayer(source,
    heatmapColor(
        step(
            heatmapDensity(),
            color(Color.TRANSPARENT),
            stop(0.01, color(parseColor("#000080"))),
            stop(0.25, color(parseColor("#000080"))),
            stop(0.5, color(Color.GREEN)),
            stop(0.5, color(Color.YELLOW)),
            stop(1, color(Color.RED))
        )
    )
)

Daha fazla bilgi için bkz. ısı haritası katmanı ekleme belgeleri.

Satır ilerleme ifadesi

Bir satır ilerleme ifadesi, ilerleme durumunu çizgi katmanında bir gradyan çizgisi üzerinde alır ve olarak tanımlanır lineProgress() . Bu değer 0 ile 1 arasında bir sayıdır. Or ifadesi ile birlikte kullanılır interpolation step . Bu ifade yalnızca strokeGradient çizgi katmanının seçeneğiyle birlikte kullanılabilir.

Not

strokeGradientÇizgi katmanının seçeneği, lineMetrics veri kaynağı seçeneğinin olarak ayarlanmasını gerektirir true .

Örnek

Bu örnek, lineProgress() bir satırın konturuna bir renk gradyanı uygulamak için ifadesini kullanır.

LineLayer layer = new LineLayer(source,
    strokeGradient(
        interpolate(
            linear(),
            lineProgress(),
            stop(0, color(Color.BLUE)),
            stop(0.1, color(Color.argb(255, 65, 105, 225))), //Royal Blue
            stop(0.3, color(Color.CYAN)),
            stop(0.5, color(Color.argb(255,0, 255, 0))), //Lime
            stop(0.7, color(Color.YELLOW)),
            stop(1, color(Color.RED))
        )
    )
);
val layer = LineLayer(source,
    strokeGradient(
        interpolate(
            linear(),
            lineProgress(),
            stop(0, color(Color.BLUE)),
            stop(0.1, color(Color.argb(255, 65, 105, 225))), //Royal Blue
            stop(0.3, color(Color.CYAN)),
            stop(0.5, color(Color.argb(255,0, 255, 0))), //Lime
            stop(0.7, color(Color.YELLOW)),
            stop(1, color(Color.RED))
        )
    )
)

Bkz. canlı örnek

Metin alanı biçim ifadesi

formatİfade, textField karışık metin biçimlendirmesi sağlamak için sembol katmanının seçeneğiyle birlikte kullanılabilir. Bu ifade bir veya daha fazla ifadeyi formatEntry , metin alanına eklenecek bir dize ve kümesi belirten bir ifade alır formatOptions .

İfade Açıklama
format(Expression...) Karışık biçimli metin alanı girişlerinde kullanılacak ek açıklamaları içeren biçimli metni döndürür.
formatEntry(Expression text) | formatEntry(Expression text, Expression.FormatOption... formatOptions) | formatEntry(String text) | formatEntry(String text, Expression.FormatOption... formatOptions) İfadede kullanılmak üzere biçimli bir dize girişi döndürür format .

Aşağıdaki biçim seçenekleri mevcuttur:

İfade Açıklama
formatFontScale(number) | formatFontScale(Expression) Yazı tipi boyutu için ölçekleme faktörünü belirtir. Belirtilmişse, bu değer textSize tek dize için özelliği geçersiz kılar.
formatTextFont(string[]) | formatTextFont(Expression) İşleme sırasında metne uygulanacak rengi belirtir.

Örnek

Aşağıdaki örnek, bir kalın yazı tipi ekleyerek ve özelliğin özelliğinin yazı tipi boyutunu ölçeklendirerek metin alanını biçimlendirir title . Bu örnek ayrıca subTitle , ölçeklenmiş bir yazı tipi boyutuyla bir yeni satır üzerinde özelliğin özelliğini de ekler.

SymbolLayer layer = new SymbolLayer(source,
    textField(
        format(
            //Bold the title property and scale its font size up.
            formatEntry(
                get("title"),
                formatTextFont(new String[] { "StandardFont-Bold" }),
                formatFontScale(1.25)),

            //Add a new line without any formatting.
            formatEntry("\n"),

            //Scale the font size down of the subTitle property.
            formatEntry(
                get("subTitle"),
                formatFontScale(0.75))
        )
    )
);
val layer = SymbolLayer(source,
    textField(
        format(
            //Bold the title property and scale its font size up.
            formatEntry(
                get("title"),
                formatTextFont(arrayOf("StandardFont-Bold")),
                formatFontScale(1.25)),

            //Add a new line without any formatting.
            formatEntry("\n"),

            //Scale the font size down of the subTitle property.
            formatEntry(
                get("subTitle"),
                formatFontScale(0.75))
        )
    )
)

Bu katman, aşağıdaki görüntüde gösterildiği gibi nokta özelliğini oluşturacak:

Biçimli metin alanı olan nokta özelliğinin görüntüsü

Yakınlaştırma ifadesi

Bir zoom ifade, işleme zamanında haritanın geçerli yakınlaştırma düzeyini almak için kullanılır ve olarak tanımlanır zoom() . Bu ifade haritanın en düşük ve en yüksek yakınlaştırma düzeyi aralığı arasında bir sayı döndürür. web ve Android için Azure Haritalar etkileşimli harita denetimleri, 0 ile 24 arasında numaralandırılmış 25 yakınlaştırma düzeyini destekler. İfadenin kullanılması, zoom haritanın yakınlaştırma düzeyi değiştiği için stillerin dinamik olarak değiştirilmesini sağlar. İfade zoom yalnızca ve interpolate ifadeleriyle step kullanılabilir.

Örnek

Varsayılan olarak, ısı haritası katmanında işlenen veri noktalarının rady değeri tüm yakınlaştırma düzeyleri için sabit bir piksel yarıçapa sahiptir. Harita yakınlaştırıldıkça veriler bir araya toplanır ve ısı haritası katmanı farklı görünür. Her bir veri noktasının haritanın aynı fiziksel alanına sahip olması için her yakınlaştırma düzeyi için zoom yarıçapı ölçeklendirmek için bir ifade kullanılabilir. Bu, ısı haritası katmanının daha statik ve tutarlı görünür hale gelecektir. Haritanın her yakınlaştırma düzeyi, önceki yakınlaştırma düzeyine göre dikey ve yatay olarak iki kat fazla piksele sahip. Yarıçapı her yakınlaştırma düzeyiyle iki katına çıkaracak şekilde ölçeklendirerek tüm yakınlaştırma düzeylerinde tutarlı görünen bir ısı haritası oluşturacağız. Bu, aşağıda gösterildiği gibi en düşük yakınlaştırma düzeyi için piksel yarıçapı ayarlanmış ve maksimum yakınlaştırma düzeyi için ölçeklendirlanmış bir yarıçap hesaplanmış bir ifade ile ifade zoom base 2 exponential interpolation kullanılarak gerçek 2 * Math.pow(2, minZoom - maxZoom) olabilir.

HeatMapLayer layer = new HeatMapLayer(source,
    heatmapRadius(
        interpolate(
            exponential(2),
            zoom(),

            //For zoom level 1 set the radius to 2 pixels.
            stop(1, 2),

            //Between zoom level 1 and 19, exponentially scale the radius from 2 pixels to 2 * (maxZoom - minZoom)^2 pixels.
            stop(19, 2 * Math.pow(2, 19 - 1))
        )
    )
);
val layer = HeatMapLayer(source,
    heatmapRadius(
        interpolate(
            exponential(2),
            zoom(),

            //For zoom level 1 set the radius to 2 pixels.
            stop(1, 2),

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

Değişken bağlama ifadeleri

Değişken bağlama ifadeleri, hesaplamanın sonuçlarını bir değişkende depolar. Bu nedenle hesaplama sonuçlarına bir ifadenin başka bir yerinde birden çok kez başvurulabilirsiniz. Birçok hesaplama içeren ifadeler için kullanışlı bir iyileştirmedir.

Expression Dönüş türü Description
let(Expression... input) Bir veya daha fazla değeri, sonucu döndüren alt var ifadede ifadesi tarafından kullanmak üzere değişken olarak depolar.
var(Expression expression) | var(string variableName) Nesne ifadesi kullanılarak oluşturulan bir değişkene let başvurur.

Örnek

Bu örnekte, sıcaklık oranına göre geliri hesap eden bir ifade ve ardından bu değer üzerinde farklı case boole işlemlerini değerlendirmek için bir ifade kullanır. ifadesi, let geliri sıcaklık oranına göre depolamak için kullanılır, böylece yalnızca bir kez hesaplanması gerekir. İfade, var bu değişkene gerektiğinde yeniden hesaplamaya gerek kalmadan başvurur.

BubbleLayer layer = new BubbleLayer(source,
    bubbleColor(           
        let(
            //Divide the point features `revenue` property by the `temperature` property and store it in a variable called `ratio`.
            literal("ratio"), division(get("revenue"), get("temperature")),

            //Evaluate the child expression in which the stored variable will be used.
            switchCase(
                //Check to see if the ratio is less than 100, return 'red'.
                lt(var("ratio"), 100), color(Color.RED),

                //Check to see if the ratio is less than 200, return 'green'.
                lt(var("ratio"), 200), color(Color.GREEN),

                //Return `blue` for values greater or equal to 200.
                color(Color.BLUE)
            )
        )
    )
);
val layer = BubbleLayer(source,
    bubbleColor(           
        let(
            //Divide the point features `revenue` property by the `temperature` property and store it in a variable called `ratio`.
            literal("ratio"), division(get("revenue"), get("temperature")),

            //Evaluate the child expression in which the stored variable will be used.
            switchCase(
                //Check to see if the ratio is less than 100, return 'red'.
                lt(var("ratio"), 100), color(Color.RED),

                //Check to see if the ratio is less than 200, return 'green'.
                lt(var("ratio"), 200), color(Color.GREEN),

                //Return `blue` for values greater or equal to 200.
                color(Color.BLUE)
            )
        )
    )
)

Sonraki adımlar

İfadeleri destekleyen katmanlar hakkında daha fazla bilgi edinmek için: