>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
JavaScript

地理データの洪水に溺れずにインタラクティブなマップを構築する方法

インタラクティブなマップを追加するタスクがプロジェクトに入ってくると、まずはおなじみの解決策に手を伸ばすのが常です。都市の上にウィジェットを配置してマーカーをいくつかドロップするだけであれば、有名なスクリプトならどれでも対応できます。問題は後からやってきます。突然、バックエンドがGeoJSON形式の重いポリゴンを返してきたり、アナリストが標高等値線を含むラスタータイルをオーバーレイしたいと言ったり、クライアントが標準的なWeb Mercator投影だと高緯度が大きく歪む为由に非標準のマップ投影を要求してきたりします。

このようなデータ量になると、軽量のライブラリの多くは足踏みし始めたり、十個以上のサードパーティプラグインが必要になったりして、更新のたびに互いに衝突し合います。ここでOpenLayersが舞台に登場します。BSD 2-Clauseライセンスの下で最も古いオープンソースのWebマッピングプロジェクトであり、コードベースの完全な書き直しを数回乗り越えて、今日も地理情報システム(GIS)タスクの信頼できる中核的存在であり続けています。

ライブラリの内部構造

プロジェクトのリポジトリはnpmで名前olの下にあります。かつてのOpenLayersの数メガバイトものモノリシックなバンドルを覚えているなら、それは忘れてください。最新のライブラリはESモジュールに分割されています。マップ、レイヤー、データソース、レンダリングメソッドなど、必要な特定のクラスのみをインポートします。Vite、Rollup、Webpack、Parcelなどのバンドラーは、 余計なコードを追加することなく未使用のコードを削除します。

ライブラリアーキテクチャは、レイヤーとソースの明確な分離を中心に構築されています。レイヤーは、画面上のデータのレンダリング方法(ラスター、ベクター、ヒートマップ、タイルグリッド)を担当します。ソースはXYZ、WMS、WMTSプロトコルによるデータのロード、またはGeoJSON、KML、TopoJSON、MVT(Mapbox Vector Tiles)などのフォーマットの解析を処理します。

リポジトリには組み込みのTypeScriptサポートが含まれています。型は自動的に.d.tsファイルとして生成されるため、コード補完と厳格なパラメータチェックが箱から出してすぐに動作します。

マップでのクイックスタート

OpenStreetMapタイルで基本的なマップを立ち上げるには、数行のコードだけで済みます。

パッケージのインストール:

npm install ol

マップインスタンスの作成:

import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import XYZ from 'ol/source/XYZ';

const map = new Map({
  target: 'map-container',
  layers: [
    new TileLayer({
      source: new XYZ({
        url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'
      })
    })
  ],
  view: new View({
    center: [0, 0],
    zoom: 2
  })
});

Viewオブジェクトに注目してください。これはレイヤーから完全に分離されており、中心座標、ズームレベル、回転角度、マップ投影を管理します。2つのマップを隣り合わせに同期させる必要がある場合は、同じViewインスタンスを渡すだけです。

実践においてライブラリを際立たせるもの

コンシューマー向け都市マップに厳密に量身化されたソリューションとは異なり、OpenLayersはエンジニアリングと分析タスクのために設計されました。

任意の投影法への対応

WebではEPSG:3857(球面メルカトル)投影が一般的です。しかし、測地学、地籍管理、地域物流では、UTM系列やPulkovo 1942などのローカル投影法がよく使われます。OpenLayersはproj4jsライブラリとうまく統合されています。投影定義を宣言すれば、ベクターレイヤーのレンダリング時またはラスター要求時に、エンジンが座標をリアルタイムで再計算します。

数十万のベクターオブジェクトへの対応

マップ上に5,000個の交通監視センサーを表示し、毎秒更新する必要がある場合、DOMマーカーはブラウザを完全にフリーズさせます。OpenLayersはCanvasまたはWebGL経由でベクターデータをレンダリングします。各要素のスタイルをプログラムでカスタマイズできます。オブジェクトのプロパティに基づいてポリゴンの色を変更したり、FPS低下なしにポイントを動的にクラスタリングしたりできます。

ジオメトリ編集用の組み込みツール

ライブラリにはインタラクティブな描画と編集用の готовыеクラスが含まれています。ユーザーはブラウザ内で直接ポリゴンを描画したり、ライン頂点を移動したり、定規で距離を測定したりできます。これは組み込みのインタラクションを接続することで行われます:DrawModifySnapSelect

プロバイダーからの解放

特定のサービスのインフラに縛られることはありません。今日ソースは бесплатныйOSMタイルサーバー、明日はWFSプロトコルでプライベート企業のGeoServer、そして翌日は独自のS3ストレージ上のベクタータイルサービスでも構いません。

スポンサーと実際の使用例

プロジェクトのサポートは、ライブラリのの上に商用プラットフォームを構築するコミュニティと企業スポンサーに依存しています:

Pozi logo

Poziサービスは、地方自治体サービスとコミュニティ向けの空間分析を開発しています。

yey'maps logo

クラウドGISスイートyey'mapsは、GDALライブラリと組み合わせてOpenLayers APIを使用しています。

ela-compil logo

ela-compil社は、物理的セキュリティ情報管理(PSIM)システムを構築しています。

Ubigu Oy logo

芬兰の企業Ubigu Oyは、都市計画とインフラ管理のための地理情報システムを実装しています。

Scribble Maps logo

Scribble Mapsコンストラクターは、建築、不動産、物流でのマッピングタスクを処理しています。

直面する課題

力は代償を伴います。OpenLayersはLeafletのような軽量ライブラリよりも学習曲線が急です。連絡先ページでオフィス住所にマーカーをドロップするだけなら、OpenLayersを持ち出す意味はありません。コードが肥大化し、レイヤーや投影の概念が不必要な知的オーバーヘッドになります。

APIドキュメントは詳細ですが、時に 学究的すぎることもあります。ベクターレイヤーにトリッキーなフィルターを適用する方法を理解するには、プロジェクトのウェブサイトの公式サンプルセクションに直接行くのが лучшеです。 сотни рабочихサンドボックスがあります:衛星運動アニメーションから熱画像の一ピクセルごとの分析まで。

複雑なインターフェースを構築する際にはOpenLayersを選択してください:監視ダッシュボード、地籍管理システム、精密農業プラットフォーム、内部物流サービスなど。ライブラリはデータソース、スタイリング、レンダリングを完全に制御できるため、生のCanvasコンテキストの上で独自の回避策を発明する必要から解放されます。

学習を始める 가장簡単な方法は、openlayers.org/workshopの公式ワークショップ、または готовыхViteテンプレートに基づいたテスト環境からです。

関連プロジェクト