0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

(Node.js) @mapbox/tilebeltモジュールを理解する

Posted at

はじめに

node.jsのコードの中で@mapbox/tilebeltモジュールを使用する機会があったので、どのようなモジュールであるのか簡単にまとめたいと思います。

@mapbox/tilebeltモジュールとは

Mapboxが提供しているJavaScriptモジュールで、地図タイルを扱うための便利な関数が含まれています。

モジュールの主な機能には以下のものがあります。

1.タイル計算:
緯度経度からXYZタイル座標へ変換したり、逆にタイル座標から地理的な境界ボックスに変換したりできます。

2.親子関係の取得:
該当タイルの親タイルを取得したり、タイルを分割して子タイルを生成することができ、地図のズームインやズームアウトの操作に役立ちます。

tileToBBOX()の使用方法

モジュールの中の一つのメソッドであるtileToBBOX()の使用方法の使用方法について解説します。これは、タイル座標から地理的なバウンディングボックス(BBOX)を取得する関数です。タイルは通常、ズームレベルz、x座標、y座標で指定され、地図の特定の領域を表します。tileToBBOX関数を使用すると、そのタイルがカバーする地理的な範囲(バウンディングボックス)を、緯度と経度の座標として得ることができます。

使い方の概要:
引数: [x, y, z] 形式のタイル座標
x: 横方向のタイル座標
y: 縦方向のタイル座標
z: ズームレベル

戻り値: tile がカバーする領域のバウンディングボックス [minLon, minLat, maxLon, maxLat] (最小・最大の経度と緯度)

サンプルコード

tilebelt.js
const tilebelt = require('@mapbox/tilebelt');

const tile = [10, 15, 8]; // x,y,z
const bbox = tilebelt.tileToBBOX(tile);
console.log(bbox);

コードの解説

const tilebelt = require('@mapbox/tilebelt');

@mapbox/tilebeltモジュールをインポートしています。

@mapbox/tilebeltモジュールの最新バージョン2.0.0は、Node.js の標準モジュールシステムである CommonJSでサポートしていないexportキーワードが使用されているようです。そのため、バージョン1.0.2を使用します。CommonJS用に書き直すなどすると、最新版でも動くと思います。

const bbox = tilebelt.tileToBBOX(tile);

tileToBBOXメソッドを呼び出し、指定したタイル座標に基づいてバウンディングボックスを取得しています。この関数は、タイルがカバーする地理的な範囲を表す座標を返します。
バウンディングボックスは、最小の経度、最小の緯度、最大の経度、最大の緯度の4つの値から構成されます。

実行結果

[ -165.9375, 82.67628497834903, -164.53125, 82.8533822917608 ]

[経度の最小値, 緯度の最小値, 経度の最大値, 緯度の最大値]の構成となっています。

まとめ

node.jsの@mapbox/tilebeltモジュールの使用方法についてまとめました。

Reference

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?