Snippets

Piotr Szrajber Smart M.App - find all GeoJson objects that have particular value for particular property in the current filter

Created by Piotr Szrajber
/**
 * Find all records that have value of the property config.property equal to config.value
 *
 * @param {Object} config
 * @param {String} config.property Name of the property/dimension
 * @param {String} config.value Target value
 * @param {String} config.key ID/key property
 * @param {Function} callback callback
 * @param {Object[]} callback.records records matching the criteria
 * @param {Function} errback error callback
 * @param {String} errback.error error message
 * @return {void}
 *
 * 2017-05-12 Piotr Szrajber <piotr.szrajber@hexagongeospatial.com>
 */
function getAllAlarmsInCurrentStage(config, callback, errback) {
    // find the default stage
    gsp.bi.stage.findStage(null, function(stage) {

        // find the choropleth (it has geojson data)
        gsp.bi.stage.findWidgets({
            descriptors: [{
                chartM: {
                    chart: "choropleth"
                }
            }]
        }, function(widgets) {
            if (!widgets || !widgets[0]) {
                errback("no choropleth widget found");
            }
            getAllAlarms({
                geochart: widgets[0].chart,
                stage: stage,
                value: config.value,
                property: config.property,
                key: config.key
            }, callback, errback)

        });
    });
}

function getAllAlarms(config, callback, errback) {
    var stage = config.stage,
        geochart = config.geochart,
        value = config.value,
        property = config.property,
        key = config.key;

    var va_dim = stage.facts().dimension(function(record) {
        return record[property];
    });
    va_dim.filterExact(value);

    var results = va_dim.top(Infinity).map(function(row) {
        return geochart.painter().geoJson().features.find(function(feature) {
            return feature.properties[key] === row[key];
        });
    });
    va_dim.filter(null);
    va_dim.remove();
    callback(results);
}


// gsp.ready("v1.0", function(gsp) { // uncomment for the console

// example
getAllAlarmsInCurrentStage({
    value: "ALARM",
    property: "VA_CAT",
    key: "ID1"
}, function(ret) {
    console.log(ret);
}, function(err) {
    console.error(err);
});

// }); // uncomment for the console

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.