/
wms_pool.js
executable file
·93 lines (78 loc) · 2.15 KB
/
wms_pool.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env node
var http = require('http');
var mapnik = require('mapnik');
var maps = require('./mappool');
var url = require('url');
var port = 8000;
var pool_size = 10;
var usage = 'usage: wms.js <stylesheet> <port>';
var stylesheet = process.ARGV[2];
if (!stylesheet) {
console.log(usage);
process.exit(1);
}
var port = process.ARGV[3];
if (!port) {
console.log(usage);
process.exit(1);
}
//maps.size = 60;
var aquire = function(xml,options,callback) {
try {
maps.acquire(
xml,
options,
function(map) {
if (map.width() !== options.width ||
map.height() !== options.height) {
map.resize(options.width, options.height);
}
callback(null, map);
}
);
}
catch (err) {
callback(err,null);
}
}
var release = function(stylesheet,map) {
maps.release(
stylesheet,
map
);
}
http.createServer(function (request, response) {
var query = url.parse(request.url.toLowerCase(),true).query;
response.writeHead(500, {
'Content-Type':'text/plain'
});
if (query &&
(query.bbox !== undefined) &&
(query.width !== undefined) &&
(query.height !== undefined) ) {
var bbox = query.bbox.split(',');
var options = {width:parseInt(query.width),height:parseInt(query.height)};
options.size = 50;
aquire(stylesheet,options,function(err,map) {
if (err) {
response.end(err.message);
} else{
map.render(bbox,'png',function(err, buffer){
release(stylesheet,map);
if (err) {
response.end(err.message);
} else {
response.writeHead(200, {
'Content-Type':'image/png'
});
response.end(buffer);
}
});
}
})
}
else {
response.end("something was not provided!");
}
}).listen(port);
console.log('Server running at http://127.0.0.1:' + port + '/');