UNPKG

6.47 kBJavaScriptView Raw
1var http = require('http');
2var url = require('url');
3var querystring = require('querystring');
4var osmToGeoJson = require('./lib/OsmToGeoJson.js');
5var geoJsonToX3dJson = require('./lib/GeoJsonToX3dJson.js');
6var x3dJsonToX3d = require('./lib/X3dJsonToX3d.js')
7
8var server = http.createServer(function (request, response) {
9 var page = url.parse(request.url).pathname;
10 console.log("page:" + page);
11 if (page != '/3dbox') {
12 response.writeHead(404, {"Content-Type": "text/html"});
13 response.end();
14 return;
15 }
16 var args = querystring.parse(url.parse(request.url).query);
17 console.log(args);
18 if ('format' in args && 'zoom' in args && 'xtile' in args && 'ytile' in args) {
19//wget "http://www.openstreetmap.org/api/0.6/map?bbox=-73.9874267578125,40.74725696280421,-73.98605346679688,40.74829735476796" -O result.osm
20//wget "http://www.openstreetmap.org/api/0.6/tiledata/18/77196/98527" -O tile.osm
21//wget "http://www.openearthview.net/osm2x3d.php?zoom=18&xtile=77196&ytile=98527" -O ESB18_old.x3d
22//wget "http://a.tile.openstreetmap.org/18/77196/98527.png"
23//wget "http://a.tile.openstreetmap.org/19/154393/197054.png"
24//wget "localhost:8080/3dbox?format=x3d&xtile=77196&ytile=98527&zoom=18" -O x3d.x3d
25//wget "localhost:8080/3dbox?format=x3djson&xtile=77196&ytile=98527&zoom=18" -O x3djson.json
26//wget "localhost:8080/3dbox?format=geojson&xtile=154394&ytile=197054&zoom=19" -O ESB19_geojson.json
27//wget "localhost:8080/3dbox?format=x3d&xtile=154394&ytile=197054&zoom=19" -O ESB19.x3d
28//wget "http://www.openearthview.net/osm2x3d.php?zoom=19&xtile=154394&ytile=197054" -O ESB19_old.x3d
29//wget "localhost:8081/3dbox?format=x3d&xtile=38598&ytile=49263&zoom=17" -O ESB17.x3d
30//wget "http://www.openearthview.net/osm2x3d.php?zoom=17&xtile=38598&ytile=49263" -O ESB17_old.x3d
31
32 if (args.zoom >= 16 && args.zoom <= 19) {
33 var loD = args.zoom - 15;
34 var left = tile2long(+args.xtile, args.zoom);
35 var right = tile2long(+args.xtile + 1, args.zoom);
36 var top = tile2lat(+args.ytile, args.zoom);
37 var bottom = tile2lat(+args.ytile + 1, args.zoom);
38 var myPath = "/api/0.6/map?bbox=" + left + "," + bottom + "," + right + "," + top;
39 console.log("Path: " + myPath);
40 console.log('<bounds minlat="' + bottom + '" minlon="' + left + '" maxlat="' + top + '" maxlon="' + right + '"/>');
41 console.log('<bounds minlat="40.7481926" minlon="-73.9862797" maxlat="40.7486022" maxlon="-73.9852939"/>');
42 var options = {
43 hostname: 'www.openstreetmap.org',
44 port: 80,
45 path: myPath,
46 method: 'GET',
47 };
48 var request = http.request(options, function (osmReadStream) {
49 console.log('Get osm map response.')
50 var onX3dJsonConvert;
51 var onGeoJsonConvert;
52 var options = {
53 'origin': [left, top],
54 'loD': loD,
55 'tile': 'http://a.tile.openstreetmap.org/' + args.zoom + '/' + args.xtile + '/' + args.ytile + '.png'
56 }
57 switch (args.format) {
58 case "geojson":
59 console.log("geojson format.");
60 onGeoJsonConvert = function (geoJson) {
61 console.timeEnd("server");
62 console.log('Conversion to geoJson done.');
63 response.setHeader('Content-Type', 'application/json');
64 response.end(JSON.stringify(geoJson));
65 }
66// osmToGeoJson.convert(myStream, onGeoJsonConvert);
67 break;
68 case "x3djson":
69 console.log("x3djson format.");
70 onX3dJsonConvert = function (x3dJsonScene) {
71 console.timeEnd("server");
72 console.log('Conversion to x3dJson done.');
73 response.setHeader('Content-Type', 'application/json');
74 response.end(JSON.stringify(x3dJsonScene));
75 };
76 onGeoJsonConvert = function (geoJson) {
77 console.timeEnd("server");
78 console.log('Conversion to geoJson done.');
79// geoJsonToX3dJson.convert(geoJson, [left, top], loD, onX3dJsonConvert);
80 geoJsonToX3dJson.convert(geoJson, options, onX3dJsonConvert);
81 }
82 break;
83 case "x3d":
84 console.log("x3djson format.");
85 onX3dJsonConvert = function (x3dJsonScene) {
86 console.timeEnd("server");
87 console.log('Conversion to x3dJson done.');
88 response.setHeader('Content-Type', 'application/json');
89 x3dJsonToX3d.convert(x3dJsonScene, response);
90 response.end();
91 };
92 onGeoJsonConvert = function (geoJson) {
93 console.timeEnd("server");
94 console.log('Conversion to geoJson done.');
95 geoJsonToX3dJson.convert(geoJson, options, onX3dJsonConvert);
96 }
97 break;
98 }
99 if (onGeoJsonConvert) {
100// args.xtile, args.zoom
101 var osmToGeoJsonWriteStream = osmToGeoJson.convert(options, onGeoJsonConvert);
102 console.log('Starting conversion...');
103 console.time("server");
104 osmReadStream.pipe(osmToGeoJsonWriteStream);
105 } else {
106 response.end();
107 }
108 });
109 request.on('error', function (e) {
110 console.log('problem with request: ' + e.message);
111 });
112 request.end();
113 }
114 } else {
115 console.log("fallback");
116 }
117});
118server.listen(8081);
119
120function tile2long(x, z) {
121 return (x / Math.pow(2, z) * 360 - 180);
122}
123
124function tile2lat(y, z) {
125 var n = Math.PI - 2 * Math.PI * y / Math.pow(2, z);
126 return (180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))));
127}
\No newline at end of file