import DemProvider from "./DemProvider"; /** * @summary クラウド DEM プロバイダ * @memberof mapray * @extends mapray.DemProvider */ class CloudDemProvider extends DemProvider { /** * @param {string} api_key API キーの文字列 */ constructor( api_key ) { super(); this._headers = { 'X-Api-Key': api_key }; } /** * @override */ requestTile( z, x, y, callback ) { var actrl = new AbortController(); fetch( this._makeURL( z, x, y ), { headers: this._headers, signal: actrl.signal } ) .then( response => { return response.ok ? response.arrayBuffer() : Promise.reject( Error( response.statusText ) ); } ) .then( buffer => { // データ取得に成功 callback( buffer ); } ) .catch( () => { // データ取得に失敗または取り消し callback( null ); } ); return actrl; } /** * @override */ cancelRequest( id ) { var actrl = id; // 要求 ID を AbortController に変換 actrl.abort(); // 取り消したので要求を中止 } /** * URL を作成 * @private */ _makeURL( z, x, y ) { return 'https://tiles.mapray.com/dem/' + z + '/' + x + '/' + y + '.bin'; } } export default CloudDemProvider;