mirror of
https://github.com/rastapasta/mapscii.git
synced 2024-11-25 17:43:57 +01:00
🔍 adapting label decluttering to centered labels
This commit is contained in:
parent
d3e2961184
commit
1effed33d9
@ -38,8 +38,9 @@ No web browser around? No worries - discover the planet in your console!
|
|||||||
* [`vector-tile-js`](https://github.com/mapbox/vector-tile-js) for [VectorTile](https://github.com/mapbox/vector-tile-spec/tree/master/2.1) parsing
|
* [`vector-tile-js`](https://github.com/mapbox/vector-tile-js) for [VectorTile](https://github.com/mapbox/vector-tile-spec/tree/master/2.1) parsing
|
||||||
|
|
||||||
#### Juggling the vectors and numbers
|
#### Juggling the vectors and numbers
|
||||||
* [`pnltri`](https://github.com/jahting/pnltri.js) for polygon triangulation to draw them filled
|
* [`pnltri`](https://github.com/jahting/pnltri.js) for polygon triangulation to draw 'em filled
|
||||||
* [`rbush`](https://github.com/mourner/rbush) for 2D spatial indexing based label and mouse collision detection
|
* [`rbush`](https://github.com/mourner/rbush) for 2D spatial indexing based label and mouse collision detection
|
||||||
|
* [`gl-matrix`](https://github.com/toji/gl-matrix) for vector and matrix operations
|
||||||
* [`sphericalmercator`](https://github.com/mapbox/node-sphericalmercator) for [EPSG:3857](http://spatialreference.org/ref/sr-org/6864/) <> [WGS84](http://spatialreference.org/ref/epsg/wgs-84/) conversions
|
* [`sphericalmercator`](https://github.com/mapbox/node-sphericalmercator) for [EPSG:3857](http://spatialreference.org/ref/sr-org/6864/) <> [WGS84](http://spatialreference.org/ref/epsg/wgs-84/) conversions
|
||||||
|
|
||||||
### TODOs
|
### TODOs
|
||||||
@ -51,12 +52,14 @@ No web browser around? No worries - discover the planet in your console!
|
|||||||
* [x] support for point labels
|
* [x] support for point labels
|
||||||
* [x] dynamic decluttering of labels
|
* [x] dynamic decluttering of labels
|
||||||
* [x] centering text labels
|
* [x] centering text labels
|
||||||
|
* [ ] clipping fix when x<0 after repositioning
|
||||||
* [ ] multi line label
|
* [ ] multi line label
|
||||||
* [ ] label margin to avoid POI overlap?
|
* [ ] label margin to avoid POI overlap?
|
||||||
* [ ] translatable raster fonts
|
* [ ] translatable raster fonts
|
||||||
* [x] filled polygons
|
* [x] filled polygons
|
||||||
* [x] convert polygons to triangles
|
* [x] convert polygons to triangles
|
||||||
* [x] implement fillTriangle into drawille-canvas-blessed-contrib
|
* [x] implement fillTriangle into drawille-canvas-blessed-contrib
|
||||||
|
* [ ] respect fill/line style file based setting
|
||||||
* [ ] lat/lng-center + zoom based viewport
|
* [ ] lat/lng-center + zoom based viewport
|
||||||
* [ ] bbox awareness
|
* [ ] bbox awareness
|
||||||
* [ ] zoom -> scale calculation
|
* [ ] zoom -> scale calculation
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"coffee-script": "^1.10.0",
|
"coffee-script": "^1.10.0",
|
||||||
"drawille-canvas-blessed-contrib": "git+https://github.com/rastapasta/drawille-canvas-blessed-contrib.git",
|
"drawille-canvas-blessed-contrib": "git+https://github.com/rastapasta/drawille-canvas-blessed-contrib.git",
|
||||||
|
"gl-matrix": "^2.3.2",
|
||||||
"keypress": "^0.2.1",
|
"keypress": "^0.2.1",
|
||||||
"pbf": "^3.0.0",
|
"pbf": "^3.0.0",
|
||||||
"pnltri": "^2.1.1",
|
"pnltri": "^2.1.1",
|
||||||
|
@ -7,7 +7,35 @@
|
|||||||
###
|
###
|
||||||
|
|
||||||
BlessedCanvas = require 'drawille-canvas-blessed-contrib'
|
BlessedCanvas = require 'drawille-canvas-blessed-contrib'
|
||||||
|
vec2 = require('gl-matrix').vec2
|
||||||
|
|
||||||
module.exports = class Canvas extends BlessedCanvas
|
module.exports = class Canvas extends BlessedCanvas
|
||||||
fillText: (text, x, y, size=1) ->
|
|
||||||
super text, x-text.length, y
|
# bresenham: (from, to) ->
|
||||||
|
# points = []
|
||||||
|
# adx = Math.abs dx = to.x - from.x
|
||||||
|
# ady = Math.abs dy = to.y - from.y
|
||||||
|
# eps = 0
|
||||||
|
# sx = if dx > 0 then 1 else -1
|
||||||
|
# sy = if dy > 0 then 1 else -1
|
||||||
|
#
|
||||||
|
# [x, y] = from
|
||||||
|
# if adx > ady
|
||||||
|
# while if sx < 0 then x >= x1 else x <= x1
|
||||||
|
# points.add x:, y: y
|
||||||
|
# eps += ady
|
||||||
|
# if eps<<1 >= adx
|
||||||
|
# y += sy
|
||||||
|
# eps -= adx
|
||||||
|
#
|
||||||
|
# x += sx
|
||||||
|
# else
|
||||||
|
# while if sy < 0 then y >= y1 else y <= y1
|
||||||
|
# fn(x, y);
|
||||||
|
# eps += adx;
|
||||||
|
# if eps<<1 >= ady
|
||||||
|
# x += sx;
|
||||||
|
# eps -= ady;
|
||||||
|
#
|
||||||
|
# y += sy
|
||||||
|
# arr
|
||||||
|
@ -296,8 +296,9 @@ class Termap
|
|||||||
# TODO: check in definition if points can actually own multiple geometries
|
# TODO: check in definition if points can actually own multiple geometries
|
||||||
for points in toDraw
|
for points in toDraw
|
||||||
for point in points
|
for point in points
|
||||||
if @labelBuffer.writeIfPossible text, point.x, point.y
|
x = point.x - text.length
|
||||||
@canvas.fillText text, point.x, point.y
|
if @labelBuffer.writeIfPossible text, x, point.y
|
||||||
|
@canvas.fillText text, x, point.y
|
||||||
wasDrawn = true
|
wasDrawn = true
|
||||||
|
|
||||||
wasDrawn
|
wasDrawn
|
||||||
|
Loading…
Reference in New Issue
Block a user