mirror of
https://github.com/rastapasta/mapscii.git
synced 2024-11-25 17:43:57 +01:00
🏠 persiting downloaded tiles in $home/.mapscii/cache/
This commit is contained in:
parent
4ba7c08755
commit
cc97cfd095
22
README.md
22
README.md
@ -50,29 +50,33 @@ No web browser around? Don't worry - and discover the planet in your console!
|
||||
#### Handling the flow
|
||||
* [`bluebird`](https://github.com/petkaantonov/bluebird) for all the asynchronous [Promise](https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise) magic
|
||||
* [`request-promise`](https://github.com/request/request-promise) for promisified HTTP request handling
|
||||
* [`userhome`](https://github.com/shama/userhome) to determine where to persist downloaded tiles
|
||||
|
||||
### TODOs
|
||||
* MapSCII
|
||||
* [ ] CLI support
|
||||
* [ ] global linking for npm install -g
|
||||
* [X] global linking for npm install -g
|
||||
* [ ] startup parameters
|
||||
* [ ] Style
|
||||
* [ ] center position
|
||||
* [ ] POI filter?
|
||||
* TileSource
|
||||
* [ ] VectorTile
|
||||
* [ ] MBTile
|
||||
* [ ] Tileserver
|
||||
* [ ] mapscii-server
|
||||
* [ ] telnet
|
||||
* [ ] ssh
|
||||
* [ ] Style
|
||||
* [ ] center position
|
||||
* [ ] POI filter?
|
||||
* [ ] Viewport
|
||||
* [x] start with zoom level which shows full vector tile
|
||||
* [x] start with zoom level which shows full
|
||||
* [X] world
|
||||
* [ ] vector tile
|
||||
* [X] boundary based on current zoom & size
|
||||
* [X] determain tiles to show
|
||||
* [X] zoom while keeping center
|
||||
* [ ] calculate tile areas
|
||||
* [X] center based on mercator
|
||||
* [x] handle console resize
|
||||
* [ ] mapscii-server
|
||||
* [ ] telnet
|
||||
* [ ] ssh
|
||||
* [x] handle console resize
|
||||
* [ ] mouse control
|
||||
* [x] accurate mouse drag&drop with instant update
|
||||
@ -116,7 +120,7 @@ No web browser around? Don't worry - and discover the planet in your console!
|
||||
* [ ] from single vector-tile
|
||||
* [x] from local mbtiles
|
||||
* [x] from remote url
|
||||
* [ ] permanent caching of received files
|
||||
* [x] permanent caching of received files
|
||||
|
||||
## License
|
||||
#### The MIT License (MIT)
|
||||
|
@ -40,6 +40,7 @@
|
||||
"sphericalmercator": "^1.0.5",
|
||||
"term-mouse": "^0.1.1",
|
||||
"tilebelt": "^1.0.1",
|
||||
"userhome": "^1.0.0",
|
||||
"vector-tile": "^1.3.0",
|
||||
"x256": "0.0.2"
|
||||
}
|
||||
|
@ -7,7 +7,6 @@
|
||||
x256 = require 'x256'
|
||||
mercator = new (require('sphericalmercator'))()
|
||||
tilebelt = require 'tilebelt'
|
||||
MBTiles = require 'mbtiles'
|
||||
Promise = require 'bluebird'
|
||||
|
||||
Canvas = require './Canvas'
|
||||
|
@ -9,13 +9,17 @@
|
||||
|
||||
Promise = require 'bluebird'
|
||||
MBTiles = require 'mbtiles'
|
||||
|
||||
userhome = require 'userhome'
|
||||
request = require 'request'
|
||||
rp = require 'request-promise'
|
||||
fs = require 'fs'
|
||||
|
||||
Tile = require './Tile'
|
||||
|
||||
module.exports = class TileSource
|
||||
config:
|
||||
persistDownloadedTiles: true
|
||||
|
||||
cache: {}
|
||||
modes:
|
||||
MBTiles: 1
|
||||
@ -28,6 +32,8 @@ module.exports = class TileSource
|
||||
|
||||
init: (@source) ->
|
||||
if @source.startsWith "http"
|
||||
@_initPersistence() if @config.persistDownloadedTiles
|
||||
|
||||
@mode = @modes.HTTP
|
||||
|
||||
else if @source.endsWith ".mbtiles"
|
||||
@ -57,9 +63,18 @@ module.exports = class TileSource
|
||||
when @modes.HTTP then @_getHTTP z, x, y
|
||||
|
||||
_getHTTP: (z, x, y) ->
|
||||
promise =
|
||||
if @config.persistDownloadedTiles and tile = @_getPersited z, x, y
|
||||
Promise.resolve tile
|
||||
else
|
||||
rp
|
||||
uri: @source+[z,x,y].join("/")+".pbf"
|
||||
encoding: null
|
||||
.then (buffer) =>
|
||||
@_persistTile z, x, y, buffer if @config.persistDownloadedTiles
|
||||
buffer
|
||||
|
||||
promise
|
||||
.then (buffer) =>
|
||||
@_createTile z, x, y, buffer
|
||||
|
||||
@ -72,3 +87,29 @@ module.exports = class TileSource
|
||||
_createTile: (z, x, y, buffer) ->
|
||||
tile = @cache[[z,x,y].join("-")] = new Tile()
|
||||
tile.load buffer
|
||||
|
||||
_initPersistence: ->
|
||||
try
|
||||
@_createFolder userhome ".mapscii"
|
||||
@_createFolder userhome ".mapscii", "cache"
|
||||
catch error
|
||||
@config.persistDownloadedTiles = false
|
||||
return
|
||||
|
||||
_persistTile: (z, x, y, buffer) ->
|
||||
zoom = z.toString()
|
||||
@_createFolder userhome ".mapscii", "cache", zoom
|
||||
fs.writeFile userhome(".mapscii", "cache", zoom, "#{x}-#{y}.pbf"), buffer
|
||||
|
||||
_getPersited: (z, x, y) ->
|
||||
try
|
||||
fs.readFileSync userhome ".mapscii", "cache", z.toString(), "#{x}-#{y}.pbf"
|
||||
catch error
|
||||
false
|
||||
|
||||
_createFolder: (path) ->
|
||||
try
|
||||
fs.mkdirSync path
|
||||
true
|
||||
catch e
|
||||
e.code is "EEXIST"
|
||||
|
Loading…
Reference in New Issue
Block a user