Podstawowy obiekt do reprezentowania różnych wskaźników jakości powietrza. Te dane razem dają obraz aktualnych warunków dotyczących jakości powietrza. Na świecie istnieje wiele indeksów służących do różnych celów i grup zainteresowanych pomiarami różnych aspektów jakości powietrza.
Zapis JSON |
---|
{
"code": string,
"displayName": string,
"aqiDisplay": string,
"color": {
object ( |
Pola | |
---|---|
code |
Kod indeksu. To pole przedstawia indeks do celów programistycznych z użyciem wielkości liter, czyli „snake” zamiast spacji. Przykłady: „uaqi”, „fra_atmo”. |
displayName |
Zrozumiała dla człowieka nazwa nazwy indeksu. Przykład: „AQI (USA)” |
aqiDisplay |
Tekstowa prezentacja wyniku liczbowego indeksu, który może zawierać symbole prefiksu lub sufiksu, co zwykle reprezentuje najgorszy wynik indeksu. Przykład: >100 lub 10+. Uwaga: tego pola należy używać, jeśli chcesz wyświetlać wynik indeksu. W przypadku indeksów nieliczbowych to pole jest puste. |
color |
Kolor używany do przedstawienia wyniku liczbowego w indeksie AQI. |
category |
Klasyfikacja tekstowa interpretacji wyniku liczbowego indeksu. Na przykład: „Doskonała jakość powietrza”. |
dominantPollutant |
Symbol chemiczny zanieczyszczenia dominującego. Na przykład: „CO”. |
aqi |
Wynik liczbowy indeksu. Przykłady: 10, 100. Wartość nie jest znormalizowana i należy ją interpretować tylko w kontekście powiązanego z nią indeksu jakości powietrza. To pole nie jest zwracane w przypadku indeksów nieliczbowych. Uwaga: to pole powinno być używane do obliczeń, wyświetlania wykresów itp. Do wyświetlania wyniku indeksu należy użyć pola wyświetlania AQI. |
Kolor
Reprezentuje kolor w przestrzeni kolorów RGBA. Ta reprezentacja ma na celu uproszczenie procesu konwersji i zmiany kolorów w różnych językach, a nie ich kompaktowości. Na przykład pola tej reprezentacji można wprost przekazać do konstruktora java.awt.Color
w Javie; można go również łatwo dostarczyć do metody +colorWithRed:green:blue:alpha
UIColor w systemie iOS. Przy niewielkim nakładzie pracy można go łatwo sformatować pod postacią ciągu CSS rgba()
w JavaScripcie.
Na tej stronie referencyjnej nie ma informacji o bezwzględnej przestrzeni kolorów, która powinna być wykorzystywana do interpretacji wartości RGB, np. sRGB, Adobe RGB, DCI-P3 i BT.2020. Domyślnie aplikacje powinny przyjąć przestrzeń kolorów sRGB.
Gdy należy ustalić równość kolorów, implementacje (o ile nie udokumentowano inaczej) traktują 2 kolory jako równe, jeśli wszystkie ich wartości czerwonego, zielonego, niebieskiego i alfa różnią się o maksymalnie 1e-5
.
Przykład (Java):
import com.google.type.Color;
// ...
public static java.awt.Color fromProto(Color protocolor) {
float alpha = protocolor.hasAlpha()
? protocolor.getAlpha().getValue()
: 1.0;
return new java.awt.Color(
protocolor.getRed(),
protocolor.getGreen(),
protocolor.getBlue(),
alpha);
}
public static Color toProto(java.awt.Color color) {
float red = (float) color.getRed();
float green = (float) color.getGreen();
float blue = (float) color.getBlue();
float denominator = 255.0;
Color.Builder resultBuilder =
Color
.newBuilder()
.setRed(red / denominator)
.setGreen(green / denominator)
.setBlue(blue / denominator);
int alpha = color.getAlpha();
if (alpha != 255) {
result.setAlpha(
FloatValue
.newBuilder()
.setValue(((float) alpha) / denominator)
.build());
}
return resultBuilder.build();
}
// ...
Przykład (iOS / Obj-C):
// ...
static UIColor* fromProto(Color* protocolor) {
float red = [protocolor red];
float green = [protocolor green];
float blue = [protocolor blue];
FloatValue* alpha_wrapper = [protocolor alpha];
float alpha = 1.0;
if (alpha_wrapper != nil) {
alpha = [alpha_wrapper value];
}
return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}
static Color* toProto(UIColor* color) {
CGFloat red, green, blue, alpha;
if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {
return nil;
}
Color* result = [[Color alloc] init];
[result setRed:red];
[result setGreen:green];
[result setBlue:blue];
if (alpha <= 0.9999) {
[result setAlpha:floatWrapperWithValue(alpha)];
}
[result autorelease];
return result;
}
// ...
Przykład (JavaScript):
// ...
var protoToCssColor = function(rgb_color) {
var redFrac = rgb_color.red || 0.0;
var greenFrac = rgb_color.green || 0.0;
var blueFrac = rgb_color.blue || 0.0;
var red = Math.floor(redFrac * 255);
var green = Math.floor(greenFrac * 255);
var blue = Math.floor(blueFrac * 255);
if (!('alpha' in rgb_color)) {
return rgbToCssColor(red, green, blue);
}
var alphaFrac = rgb_color.alpha.value || 0.0;
var rgbParams = [red, green, blue].join(',');
return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');
};
var rgbToCssColor = function(red, green, blue) {
var rgbNumber = new Number((red << 16) | (green << 8) | blue);
var hexString = rgbNumber.toString(16);
var missingZeros = 6 - hexString.length;
var resultBuilder = ['#'];
for (var i = 0; i < missingZeros; i++) {
resultBuilder.push('0');
}
resultBuilder.push(hexString);
return resultBuilder.join('');
};
// ...
Zapis JSON |
---|
{ "red": number, "green": number, "blue": number, "alpha": number } |
Pola | |
---|---|
red |
Ilość czerwonego koloru jako wartość z przedziału [0, 1]. |
green |
Ilość zielonego koloru jako wartość przedziału [0, 1]. |
blue |
Ilość niebieskiego koloru jako wartość z przedziału [0, 1]. |
alpha |
Część tego koloru, która powinna zostać zastosowana do piksela. Oznacza to, że końcowy kolor w pikselach jest określony za pomocą tego równania:
Oznacza to, że wartość 1,0 odpowiada jednolitym kolorowi, a wartość 0,0 – kolorowi całkowicie przezroczystemu. Wykorzystuje komunikat opakowany, a nie prosty zmiennoprzecinkowy element skalarny, dzięki czemu można odróżnić wartość domyślną od nieskonfigurowanej wartości. Jeśli ten obiekt koloru zostanie pominięty, będzie on renderowany jako jednolity kolor (jak gdyby wartość alfa miała jednoznacznie przypisaną wartość 1,0). |