mbtile.service.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { Provide, Inject } from '@midwayjs/decorator';
  2. import { SqliteDataSourceManager } from '../manager/sqliteDataSourceManager';
  3. import { DataSourceEntity } from '../entity/sys/data_source';
  4. import { InjectEntityModel } from '@midwayjs/typeorm';
  5. import { Repository } from 'typeorm';
  6. import * as MBTiles from '@mapbox/mbtiles';
  7. import { resolve } from 'path';
  8. @Provide()
  9. export class mbTileService {
  10. @Inject()
  11. sqliteDataSourceManager: SqliteDataSourceManager;
  12. @InjectEntityModel(DataSourceEntity)
  13. dataSourceEntity: Repository<DataSourceEntity>;
  14. async getMbTiles(t, z, x, y) {
  15. //获取数据库的配置地址
  16. const dataTableSource = await this.dataSourceEntity.findOne({
  17. where: { name: t },
  18. });
  19. const mbtilesLocation = resolve(dataTableSource.database);
  20. try {
  21. return new Promise((resolve, reject) => {
  22. new MBTiles(mbtilesLocation, (err, mbtiles) => {
  23. if (err) reject(err);
  24. mbtiles.getTile(
  25. Number(z),
  26. Number(x),
  27. (1 << Number(z)) - 1 - Number(y),
  28. (err, tile, headers) => {
  29. if (err) {
  30. reject('Tile rendering error: ' + err + '\n');
  31. } else {
  32. console.log(z);
  33. resolve(tile);
  34. }
  35. }
  36. );
  37. });
  38. }).then(value => {
  39. return value;
  40. });
  41. } catch (error) {
  42. console.log('error:!!!' + error);
  43. return '';
  44. }
  45. }
  46. }