Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: Could not create datasource for type: 'postgis' (no datasource plugin directories have been successfully registered) #4408

Open
Rehan-05 opened this issue Sep 25, 2023 · 2 comments

Comments

@Rehan-05
Copy link

Rehan-05 commented Sep 25, 2023

I'm trying to rendering the data by using the mapnik in node js. But continuously facing errors.

`
/set framework and dependencies
var express = require('express');
var app = express();
var url = require('url');

//mapnik and dependecies
var mapnik = require('mapnik');
var fs = require('fs');

var mapProjection = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs';
var map = new mapnik.Map(512, 512, mapProjection);

//mapnik
//mapnik.register_default_fonts();
//mapnik.register_default_input_plugins();

//mapnik pool
var mapnikPool = require('mapnik-pool')(mapnik);
var pool = mapnikPool.fromString(fs.readFileSync('./style.xml', 'utf8'), {
'size': 512,
'height': 512,
'width': 512,
}, {});

//postgis
var settings = require('./settings.js');
var postgis = new mapnik.Datasource(settings.postgis);

app.get('/render', function (req, res) {
console.log('request' + "\n");

pool.acquire(function (err, map) {
    //console.log(map);

    var query = req.url.split('&');
    //console.log(query);

    var bbox = query[13].replace('BBOX=', '').split('%2C').map(function (item) {
        return parseFloat(item);
    });
    //get layer
    var layerName = query[5].replace('LAYERS=', '').split('%3A')[1];

    //set style, datasource
    var layer = new mapnik.Layer(layerName, mapProjection);
    layer.datasource = postgis;
    layer.styles = ['style_pg'];

    map.add_layer(layer);
    map.extent = bbox;
    //map.zoomAll(bbox);

    //console.log(map);

    var im = new mapnik.Image(512, 512);
    map.render(im, function (err, im) {
        if (err) throw err;
        im.encode('png', function (err, buffer) {
            if (err) throw err;
            fs.writeFile('./tiles/map' + Math.round(Math.random() * 10000) + '.png', buffer, function (err) {
                if (err) throw err;


                //send file must be here because async functions
                res.setHeader('Content-Length', buffer.length);
                res.setHeader('Content-Type', 'image/png');
                /*res.sendFile('map' + Math.round(Math.random() * 10000) + '.png', {
                    'root': '/var/www/fmp/etc/nodejs/'
                });*/
                res.send(buffer);
                //console.log('saved map image to map.png');
            });
        });
    });
    //});
});

});

app.listen(3003, () => {
console.log('Server is running on port 3003');
});
`

Here is my settings.js

var path = require('path');

module.exports.styles = path.join(__dirname, 'styles');

module.exports.postgis = {
'dbname' : 'osm',
'table': 'morocco_roads',
'geometry_field' : 'geom',
'srid' : 3857,
'user' : 'osmrehan05',
'password': 'Pakistan12@',
'max_size' : 10,
'type' : 'postgis',
'port': '5432',
'host': 'localhost',
'extent' : '-20005048.4188,-9039211.13765,19907487.2779,17096598.5401' //set for epsg: 3857
};

Here is my package.json
{
"name": "my_mapnik_project",
"version": "1.0.0",
"description": "",
"main": "rendernew2.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"start": "nodemon rendernew2.js",
"dev": "nodemon rendernew2.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.2",
"fs": "^0.0.1-security",
"mapnik": "^4.5.9",
"mapnik-pool": "^0.1.3",
"pg": "^8.11.3",
"url": "^0.11.3"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}

"Here is my style.xml

<Style name="blue_style"> </Style> blue_style csv wkt,Name POLYGON((-180 -90,-180 90,180 90,180 -90,-180 -90)),Blue Rectangle
@Rehan-05
Copy link
Author

@artemp Can you please check it.

If i un-commit both these plugins
//mapnik.register_default_fonts();
//mapnik.register_default_input_plugins();

then facing error

/root/my_mapnik_project/rendernew2.js:27
var postgis = new mapnik.Datasource(settings.postgis);
^

Error: Postgis Plugin: authentication method 10 not supported
Connection string: 'host=localhost port=5432 dbname=osm user=osmrehan05 connect_timeout=4 fallback_application_name=mapnik'

@Rehan-05
Copy link
Author

Need urgent response. Thanks
@noirbizarre @mathisloge

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant