GeoKnow/Jassa-Core

View on GitHub
lib/geo/GeoMapFactoryUtils.js

Summary

Maintainability
A
0 mins
Test Coverage
var BboxExprFactoryWkt = require('./BboxExprFactoryWkt');
var BboxExprFactoryWgs84 = require('./BboxExprFactoryWgs84');
var GeoMapUtils = require('./GeoMapUtils');
var GeoMapFactory = require('./GeoMapFactory');
var VarUtils = require('../sparql/VarUtils');
var Concept = require('../sparql/Concept');
var ElementString = require('../sparql/element/ElementString');
var ElementTriplesBlock = require('../sparql/element/ElementTriplesBlock');
var NodeFactory = require('../rdf/NodeFactory');
var Triple = require('../rdf/Triple');

var rdf = require('../vocab/rdf');
var xsd = require('../vocab/xsd');

//var TemplateParser = require('../sponate/TemplateParser');
var SponateUtils = require('../sponate/SponateUtils');

var defaultIntersectsFnName = 'bif:st_intersects';
var defaultGeomFromTextFnName = 'bif:st_geomFromText';

//var mapParser = new TemplateParser();


var GeoMapFactoryUtils = {

    createXyMapFactory: function(xPredicateName, yPredicateName, doCast) {
        var elementStr = '?s <' + xPredicateName + '> ?x ; <' + yPredicateName + '> ?y';
        var concept = new Concept(ElementString.create(elementStr), VarUtils.s);

        var cast = doCast ? xsd.xdouble : null;

        var result = new GeoMapFactory(
                GeoMapUtils.createXyView(concept),
                new BboxExprFactoryWgs84(VarUtils.x, VarUtils.y, cast));

        return result;
    },

    wgs84MapFactory: new GeoMapFactory(
            GeoMapUtils.wgs84GeoView,
            new BboxExprFactoryWgs84(VarUtils.x, VarUtils.y)
    ),

    /**
     * A geomap factory similar to the one above, however geo:lat / geo:long values in the data
     * are explicitly converted to decimals in order to account for standard conform string values
     */
    wgs84CastMapFactory: new GeoMapFactory(
            GeoMapUtils.wgs84GeoView,
            new BboxExprFactoryWgs84(VarUtils.x, VarUtils.y, xsd.xdouble)
    ),

    ogcVirtMapFactory: new GeoMapFactory(
            GeoMapUtils.ogcGeoView,
            new BboxExprFactoryWkt(VarUtils.w, defaultIntersectsFnName, defaultGeomFromTextFnName)
    ),


    // TODO Replace defaults with geosparql rather than virtuoso bifs
    createWktMapFactory: function(wktPredicateName, intersectsFnName, geomFromTextFnName) {
        wktPredicateName = wktPredicateName || 'http://www.opengis.net/ont/geosparql#asWKT';
        intersectsFnName = intersectsFnName || defaultIntersectsFnName;
        geomFromTextFnName = geomFromTextFnName || defaultGeomFromTextFnName;

        var predicate = NodeFactory.createUri(wktPredicateName);

        var geoConcept = new Concept(
            new ElementTriplesBlock([new Triple(VarUtils.s, predicate, VarUtils.w)]),
            VarUtils.s
        );


        var baseMap = SponateUtils.parseSpec({
            name: 'geoMap-' + wktPredicateName,
            template: [{
                id: '' + geoConcept.getVar(), // TODO get rid of the '' +
                wkt: '' + VarUtils.w
            }],
            from: geoConcept.getElement()
        });


        var result = new GeoMapFactory(
                baseMap,
                new BboxExprFactoryWkt(VarUtils.w, intersectsFnName, geomFromTextFnName)
        );

        return result;
    }
};

module.exports = GeoMapFactoryUtils;