Ekspresi gaya berbasis data di SDK iOS (Pratinjau)
Catatan
Penghentian Azure Peta iOS SDK
Azure Peta Native SDK untuk iOS sekarang tidak digunakan lagi dan akan dihentikan pada 31/3/3/25. Untuk menghindari gangguan layanan, migrasikan ke Azure Peta Web SDK dengan 3/31/25. Untuk informasi selengkapnya, lihat Panduan migrasi Azure Peta iOS SDK.
Lapisan menggunakan predikat dan ekspresi untuk menentukan apa yang harus ditampilkan dan cara memformatnya. Predikat diwakili oleh kelas NSPredicate
yang sama yang memfilter hasil dari Data Inti atau item dalam NSArray
di Objective-C.
Predikat didasarkan pada ekspresi, diwakili oleh kelas NSExpression
.
Dokumen ini membahas subset spesifik dari sintaks predikat dan ekspresi yang didukung oleh SDK ini. Untuk pengenalan yang lebih umum tentang predikat dan ekspresi, lihat Panduan Pemrograman Predikat dalam dokumentasi pengembang Apple.
Menggunakan predikat untuk memfilter data vektor
Sebagian besar kelas layer menampilkan objek Feature
yang dapat Anda tampilkan atau sembunyikan berdasarkan properti fitur. Gunakan opsi filter
untuk menyertakan hanya fitur di lapisan sumber yang memenuhi kondisi yang Anda tentukan.
Operator
Operator perbandingan berikut didukung:
NSPredicateOperatorType |
Sintaks string format |
---|---|
NSEqualToPredicateOperatorType |
key = value key == value |
NSGreaterThanOrEqualToPredicateOperatorType |
key >= value key => value |
NSLessThanOrEqualToPredicateOperatorType |
key <= value key =< value |
NSGreaterThanPredicateOperatorType |
key > value |
NSLessThanPredicateOperatorType |
key < value |
NSNotEqualToPredicateOperatorType |
key != value key <> value |
NSBetweenPredicateOperatorType |
key BETWEEN { 32, 212 } |
Untuk menguji apakah suatu fitur memiliki atau tidak memiliki properti tertentu, bandingkan atribut NULL
dengan atau NIL
. Predikat yang dibuat menggunakan inisialisasi NSPredicate(value:)
juga didukung. Operator string dan operator kustom tidak didukung.
Operator gabungan berikut didukung:
NSCompoundPredicateType |
Sintaks string format |
---|---|
NSAndPredicateType |
predicate1 AND predicate2 predicate1 && predicate2 |
NSOrPredicateType |
predicate1 OR predicate2 predicate1 \|\| predicate2 |
NSNotPredicateType |
NOT predicate !predicate |
Operator agregat berikut didukung:
NSPredicateOperatorType |
Sintaks string format |
---|---|
NSInPredicateOperatorType |
key IN { 'iOS', 'macOS', 'tvOS', 'watchOS' } |
NSContainsPredicateOperatorType |
{ 'iOS', 'macOS', 'tvOS', 'watchOS' } CONTAINS key |
Anda dapat menggunakan operator IN
dan CONTAINS
untuk menguji apakah nilai muncul dalam koleksi, apakah string adalah substring dari string yang lebih besar, atau apakah fitur yang dievaluasi (SELF
) terletak dalam Feature
yang diberikan.
Kombinasi pengubah dan operator perbandingan berikut didukung:
NSComparisonPredicateModifier |
NSPredicateOperatorType |
Sintaks string format |
---|---|---|
NSAllPredicateModifier |
NSNotEqualToPredicateOperatorType |
ALL haystack != needle |
NSAnyPredicateModifier |
NSEqualToPredicateOperatorType |
ANY haystack = needle SOME haystack = needle |
Opsi predikat perbandingan berikut didukung untuk operator perbandingan dan agregat yang digunakan dalam predikat:
NSComparisonPredicateOptions |
Sintaks string format |
---|---|
NSCaseInsensitivePredicateOption |
'QUEBEC' =[c] 'Quebec' |
NSDiacriticInsensitivePredicateOption |
'Québec' =[d] 'Quebec' |
Pilihan predikat perbandingan lainnya tidak didukung, yaitu l
(untuk sensitivitas lokal) dan n
(untuk normalisasi). Perbandingan peka terhadap lokal selama tidak peka huruf besar/kecil atau diakritik. Opsi predikat perbandingan tidak didukung dengan pengubah perbandingan seperti ALL
dan ANY
.
Operand
Operand dalam predikat dapat berupa variabel, jalur kunci, atau hampir semua hal lain yang dapat muncul di dalam ekspresi.
Transmisi jenis otomatis tidak dilakukan. Oleh karena itu, fitur hanya cocok dengan predikat jika nilainya untuk properti yang dimaksud adalah dari jenis yang sama dengan nilai yang ditentukan dalam predikat. Gunakan operator CAST()
untuk mengonversi jalur atau variabel kunci menjadi jenis yang cocok:
- Untuk memberikan nilai ke angka, gunakan
CAST(key, 'NSNumber')
. - Untuk memberikan nilai ke string, gunakan
CAST(key, 'NSString')
. - Untuk memberikan nilai ke warna, gunakan
CAST(key, 'UIColor')
. - Untuk mentransmisikan objek
UIColor
ke array, gunakanCAST(noindex(color), 'NSArray')
.
Untuk informasi selengkapnya tentang sintaks string format predikat, lihat bab "Sintaks String Format Predikat" dari Panduan Pemrograman Predikat dalam dokumentasi pengembang Apple.
Contoh operand
Lapisan gelembung dan simbol merender koordinat semua geometri dalam sumber data, secara default. Perilaku ini dapat menyoroti node poligon atau baris. Opsi filter
dari lapisan dapat digunakan untuk membatasi jenis geometri dari fitur yang direndernya, dengan menggunakan NSExpression.geometryTypeAZMVariable
dalam sebuah predikat. Contoh berikut membatasi lapisan gelembung, sehingga hanya fitur Point
yang dirender.
let layer = BubbleLayer(source: source, options: [
.filter(
from: NSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable)
)
])
Contoh berikut ini memungkinkan fitur Point
dan Polygon
untuk dirender.
let layer = BubbleLayer(source: source, options: [
.filter(
from: NSCompoundPredicate(orPredicateWithSubpredicates: [
NSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable),
NSPredicate(format: "%@ == \"Polygon\"", NSExpression.geometryTypeAZMVariable)
])
)
])
Menggunakan ekspresi untuk mengonfigurasi opsi layer
Ekspresi dapat berisi subekspresi dari berbagai jenis. Masing-masing jenis ekspresi yang didukung dibahas di bawah ini.
Beberapa contoh di bagian dokumen ini menggunakan fitur berikut untuk menunjukkan berbagai cara tempat ekspresi ini dapat digunakan.
{
"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"
}
}
}
Kode berikut menunjukkan cara membuat fitur GeoJSON ini secara manual dalam aplikasi.
// Create a point feature.
let feature = Feature(Point(CLLocationCoordinate2D(latitude: 45, longitude: -100)))
// Add properties to the feature.
feature.addProperty("id", value: 123)
feature.addProperty("entityType", value: "restaurant")
feature.addProperty("revenue", value: 12345)
feature.addProperty("subTitle", value: "Building 40")
feature.addProperty("temperature", value: 64)
feature.addProperty("title", value: "Cafeteria")
feature.addProperty("zoneColor", value: "purple")
feature.addProperty("abcArray", value: ["a", "b", "c"])
feature.addProperty("array2d", value: [["a", "b"], ["x", "y"]])
feature.addProperty("_style", value: ["fillColor": "red"])
Kode berikut menunjukkan cara mendeserialisasi versi objek JSON yang diuntai dalam string ke dalam fitur GeoJSON dalam aplikasi.
let featureString = "{\"type\":\"Feature\",\"geometry\":{\"type\":\"Point\",\"coordinates\":[-122.13284,47.63699]},\"properties\":{\"id\":123,\"entityType\":\"restaurant\",\"revenue\":12345,\"subTitle\":\"Building 40\",\"temperature\":64,\"title\":\"Cafeteria\",\"zoneColor\":\"purple\",\"abcArray\":[\"a\",\"b\",\"c\"],\"array2d\":[[\"a\",\"b\"],[\"x\",\"y\"]],\"_style\":{\"fillColor\":\"red\"}}}"
let feature = Feature.fromJson(featureString)
Berbasis JSON
Azure Maps Web SDK juga mendukung ekspresi gaya berbasis data yang diwakili menggunakan array JSON. Ekspresi yang sama ini dapat dibuat ulang menggunakan kelas NSExpression
native di SDK iOS. Atau, ekspresi berbasis JSON ini dapat dibagikan ke aplikasi ios (dilampirkan ke respons, misalnya) dan diteruskan ke metode NSExpression(azmJSONObject:)
. Misalnya, gunakan ekspresi JSON berikut.
var exp = ['get','title'];
Versi yang diuntai dalam string dari ekspresi di atas semestinya ["get", "title"]
dan dapat dibaca dalam iOS SDK sebagai berikut.
let jsonResponse = ["get", "title"]
let exp = NSExpression(azmJSONObject: jsonResponse)
Menggunakan pendekatan ini dapat memudahkan untuk menggunakan kembali ekspresi gaya antara aplikasi seluler dan aplikasi web yang menggunakan Azure Maps.
Video ini memberikan gambaran umum penggunaan gaya berbasis data di Azure Maps.
Tampilan Internet of Things - Gaya yang Didorong Data dengan Azure Maps
Nilai konstan
Nilai konstan dapat merupakan salah satu jenis berikut:
UIColor
String
NSNumber.boolValue
NSNumber.doubleValue
[Float]
[String]
NSValue.cgVectorValue
NSValue.uiEdgeInsetsValue
Contoh nilai konstan
NSExpression(forConstantValue: UIColor.red)
NSExpression(forConstantValue: "constant")
NSExpression(forConstantValue: true)
NSExpression(forConstantValue: 20)
NSExpression(forConstantValue: [20, 21, 22])
NSExpression(forConstantValue: ["constant1", "constant2"])
NSExpression(forConstantValue: NSValue(cgVector: CGVector(dx: 2, dy: -4)))
NSExpression(forConstantValue: NSValue(uiEdgeInsets: UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)))
Jalur utama
Ekspresi jalur kunci mengacu pada properti objek Feature
yang sedang dievaluasi untuk ditampilkan. Misalnya, jika kamus poligon Feature.properties
berisi kunci floorCount
, maka jalur kunci floorCount
mengacu pada nilai properti floorCount
saat mengevaluasi poligon tertentu.
Beberapa karakter mungkin tidak digunakan secara langsung sebagai bagian dari jalur kunci dalam string format. Misalnya, jika properti fitur diberi nama ISO 3166-1:2006
, string lowercase(ISO 3166-1:2006)
format ekspresi atau string ISO 3166-1:2006 == 'US-OH'
format predikat akan menaikkan pengecualian. Sebagai gantinya, gunakan tempat penampung %K
atau inisiator NSExpression(forKeyPath:)
:
NSPredicate(format: "%K == 'US-OH'", "ISO 3166-1:2006")
NSExpression(
forFunction: "lowercase:",
arguments: [NSExpression(forKeyPath: "ISO 3166-1:2006")]
)
Fungsi
Dari fungsi yang telah ditentukan sebelumnya oleh metode NSExpression(forFunction:arguments:)
, subset berikut didukung dalam opsi lapisan:
Parameter inisialisasi | Sintaks string format |
---|---|
average: |
average({1, 2, 2, 3, 4, 7, 9}) |
sum: |
sum({1, 2, 2, 3, 4, 7, 9}) |
count: |
count({1, 2, 2, 3, 4, 7, 9}) |
min: |
min({1, 2, 2, 3, 4, 7, 9}) |
max: |
max({1, 2, 2, 3, 4, 7, 9}) |
add:to: |
1 + 2 |
from:subtract: |
2 - 1 |
multiply:by: |
1 * 2 |
divide:by: |
1 / 2 |
modulus:by: |
modulus:by:(1, 2) |
sqrt: |
sqrt(2) |
log: |
log(10) |
ln: |
ln(2) |
raise:toPower: |
2 ** 2 |
exp: |
exp(0) |
ceiling: |
ceiling(0.99999) |
abs: |
abs(-1) |
trunc: |
trunc(6378.1370) |
floor: |
floor(-0.99999) |
uppercase: |
uppercase('Elysian Fields') |
lowercase: |
lowercase('DOWNTOWN') |
noindex: |
noindex(0 + 2 + c) |
length: |
length('Wapakoneta') |
castObject:toType: |
CAST(ele, 'NSString') CAST(ele, 'NSNumber') |
Fungsi yang telah ditentukan sebelumnya berikut tidak didukung:
Parameter inisialisasi | Sintaks string format |
---|---|
median: |
median({1, 2, 2, 3, 4, 7, 9}) |
mode: |
mode({1, 2, 2, 3, 4, 7, 9}) |
stddev: |
stddev({1, 2, 2, 3, 4, 7, 9}) |
random |
random() |
randomn: |
randomn(10) |
now |
now() |
bitwiseAnd:with: |
bitwiseAnd:with:(5, 3) |
bitwiseOr:with: |
bitwiseOr:with:(5, 3) |
bitwiseXor:with: |
bitwiseXor:with:(5, 3) |
leftshift:by: |
leftshift:by:(23, 1) |
rightshift:by: |
rightshift:by:(23, 1) |
onesComplement: |
onesComplement(255) |
distanceToLocation:fromLocation: |
distanceToLocation:fromLocation:(there, here) |
Kondisional
Kondisional didukung melalui metode NSExpression(forAZMConditional:trueExpression:falseExpression:)
dan operator TERNARY()
bawaan. Jika Anda perlu mengekspresikan beberapa kasus (“else-if”), Anda dapat melapisi kondisional dalam kondisional atau menggunakan ekspresi pencocokan.
Contoh kondisional
Contoh berikut melangkah melalui predikat yang berbeda sampai menemukan satu yang mengevaluasi ke true
, dan kemudian mengembalikan ekspresi sebenarnya. Jika tidak ada predikat yang dievaluasi ke true
, ekspresi palsu terakhir dikembalikan.
let layer = BubbleLayer(
source: source,
options: [
.bubbleColor(
from: NSExpression(
// Check to see whether a feature has a zoneColor property
forAZMConditional: NSPredicate(format: "zoneColor != NIL"),
// If it has a zoneColor property, use its value as a color.
trueExpression: NSExpression(forKeyPath: "zoneColor"),
// if not, do another check
falseExpression: NSExpression(
// Check to see whether it has a temperature property with a value greater than or equal to 100.
forConditional: NSPredicate(format: "temperature != nil && temperature >= 100"),
// If it has, use red color.
trueExpression: NSExpression(forConstantValue: UIColor.red),
// If not, use green color.
falseExpression: NSExpression(forConstantValue: UIColor.green)
)
)
)
]
)
Agregat
Ekspresi agregat dapat berisi array ekspresi. Dalam beberapa kasus, dimungkinkan untuk menggunakan array itu sendiri alih-alih membungkus array dalam ekspresi agregat.
Variabel
Th iOS SDK menentukan variabel berikut untuk digunakan dengan opsi lapisan.
Pengidentifikasi fitur
ID fitur. Variabel ini sesuai dengan properti NSExpression.featureIdentifierAZMVariable
.
Sintaks string format: $featureIdentifier
Properti fitur
Objek properti fitur. Variabel ini sesuai dengan properti NSExpression.featurePropertiesAZMVariable
.
Sintaks string format: $featureAttributes
Akumulasi fitur
Nilai properti kluster yang terakumulasi sejauh ini.
Ini hanya dapat digunakan dalam opsi clusterProperties
dari sumber DataSource
berkluster.
Variabel ini sesuai dengan properti NSExpression.featureAccumulatedAZMVariable
.
Sintaks string format: $featureAccumulated
Jenis geometri
Jenis geometri yang diwakili oleh fitur. Jenis fitur adalah salah satu string berikut:
Point
untuk fitur poin, sesuai dengan kelasPoint
.MultiPoint
untuk kumpulan poin, sesuai dengan kelasPointCollection
.LineString
untuk fitur poligaris, sesuai dengan kelasPolyline
.MultiLineString
untuk beberapa fitur poligaris, sesuai dengan kelasMultiPolyline
.Polygon
untuk fitur poligon, sesuai dengan kelasPolygon
.MultiPolygon
untuk beberapa fitur poligon, sesuai dengan kelasMultiPolygon
.GeometryCollection
untuk fitur kumpulan geometri, sesuai dengan kelasGeometryCollection
.
Variabel ini sesuai dengan properti NSExpression.geometryTypeAZMVariable
.
Sintaks string format: $geometryType
Contoh variabel
Lihat Contoh operand.
Zoom
Tingkat zoom saat ini.
Dalam opsi gaya lapisan, variabel ini mungkin hanya muncul sebagai target interpolasi tingkat atas atau ekspresi langkah.
Variabel ini sesuai dengan properti NSExpression.zoomLevelAZMVariable
.
Sintaks string format: $zoomLevel
Contoh zoom
Secara default, radii poin data yang dirender di lapisan peta panas memiliki radius titik tetap untuk semua tingkat pembesaran tampilan. Saat memperbesar peta, data mengagregasi bersama dan lapisan peta panas terlihat berbeda. Ekspresi zoom
dapat digunakan untuk menskalakan radius untuk setiap tingkat pembesaran tampilan, sehingga setiap poin data mencakup area fisik yang sama pada peta. Ini membuat lapisan peta panas terlihat lebih statis dan konsisten. Setiap tingkat pembesaran peta memiliki piksel dua kali lebih banyak secara vertikal dan horizontal dari tingkat perbesar tampilan sebelumnya. Menskalakan radius, sehingga dua kali lipat dengan setiap tingkat perbesar tampilan, membuat peta panas yang terlihat konsisten pada semua tingkat zoom. Ini dapat dicapai menggunakan ekspresi zoom
dengan ekspresi base 2 exponential interpolation
dan radius piksel yang diatur untuk tingkat pembesaran tampilan minimum dan radius skala untuk tingkat pembesaran tampilan maksimum, yang dihitung sebagai pow(2, maxZoom - minZoom) * radius
seperti yang ditunjukkan di bawah ini.
let layer = HeatMapLayer(
source: source,
options: [
.heatmapRadius(
from: NSExpression(
forAZMInterpolating: .zoomLevelAZMVariable,
curveType: .exponential,
parameters: NSExpression(forConstantValue: 2),
stops: NSExpression(forConstantValue: [
// For zoom level 1 set the radius to 2 points.
1: 2,
// Between zoom level 1 and 19, exponentially scale the radius from 2 points to 2 * 2^(maxZoom - minZoom) points.
19: pow(2, 19 - 1) * 2
])
)
)
]
)
Kepadatan Peta Panas
Estimasi kepadatan kernel dari titik layar dalam lapisan peta panas; dengan kata lain, ukuran relatif dari berapa banyak titik data yang berkerumun di sekitar piksel tertentu.
Variabel ini mengevaluasi ke angka antara 0 dan 1.
Ini digunakan dalam kombinasi dengan ekspresi interpolation
atau step
untuk menentukan gradien warna yang digunakan untuk mewarnai peta panas.
Hanya dapat digunakan dalam opsi heatmapColor
pada lapisan peta panas.
Variabel ini sesuai dengan properti NSExpression.heatmapDensityAZMVariable
.
Sintaks string format: $heatmapDensity
Tip
Warna pada indeks 0, dalam ekspresi interpolasi atau warna default warna langkah, menentukan warna area di mana tidak ada data. Warna pada indeks 0 dapat digunakan untuk menentukan warna latar belakang. Banyak orang lebih suka mengatur nilai ini menjadi transparan atau hitam semi-transparan.
Contoh kepadatan Peta Panas
Contoh ini menggunakan ekspresi interpolasi linier untuk membuat gradien warna yang halus untuk merender peta panas.
let layer = HeatMapLayer(
source: source,
options: [
.heatmapColor(
from: NSExpression(
forAZMInterpolating: .heatmapDensityAZMVariable,
curveType: .linear,
parameters: nil,
stops: NSExpression(forConstantValue: [
0: UIColor.magenta.withAlphaComponent(0),
0.01: UIColor.magenta,
0.5: UIColor(red: 251 / 255, green: 0, blue: 251 / 255, alpha: 1),
1: UIColor(red: 0, green: 195 / 255, blue: 1, alpha: 1)
])
)
)
]
)
Selain menggunakan gradien halus untuk mewarnai peta panas, warna dapat ditentukan dalam satu set rentang dengan menggunakan ekspresi langkah. Menggunakan ekspresi langkah untuk mewarnai peta panas secara visual memecah kepadatan menjadi beberapa rentang yang menyerupai peta kontur atau gaya radar.
let layer = HeatMapLayer(
source: source,
options: [
.heatmapColor(
from: NSExpression(
forAZMStepping: .heatmapDensityAZMVariable,
from: NSExpression(forConstantValue: UIColor.clear),
stops: NSExpression(forConstantValue: [
0.01: UIColor(red: 0, green: 0, blue: 128 / 255, alpha: 1),
0.25: UIColor.cyan,
0.5: UIColor.green,
0.75: UIColor.yellow,
1: UIColor.red
])
)
)
]
)
Untuk informasi selengkapnya, lihat artikel Menambahkan lapisan peta panas.
Progres garis
Angka yang menunjukkan jarak relatif di sepanjang garis pada titik tertentu di sepanjang garis.
Variabel ini mengevaluasi ke 0 di awal garis dan 1 di akhir baris.
Ekspresi ini hanya dapat digunakan dengan opsi LineLayerOption.strokeGradient
dari lapisan baris.
Ini sesuai dengan properti NSExpression.lineProgressAZMVariable
.
Sintaks string format: $lineProgress
Catatan
Opsi strokeGradient
lapisan baris memerlukan opsi lineMetrics
sumber data untuk diatur ke true
.
Contoh progres baris
Contoh ini menggunakan ekspresi NSExpression.lineProgressAZMVariable
untuk menerapkan gradien warna ke goresan garis.
let layer = LineLayer(
source: source,
options: [
.strokeGradient(
from: NSExpression(
forAZMInterpolating: NSExpression.lineProgressAZMVariable,
curveType: .linear,
parameters: nil,
stops: NSExpression(forConstantValue: [
0: UIColor.blue,
0.1: UIColor(red: 0.25, green: 0.41, blue: 1, alpha: 1), // Royal Blue
0.3: UIColor.cyan,
0.5: UIColor(red: 0, green: 1, blue: 0, alpha: 1), // Lime
0.7: UIColor.yellow,
1: UIColor.red
])
)
)
]
)
Metode spesifik AzureMaps
Bagian berikut menunjukkan khusus untuk metode AzureMaps yang memperluas kelas NSExpression
Ekspresi pencocokan
Ekspresi pencocokan adalah jenis ungkapan bersyarat yang menyediakan logika seperti pernyataan peralihan. Input bisa berupa ekspresi apa pun seperti NSExpression(forKeyPath: "entityType")
yang mengembalikan string atau angka. Ekspresi yang cocok adalah kamus, yang harus memiliki kunci sebagai ekspresi yang mengevaluasi baik ke string tunggal atau angka atau ke array semua string atau semua angka dan nilai sebagai ekspresi apa pun. Jika jenis ekspresi input tidak cocok dengan jenis kunci, hasilnya adalah nilai fallback default.
Contoh ekspresi pencocokan
Contoh berikut mengamati properti entityType
dari fitur Point
dalam lapisan gelembung yang mencari kecocokan. Jika menemukan kecocokan, nilai yang ditentukan akan dikembalikan atau itu akan mengembalikan nilai mundur.
let layer = BubbleLayer(
source: source,
options: [
.bubbleColor(
from: NSExpression(
// Get the input value to match.
forAZMMatchingKey: NSExpression(forKeyPath: "entityType"),
// List the keys to match and the value to return for each match.
in: [
// If value is "restaurant" return red color.
NSExpression(forConstantValue: "restaurant"): NSExpression(forConstantValue: UIColor.red),
// If value is "park" return green color.
NSExpression(forConstantValue: "park"): NSExpression(forConstantValue: UIColor.green)
],
// Specify a default value to return if no match is found.
default: NSExpression(forConstantValue: UIColor.black)
)
)
]
)
Contoh berikut ini menggunakan ekspresi yang mengevaluasi ke array string untuk mencantumkan serangkaian label yang semuanya harus mengembalikan nilai yang sama. Pendekatan ini jauh lebih efisien daripada mencantumkan setiap label secara terpisah. Dalam hal ini, jika entityType
properti adalah "restaurant"
atau "grocery_store"
, warna merah dikembalikan.
let layer = BubbleLayer(
source: source,
options: [
.bubbleColor(
from: NSExpression(
// Get the input value to match.
forAZMMatchingKey: NSExpression(forKeyPath: "entityType"),
// List the keys to match and the value to return for each match.
in: [
// If value is "restaurant" or "grocery_store" return red color.
NSExpression(forConstantValue: ["restaurant", "grocery_store"]): NSExpression(forConstantValue: UIColor.red),
// If value is "park" return green color.
NSExpression(forConstantValue: "park"): NSExpression(forConstantValue: UIColor.green)
],
// Specify a default value to return if no match is found.
default: NSExpression(forConstantValue: UIColor.black)
)
)
]
)
Ekspresi gabungkan
Ekspresi penggabungan melangkah melalui serangkaian ekspresi sampai nilai bukan-null pertama diperoleh, dan mengembalikan nilai tersebut.
Contoh ekspresi penggabungan
Contoh berikut menggunakan ekspresi penggabungan untuk mengatur opsi textField
dari lapisan simbol. title
Jika properti hilang dari fitur atau diatur ke nil
, ekspresi mencari subTitle
properti , jika hilang atau nil
, properti mengembalikan string kosong.
let layer = SymbolLayer(
source: source,
options: [
.textField(
from: NSExpression(forAZMFunctionCoalesce: [
// Try getting the title property.
NSExpression(forKeyPath: "title"),
// If there is no title, try getting the subTitle.
NSExpression(forKeyPath: "subTitle"),
// Default to an empty string.
NSExpression(forConstantValue: "")
])
)
]
)
Menggabungkan ekspresi
Menggabungkan beberapa string bersama-sama. Setiap nilai harus merupakan string atau angka.
Contoh ekspresi gabungan
Contoh berikut menggabungkan properti temperature
dari fitur titik dan "°F"
.
let layer = SymbolLayer(
source: source,
options: [
.textField(
from: NSExpression(forAZMFunctionJoin: [
NSExpression(forKeyPath: "temperature"),
NSExpression(forConstantValue: "°F")
])
),
// Some additional style options.
.textOffset(CGVector(dx: 0, dy: -1.5)),
.textSize(12),
.textColor(.white)
]
)
Ekspresi di atas merender pin di peta dengan teks "64°F"
dilapisi di atasnya seperti yang ditunjukkan pada gambar berikut.
Ekspresi interpolasi dan langkah
Ekspresi interpolasi dan langkah dapat digunakan untuk menghitung nilai di sepanjang fungsi langkah atau kurva yang diinterpolasi. Berbagai ekspresi ini mengambil ekspresi yang mengembalikan nilai numerik sebagai inputnya, misalnya NSExpression(forKeyPath: "temperature")
. Nilai input dievaluasi terhadap pasangan nilai input dan output, untuk menentukan nilai yang paling sesuai dengan kurva terinterpolasi atau fungsi langkah. Nilai output disebut "stop". Nilai input untuk setiap stop harus berupa angka dan berada dalam urutan naik. Nilai output harus berupa angka, dan array angka, atau warna.
Ekspresi interpolasi
Ekspresi interpolasi dapat digunakan untuk menghitung rangkaian nilai yang berkelanjutan dan halus, dengan menginterpolasi antar nilai henti.
Terdapat tiga jenis metode interpolasi yang dapat digunakan dalam ekspresi interpolasi:
Nama | Deskripsi | Parameter |
---|---|---|
ExpressionInterpolationMode.linear |
Menginterpolasi secara linear antara sepasang stop. | nil |
ExpressionInterpolationMode.exponential |
Menginterpolasi secara eksponensial antara stop. Dasar ditentukan dan mengontrol laju peningkatan output. Nilai yang lebih tinggi membuat output semakin meningkat ke ujung atas rentang. Nilai dasar yang mendekati 1 menghasilkan output yang meningkat lebih linier. | Ekspresi yang mengevaluasi ke angka, menentukan dasar interpolasi eksponensial. |
ExpressionInterpolationMode.cubicBezier |
Menginterpolasi menggunakan kurva Bezier kubik yang didefinisikan oleh titik kontrol yang diberikan. | Array atau ekspresi agregat yang berisi empat ekspresi, masing-masing mengevaluasi ke angka. Keempat angka tersebut adalah titik kontrol untuk kurva kubik Bézier. |
Berikut adalah contoh tampilan berbagai jenis interpolasi ini.
Linier | Eksponensial | Bezier Kubik |
---|---|---|
Contoh ekspresi interpolasi
Contoh berikut menggunakan ekspresi interpolasi untuk mengatur properti bubbleColor
lapisan gelembung berdasarkan properti temperature
dari fitur titik. temperature
Jika nilainya kurang dari 60, warna biru dikembalikan. Jika antara 60 dan kurang dari 70, kuning dikembalikan. Jika antara 70 dan kurang dari 80, jeruk dikembalikan. Jika 80 atau lebih besar, merah dikembalikan.
let layer = BubbleLayer(
source: source,
options: [
.bubbleColor(
from: NSExpression(
forAZMInterpolating: NSExpression(forKeyPath: "temperature"),
curveType: .linear,
parameters: nil,
stops: NSExpression(forConstantValue: [
50: UIColor.blue,
60: UIColor.yellow,
70: UIColor.orange,
80: UIColor.red
])
)
)
]
)
Gambar berikut menunjukkan bagaimana warna dipilih untuk ekspresi di atas.
Ekspresi langkah
Ekspresi langkah dapat digunakan untuk menghitung nilai hasil langkah yang diskrit dengan mengevaluasi fungsi konstanta sepotong yang ditentukan oleh henti.
Ekspresi langkah mengembalikan nilai output henti tepat sebelum nilai input, atau nilai input pertama, jika input kurang dari henti pertama.
Contoh ekspresi langkah
Contoh berikut menggunakan ekspresi langkah untuk mengatur properti bubbleColor
lapisan gelembung berdasarkan properti temperature
dari fitur titik. temperature
Jika nilainya kurang dari 60, biru dikembalikan. Jika antara 60 dan kurang dari 70, kuning dikembalikan. Jika antara 70 dan kurang dari 80, jeruk dikembalikan. Jika 80 atau lebih besar, merah dikembalikan.
let layer = BubbleLayer(
source: source,
options: [
.bubbleColor(
from: NSExpression(
forAZMStepping: NSExpression(forKeyPath: "temperature"),
from: NSExpression(forConstantValue: UIColor.blue),
stops: NSExpression(forConstantValue: [
50: UIColor.blue,
60: UIColor.yellow,
70: UIColor.orange,
80: UIColor.red
])
)
)
]
)
Gambar berikut menunjukkan bagaimana warna dipilih untuk ekspresi di atas.
Informasi Tambahan
Pelajari selengkapnya tentang lapisan-lapisan yang mendukung ekspresi: