1

I have a dataset containing the cost of damage caused by individual floods over the past 100 years. I'd like to use TORQUE to display these events on a map over time, with their severity shown by the size of the marker. ie lesser cost has a smaller marker size, greater cost has larger size.

Is there a torque aggregation function which will allow me to do this?

Here is the style I have so far, but the events still show up as one size...

/** torque visualization */

Map {
-torque-frame-count:1024;
-torque-animation-duration:30;
-torque-time-attribute:"date";
-torque-aggregation-function:"count(cartodb_id)";
-torque-resolution:4;
-torque-data-aggregation:cumulative;
}

#cdd_cost_1{
marker-fill-opacity: 0.9;
marker-line-color: #FFF;
marker-line-width: 1.5;
marker-line-opacity: 1;
marker-placement: point;
marker-multi-policy: largest;
marker-type: ellipse;
marker-fill: #FF5C00;
marker-allow-overlap: true;
marker-clip: false;
}
#cdd_cost_1 [ value <= 956350000] {
marker-width: 25.0;
}
#cdd_cost_1 [ value <= 47368494] {
marker-width: 23.3;
}
#cdd_cost_1 [ value <= 21000000] {
marker-width: 21.7;
}
#cdd_cost_1 [ value <= 14523061] {
marker-width: 20.0;
}
#cdd_cost_1 [ value <= 8300000] {
marker-width: 18.3;
}
#cdd_cost_1 [ value <= 5738341] {
marker-width: 16.7;
}
#cdd_cost_1 [ value <= 4029790] {
marker-width: 15.0;
}
#cdd_cost_1 [ value <= 2828222] {
marker-width: 13.3;
}
#cdd_cost_1 [ value <= 1668590] {
marker-width: 11.7;
}
#cdd_cost_1 [ value <= 572824] {
marker-width: 10.0;
}
2

You can build your own torque-aggregation-function by playing a bit with maths. Let's say that your column is named floods. Then you could do:

-torque-aggregation-function:"round(avg(floods))";

Please, take into account that the valuevariable of Torque is bounded by 255, so if your maximum values exceed this value (which seems that it does according to your filters) you'd need to customize a little bit more your function.

-torque-aggregation-function:"round(avg((floods-min)/(max-min))*255)";

Substituting min by the minimum value of floods and max by its maximum you'll get your data normalized within the range 0-255.

Then, the maximum filter of your CartoCSS should be:

#cdd_cost_1 [ value <= 255] {
marker-width: 25.0;
}

...

If this is not good enough for your use case, just let me know. I also recommend you to take a look at this blogpost about Torque by Andrew Hill.

  • Will this take a while to generate tiles? Trying this and it seems to be hanging... – GIS Danny Sep 27 '16 at 0:38
  • If you're doing the normalization to 255 in CartoCSS, I'd strongly recommend taking it out to SQL: just generate select/generate a new column in the table which is normalized with SQL. This might help, but without knowing the details it's hard to say... I'd recommend to take a look at the developer tools in your browser (specially network requests, to see if you find any error) – iriberri Sep 27 '16 at 8:12
  • 1
    Thanks - I just posted a gist to do it w/ pandas before bringing into carto - gist.github.com/nygeog/03e806283c1923fb39ff538477155060 – GIS Danny Sep 28 '16 at 14:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.