Skip to content

Commit

Permalink
fix some bugs with offline tiles
Browse files Browse the repository at this point in the history
expand the tile server's knowledge of other things besides just png
  • Loading branch information
okdistribute committed Mar 15, 2019
1 parent 693bca6 commit 6b29c9a
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 13 deletions.
2 changes: 1 addition & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ function createServers (done) {

var tileServer = createTileServer()
tileServer.listen(argv.tileport, function () {
log('tile server listening on :', app.server.address().port)
log('tile server listening on :', tileServer.address().port)
if (--pending === 0) done()
})
}
Expand Down
7 changes: 3 additions & 4 deletions src/components/MapEditor.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,10 @@ export default class MapEditor extends React.Component {
}
if (customCss) insertCss(customCss)
if (imagery) {
imagery = imagery.map(function (i) {
if (!self.id) i.id = i.name
return i
imagery = imagery.dataImagery
imagery.forEach((img) => {
iD.data.imagery.unshift(img)
})
iD.data.imagery = iD.data.imagery.concat(imagery)
}
if (icons) {
var parser = new DOMParser()
Expand Down
11 changes: 6 additions & 5 deletions src/lib/tile-importer.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@ function TileImporter (userData, defaults) {
}

TileImporter.defaults = {
name: 'Offline Maps',
id: 'Offline-Maps',
name: 'Custom: Imported Offline Maps',
type: 'tms', // TODO: what is this??
overlay: false,
default: false,
overzoom: true,
scaleExtent: [0, 22],
url: 'http://localhost:5005',
templatePattern: '/{zoom}/{x}/{y}.png'
templatePattern: '/{zoom}/{x}/{y}'
}

TileImporter.prototype.go = function (tilesPath, options, cb) {
Expand All @@ -34,17 +35,17 @@ TileImporter.prototype.go = function (tilesPath, options, cb) {
if (self.editing) return cb(new Error('Tiles importing, please wait...'))
self.editing = true
var imageryPath = path.join(this.userData, 'imagery.json')
options.id = options.name.replace(' ', '-') // what else should we normalize?
options.id = options.id || options.name.replace(' ', '-') // what else should we normalize?
var tilesDest = path.join(this.userData, 'tiles', options.id)
this.moveTiles(tilesPath, tilesDest, function (err) {
if (err) return done(err)
fs.readFile(imageryPath, function (err, data) {
if (err && err.code !== 'ENOENT') return done(err)
var imagery = data ? JSON.parse(data) : []
var imagery = data ? JSON.parse(data).dataImagery : []
var matches = imagery.filter((obj) => obj.name === options.name)
if (matches.length) return done()
imagery.push(self._entry(options))
fs.writeFile(imageryPath, JSON.stringify(imagery, null, 2), done)
fs.writeFile(imageryPath, JSON.stringify({dataImagery: imagery}, null, 2), done)
})
})

Expand Down
21 changes: 18 additions & 3 deletions src/tile-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,27 @@ var http = require('http')
var ecstatic = require('ecstatic')
var app = require('electron').app
var path = require('path')
var series = require('run-series')

var tilePath = path.join(app.getPath('userData'), 'tiles')

module.exports = function () {
var server = http.createServer(
ecstatic({ root: tilePath })
)
var guesses = ['png', 'jpg', 'jpeg']
var routes = guesses.map((ext) => {
return ecstatic({
root: tilePath ,
defaultExt: ext
})
})
var server = http.createServer(function (req, res) {
var tasks = routes.map((route) => {
return (done) => route(req, res, done)
})
series(tasks, function (err) {
if (err) console.error(err)
res.statusCode = 404
res.end('Not Found')
})
})
return server
}

0 comments on commit 6b29c9a

Please sign in to comment.