mojodna / tl

An alternate command line interface to tilelive
38 stars 12 forks source link

Postgis DB to mbtile conversion - coordinate system issue! #25

Open dhairyashil opened 6 years ago

dhairyashil commented 6 years ago

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?

@mojodna : can you please help me here?

mojodna commented 6 years ago

It's attempting to restrict the resulting bounding box to the minimally-available data. My initial guess is that tilelive-postgis (or whatever is handling the postgis scheme) isn't providing a bounding box.

dhairyashil commented 6 years ago

yes. shall I raise this in tilelive-postgis module issues?

mojodna commented 6 years ago

That'd be great!