| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import {BaseImporterPlugin, Importer, LoadingManager, ThreeViewer} from 'threepipe'
- // @ts-expect-error moduleResolution issue
- import {XYZTilesPlugin} from '3d-tiles-renderer/plugins'
- import {TilesRendererLoader, TilesRendererPlugin} from './TilesRendererPlugin'
-
- /**
- * Adds support for loading slippy map tiles(OpenStreetMap) in png format
- * https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
- */
- export class SlippyMapTilesLoadPlugin extends BaseImporterPlugin {
- public static readonly PluginType = 'SlippyMapTilesLoadPlugin'
- static readonly DUMMY_EXT = 'xyztiles'
- protected _importer = new Importer(SlippyMapTilesLoader, [SlippyMapTilesLoadPlugin.DUMMY_EXT], [], false)
-
- dependencies = [TilesRendererPlugin]
-
- onAdded(viewer: ThreeViewer) {
- super.onAdded(viewer)
- this._importer.onCtor = (l, ai) => {
- if (l) l.ai = ai
- return l
- }
- }
- }
-
- export class SlippyMapTilesLoader extends TilesRendererLoader {
- constructor(manager: LoadingManager) {
- super(manager)
- this.plugins.push(
- (opts)=>{
- if (opts?.XYZTilesPlugin === false) return undefined
- const op = typeof opts?.XYZTilesPlugin === 'object' ? opts.XYZTilesPlugin : {}
- return new XYZTilesPlugin(op)
- },
- )
- }
- }
-
- declare module 'TilesRendererPlugin'{
- interface TilesImportOptions {
- XYZTilesPlugin?: boolean | {
- levels: number // default = 20,
- tileDimension: number // default = 256,
- pixelSize: number // default = 1e-5,
- center?: boolean,
- projection?: 'ellipsoid' | 'planar',
- useRecommendedSettings?: boolean,
- }
- }
- }
|