About Pollution Indices At This Website

This section is based on surveys from visitors of this website. Questions for these surveys are similar to many similar scientific and government surveys.

Each entry in the survey is saved as the number in the range [-2, +2], with -2 having meaning of strongly negative and +2 meaning of strongly positive.

We filter surveys to eliminate potential spam, like people entering a large amount of data which are differentiating from the median value.

To present survey result, we use the scale [0, 100] for values since it is easier to read for users.

To generate a current index (which is always updated) we use data up to 36 months old. We include only cities for which there are at least a certain number of contributors. Our semiannual index is remade twice per year by pushing current index into this historical view.

Most of our data are based on perceptions (opinions) from visitors of this website. For pollution section, we include some relevant data from World Health Organization and other institutions if we find it helpful. Please consult our Terms of use for details.

Pollution Index is an estimation of the overall pollution in the city. The biggest weight is given to air pollution, than to water pollution/accessibility, two main pollution factors. Small weight is given to other pollution types.

Pollution Exp Scale is using an exponential scale to show very high numbers for very polluted cities, and very low numbers for unpolluted cities. Therefore to calculate formula it uses the exponential function to calculate the index.

Actual formulas to calculate indices are subject to change. At this moment, quite complex empirical formulas are used. Those formulas as written in Java programming language are as follows:

   public void calculateIndex() {
     //assumes air_quality and other entries from user are in the range [-2, 2], where -2 means perceived as very low, and +2 means very high
     //PollutionDbEntry.IS_POLLUTION_AIR_QUALITY and similar are constant variables which are either -1 and 1; i.e. IS_POLLUTION_AIR_QUALITY = -1.0
     //These constant variables in PollutionDbEntry class are 1 for values which represent pollutions and -1 for values which represent opposite (purity, cleanliness)
     index = new PollutionIndex();
     double overall = 0.0;
     overall += 7 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_AIR_QUALITY * air_quality);
     overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_DRINKING_WATER_QUALITY_ACCESSIBILITY * drinking_water_quality_accessibility);
     overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_WATER_POLLUTION * water_pollution);
     overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_GARBAGE_DISPOSAL_SATISFACTION * garbage_disposal_satisfaction);
     overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_CLEAN_AND_TIDY * clean_and_tidy);
     overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_NOISE_AND_LIGHT_POLLUTION * noise_and_light_pollution);
     overall += getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_GREEN_AND_PARKS_QUALITY * green_and_parks_quality);
     overall += 2 * getIndexPartPreCalc(PollutionDbEntry.IS_POLLUTION_COMFORTABLE_TO_SPEND_TIME * comfortable_to_spend_time);

     double overallExpScale = 0.0;
     overallExpScale += 7 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_AIR_QUALITY * air_quality);
     overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_DRINKING_WATER_QUALITY_ACCESSIBILITY * drinking_water_quality_accessibility);
     overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_WATER_POLLUTION * water_pollution);
     overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_GARBAGE_DISPOSAL_SATISFACTION * garbage_disposal_satisfaction);
     overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_CLEAN_AND_TIDY * clean_and_tidy);
     overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_NOISE_AND_LIGHT_POLLUTION * noise_and_light_pollution);
     overallExpScale += getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_GREEN_AND_PARKS_QUALITY * green_and_parks_quality);
     overallExpScale += 2 * getIndexPartPreCalcExpScaleStandard(PollutionDbEntry.IS_POLLUTION_COMFORTABLE_TO_SPEND_TIME * comfortable_to_spend_time);

     index.main = overall / 14.5; //max 17
     index.expScale = calcScaleStandardIndexFromSum(overallExpScale, 12);

  protected double getIndexPartPreCalc(double internalValue) {
    return (internalValue + 2) * 25;

  protected double getIndexPartPreCalcExpScaleStandard(double internalValue) {
    return getIndexPartPreCalcExpScale(internalValue, Math.E);

  protected double getIndexPartPreCalcExpScale(double internalValue, double exp) {
    return Math.pow((internalValue + 2) * 25, exp);

  protected double calcScaleStandardIndexFromSum(double scaleSum, int elems) {
    return Math.pow(scaleSum / elems, 1 / (Math.E * 8.8 / 10));