mapbox / mapbox/tilelive

Postgis DB to mbtile conversion - coordinate system issue!

Open
#204 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
540
Forks
106
PR merge metrics
No merged PRs in 30d

Description

I am trying to run below command.

tl copy "postgis://username:password@host_id:5432/test?table=schema.lines&geometry_field=geom&srid=3857&layerName=road" "mbtiles://./belgium-tiles.mbtiles" -z 1 -Z 22 -b "2 49 6 52"

But while executing it, I am getting below error:


"C:\Program Files\JetBrains\WebStorm 2017.2.5\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\bin\tl.js copy postgis://journaldb:journaldb@insrvut-cpp01:5433/raah?table=tileserver_test.lines&geometry_field=geom&srid=3857&layerName=road mbtiles://./belgium-tiles.mbtiles -z 1 -Z 22 -b "2 49 6 52"
C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\node_modules\tilelive-streaming\lib\scanlinescheme.js:45
    if (options.bbox[0] > options.bbox[2]) throw new Error('bbox is invalid');
                                           ^

Error: bbox is invalid
    at new ScanlineScheme (C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\node_modules\tilelive-streaming\lib\scanlinescheme.js:45:50)
    at Function.Scheme.create (C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\node_modules\tilelive-streaming\lib\scheme.js:52:12)
    at C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\node_modules\tilelive-streaming\index.js:161:21
    at Immediate.<anonymous> (C:\Users\bankard\AppData\Roaming\npm\node_modules\tl\node_modules\locking-cache\index.js:73:25)
    at runCallback (timers.js:672:20)
    at tryOnImmediate (timers.js:645:5)
    at processImmediate [as _immediateCallback] (timers.js:617:5)

While debugging I have found that
in file tilelive-streaming/index.js

  var restrict = function(info, by) {
  info = applyConfigDefaults(info);
  by = applyConfigDefaults(by);

  // restrict the options according to known restrictions
  info.minzoom = Math.max(info.minzoom, by.minzoom);
  info.maxzoom = Math.min(info.maxzoom, by.maxzoom);
  info.bounds[0] = Math.max(info.bounds[0], by.bounds[0]);
  info.bounds[1] = Math.max(info.bounds[1], by.bounds[1]);
  info.bounds[2] = Math.min(info.bounds[2], by.bounds[2]);
  info.bounds[3] = Math.min(info.bounds[3], by.bounds[3]);

  return info;
};

this code is actually changing bounding boxes. and replacing it by bounding boxes provided in by object. Can anybody help me to understand from where it is actually computing by 's value and what am I doing wrong in sending parameters?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with tilelive-streaming/index.js, especially restrict, and trace the copy command into scheme creation in tilelive-streaming/lib/scanlinescheme.js. Follow how the by options are built from the supplied -b and source bounds, then reproduce the command and document or test the expected bounding-box validation behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, postgresql
Domain
cli, databases
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.