chiitilerに正式にLibrary Modeを追加した

updated at: 2024/8/18 1:06:08(JST)
twitter
MapLibreNode.js

Screenshot2024-08-18at0.20.14.png

はじめに

chiitilerをライブラリとして使えるようにしたという話。npm install chiitilerで使えるよ。

背景

https://spatialty-io.github.io/chiitiler-demo/?stylename=gsi-std#10.35/42.9456/141.4065/-30.4/60

こちらで公開しているタイルサーバーを運用している訳だが、直近まではchiitilerをマイクロサービスとして動かし、前段にBFFのような層を配置するような作りだった。これは、chiitilerは直接外部に晒せるようなサーバーではないためである(指定したURLのデータをダウンロードさせられてしまうので、悪意あるリクエストに完全に脆弱)。ただ、どちらもLambdaで動かしている都合上、無駄にリクエスト数・実行時間が発生することになる。

BFF層でもHonoでサーバーを書いているので、この二重構造は明らかに無駄である。なので、chiitilerの本質部分ーMapLibre Styleのレンダリングを行う関数をexposeすることにした。

使い方

import {
    getRenderedBboxBuffer,
    getRenderedTileBuffer,
    ChiitilerCache
} from 'chiitiler';

const s3Cache = ChiitilerCache.s3Cache({
    bucket: 'chiitiler',
    region: 'ap-northeast-1',
    endpoint: null,
});
// credentials are loaded from environment variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

const tileBuf = await getRenderedTileBuffer({
    stylejson: 'https://example.com/style.json', // or StyleSpecification object
    z: 0,
    x: 0,
    y: 0,
    tileSize: 512,
    ext: 'webp', // png, webp, jpg
    cache: s3Cache,
    quality: 80,
    margin: 0,
});

const bboxBuf = await getRenderedBboxBuffer({
    stylejson: 'file://path/to/style.json', // or StyleSpecification object
    bbox: [123.4, 34.5, 124.5, 35.6],
    size: 1024,
    cache: s3Cache,
    ext: 'webp',
    quality: 80,
});

// return value is Buffer - binary of each image

キャッシュはs3Cacheのほか、fileCache、memoryCache、noneCacheとある。ドキュメントはイマイチ整備されていない。
ただし、MapLibre Nativeはランタイムの依存モジュールが結構重たいので、注意が必要である。

© Spatialty.io All rights reserved.