jperelli / osm-static-maps

Openstreetmap static maps is a nodejs lib, CLI and server open source inspired on google static map service
http://osm-static-maps.herokuapp.com/
GNU General Public License v2.0
160 stars 52 forks source link

Add to OSM server #1

Closed federicoalvarez-github closed 6 years ago

federicoalvarez-github commented 6 years ago

Julian, cómo estás? Tengo mi propio servidor de OSM y quiero agregarle esta funcionalidad.

Es eso posible? Tenés algo en lo que me pueda basar?

Muchas gracias!

Saludos, Federico.

(Habia escrito todo en ingles hasta que vi que eras Argentino, yo soy Uruguayo!)

jperelli commented 6 years ago

Hola! genial!, que tipo de servidor tenes? es nodejs y queres integrar esto como un paquete o es en otro lenguaje?

Voy a agregar instrucciones en el README para usarlo

jperelli commented 6 years ago

Hola, modifique bastante el codigo para que sea compatible con npm y puedas instalarlo directamente desde ahi. Lo converti en una libreria. Tambien agregue mas informacion para explicar como utilizarlo.

Por ultimo, agregue un parametro para que puedas utilizar la url de tu servidor osm personal. La opcion se llama tileserverUrl. Te recomiendo usar esa url y basarte en el sample-server.js

federicoalvarez-github commented 6 years ago

Muchas gracias Julian! Al final terminé encontrando https://github.com/Piskvor/staticMapLiteExt.git, que funciona muy bien. Agradezco mucho tu tiempo e interes, voy a hacer una pruba con tu servicio, pero creo que esta un poco escaso de documentacion/ejemplos, eso creo lo hace un poco dificil de usar. De todas formas te agradezco un monton! Saludos, Federico.

jperelli commented 6 years ago

Creo que este anda mejor, usa cosas mas modernas y anda rapido, pero el otro se adapta mejor a php u otros escenarios que no voy a considerar en este proyecto. Buenisimo que hayas encontrado uno que te resuelva tu requerimiento particular. Gracias por abrir un issue, me hizo retomar este proyectito, que lo tenia medio abandonado. Saludos!

federicoalvarez-github commented 6 years ago

Mas bien, cuando lo vi quedé copado. La posibilidad de armar el static map con un GeoJSON es genial!

Lo que tengo armado y corriendo en Amazon es un Switch2OSM.

Ya instalé tu proyecto y ejecuté la url en el puerto 3000 de mi servidor, pero siempre me retorna la misma imagen arriba de La Plata.

Probé de cambiar en lib/lib.js los valores de lat, lng y tileserverUrl, pero no genera ningun cambio. Entre prueba y prueba siempre bajaba y subia el servidor.

Tambien probé de mandar por parametros un geojson y el tileserverUrl, pero tampoco cambió nada. Sigue mostrando la misma imagen de La Plata.

Que puedo estar haciendo mal? Como hago para que apunte a mi servidor? Hay algun debug?

Gracias nuevamente!

Saludos, Federico.

federicoalvarez-github commented 6 years ago

Julian, ya lo hice funcionar. Anda perfecto.

Mil gracias por todo! Sobretodo por compartir!

jperelli commented 6 years ago

Genial! Me alegro. Cual era el problema?

federicoalvarez-github commented 6 years ago

Tuve que agregar la lectura de parametros lat, lng, zoom y tileserverUrl a sample-server.js. Era eso nomas! Quizas lo puedas agregar al codigo de fuente o a la documentacion para que otros lo puedan usar. Queres que te pase como me quedó? Saludos, Federico.

jperelli commented 6 years ago

Dale, pasamelo asi lo agrego, si queres hacer un pull request sos bienvenido, sino pasame por comentario nomas y lo agrego

federicoalvarez-github commented 6 years ago

var express = require('express') , http = require('http') , path = require('path') , engines = require('consolidate') , osmsm = require('./lib/lib.js');

var app = express();

// all environments app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/lib'); app.set('view engine', 'handlebars'); app.set("view options", { layout: false }); app.engine('.html', engines.handlebars);

http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); });

// TEST: won't work! http://localhost:5000/dynamic?geojson={%22type%22:%20%22Point%22,%22coordinates%22:[-105.01621,39.57422]} // 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'

function makeContext(req) { var context = { lat : -34.876779, lng : -56.079339, zoom : 12, geojson: "", tileserverUrl: 'http://korona.geog.uni-heidelberg.de/tiles/roads/x={x}&y={y}&z={z}', }

if (req.query.geojson)
    context.geojson = req.query.geojson
            if (req.query.lat)
    context.lat = req.query.lat
            if (req.query.lng)
    context.lng = req.query.lng
            if (req.query.zoom)
    context.zoom = req.query.zoom
            if (req.query.tileserverUrl)
    context.tileserverUrl = req.query.tileserverUrl
return context

}

app.get('/', function(req, res) { var height var width

if (req.query.height) height = req.query.height

if (req.query.width) width = req.query.width

var context = makeContext(req)

osmsm({ height: height, width: width, lat: context.lat, lng: context.lng, zoom: context.zoom, geojson: context.geojson, tileserverUrl: context.tileserverUrl }).then(function(stream) { stream.on('data', function(data) { res.write(data.toString('binary'), 'binary'); }); stream.on('end', function(data){ res.end(data); }); }).catch(function(err) { res.end(". Perhaps there is an error in your parameters?"); }) });

app.get('/dynamic', function(req, res) { var context = makeContext(req) res.render('template.html', context); });