threepipe
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

SlippyMapTilesLoadPlugin.ts 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import {BaseImporterPlugin, Importer, LoadingManager, ThreeViewer} from 'threepipe'
  2. // @ts-expect-error moduleResolution issue
  3. import {XYZTilesPlugin} from '3d-tiles-renderer/plugins'
  4. import {TilesRendererLoader, TilesRendererPlugin} from './TilesRendererPlugin'
  5. /**
  6. * Adds support for loading slippy map tiles(OpenStreetMap) in png format
  7. * https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
  8. */
  9. export class SlippyMapTilesLoadPlugin extends BaseImporterPlugin {
  10. public static readonly PluginType = 'SlippyMapTilesLoadPlugin'
  11. static readonly DUMMY_EXT = 'xyztiles'
  12. protected _importer = new Importer(SlippyMapTilesLoader, [SlippyMapTilesLoadPlugin.DUMMY_EXT], [], false)
  13. dependencies = [TilesRendererPlugin]
  14. onAdded(viewer: ThreeViewer) {
  15. super.onAdded(viewer)
  16. this._importer.onCtor = (l, ai) => {
  17. if (l) l.ai = ai
  18. return l
  19. }
  20. }
  21. }
  22. export class SlippyMapTilesLoader extends TilesRendererLoader {
  23. constructor(manager: LoadingManager) {
  24. super(manager)
  25. this.plugins.push(
  26. (opts)=>{
  27. if (opts?.XYZTilesPlugin === false) return undefined
  28. const op = typeof opts?.XYZTilesPlugin === 'object' ? opts.XYZTilesPlugin : {}
  29. return new XYZTilesPlugin(op)
  30. },
  31. )
  32. }
  33. }
  34. declare module 'TilesRendererPlugin'{
  35. interface TilesImportOptions {
  36. XYZTilesPlugin?: boolean | {
  37. levels: number // default = 20,
  38. tileDimension: number // default = 256,
  39. pixelSize: number // default = 1e-5,
  40. center?: boolean,
  41. projection?: 'ellipsoid' | 'planar',
  42. useRecommendedSettings?: boolean,
  43. }
  44. }
  45. }