AirQualityIndex

تمثّل هذه السمة العنصر الأساسي لتمثيل مقاييس جودة الهواء المختلفة. وعند جمع هذه المقاييس معًا، تقدّم نبذة عن ظروف جودة الهواء الحالية. هناك مؤشرات متعدّدة في العالم تقدّم أغراضًا مختلفة والمجموعات المهتمة بقياس الجوانب المختلفة لجودة الهواء.

تمثيل JSON
{
  "code": string,
  "displayName": string,
  "aqiDisplay": string,
  "color": {
    object (Color)
  },
  "category": string,
  "dominantPollutant": string,
  "aqi": integer
}
الحقول
code

string

رمز الفهرس. يمثل هذا الحقل الفهرس لأغراض البرمجة باستخدام حالة الثعبان بدلاً من المسافات. أمثلة: "uaqi" و"fra_atmo"

displayName

string

تمثيل لاسم الفهرس ويمكن لشخص عادي قراءته مثال: "مؤشر جودة الهواء (الولايات المتحدة)"

aqiDisplay

string

تمثيل نصي للنتيجة الرقمية للفهرس، والذي قد يتضمن رموز بادئة أو لاحقة، والتي تمثل عادةً أسوأ نتيجة للمؤشر. مثال: >100 أو +10.

ملاحظة: يجب استخدام هذا الحقل عندما تريد عرض نتيجة الفهرس. بالنسبة إلى الفهارس غير الرقمية، يكون هذا الحقل فارغًا.

color

object (Color)

يشير ذلك المصطلح إلى اللون المستخدَم لتمثيل النتيجة الرقمية لمؤشر جودة الهواء (AQI).

category

string

يشير ذلك المصطلح إلى تصنيف نصي لتفسير النتيجة الرقمية للفهرس. على سبيل المثال: "جودة الهواء ممتازة".

dominantPollutant

string

تمثّل هذه السمة الرمز الكيميائي للمادة الملوّثة المسيطرة. على سبيل المثال: "CO".

aqi

integer

النتيجة الرقمية للمؤشر. أمثلة: 10 و100.

لم يتم تسوية القيمة ويجب تفسيرها فقط في سياق مؤشر جودة الهواء المرتبط بها. بالنسبة إلى الفهارس غير الرقمية، لن يتم عرض هذا الحقل.

ملاحظة: يجب استخدام هذا الحقل في العمليات الحسابية وعرض الرسم البياني وما إلى ذلك. ولعرض نتيجة الفهرس، عليك استخدام حقل عرض مؤشر جودة الهواء.

اللون

يمثل لونًا في مساحة ألوان RGBA. تم تصميم هذا التمثيل لتبسيط عملية التحويل من وإلى تمثيلات الألوان بلغات مختلفة على مدى الاكتفاء. على سبيل المثال، يمكن تقديم حقول هذا التمثيل بشكل بسيط إلى الدالة الإنشائية java.awt.Color في Java؛ يمكن أيضًا تقديمه بطريقة تافهة لطريقة +colorWithRed:green:blue:alpha في UIColor على نظام iOS؛ ومن خلال القليل من العمل، يمكن تنسيقه بسهولة إلى سلسلة CSS rgba() في JavaScript.

لا تحتوي هذه الصفحة المرجعية على معلومات عن مساحة اللون المطلقة التي يجب استخدامها لتفسير قيمة النموذج اللوني أحمر أخضر أزرق، على سبيل المثال، sRGB وAdobe RGB وDCI-P3 وBT.2020. وبشكل تلقائي، يجب أن تفترض التطبيقات مساحة اللون sRGB.

عندما يلزم تحديد مساواة الألوان، تنطبق عمليات التنفيذ، ما لم يوثق خلاف ذلك، على اعتبار لونين متساويين إذا كانت جميع قيم الأحمر والأخضر والأزرق وألفا تختلف على الأكثر 1e-5.

مثال (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();
 }
 // ...

مثال (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;
}
// ...

مثال (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('');
};

// ...
تمثيل JSON
{
  "red": number,
  "green": number,
  "blue": number,
  "alpha": number
}
الحقول
red

number

مقدار اللون الأحمر في اللون كقيمة في الفاصل [0, 1].

green

number

مقدار اللون الأخضر في اللون كقيمة في الفاصل [0, 1].

blue

number

مقدار اللون الأزرق في اللون كقيمة في الفاصل [0, 1].

alpha

number

الجزء من هذا اللون الذي يجب تطبيقه على البكسل. أي أن لون البكسل النهائي يتم تحديده من خلال المعادلة:

pixel color = alpha * (this color) + (1.0 - alpha) * (background color)

وهذا يعني أن القيمة 1.0 تتجاوب مع لون خالص، في حين تتجاوب القيمة 0.0 مع لون شفاف تمامًا. يستخدم ذلك رسالة تضمين بدلاً من عدد قياسي عائم بسيط بحيث يمكن التمييز بين القيمة التلقائية والقيمة التي يتم إلغاء تعيينها. وعند إسقاطه، يتم عرض كائن اللون هذا كلون ثابت (كما لو تم إعطاء قيمة ألفا بوضوح قيمة 1.0).