Maplat は、クールな古地図/絵地図ビューアー API です。 各地図の座標を非線形かつ同相な投影で変換し、元の地図を歪めることなく、GPS/正確な地図と連携させることを可能にします。 これは Maplat プロジェクトの一部です。
English version is here.
- Node.js: バージョン 20 または 22 (CI でテスト済み)
- pnpm: バージョン 9 以上
- 必須ライブラリ: OpenLayers (MaplatCoreのアーキテクチャ上必須)
- オプションライブラリ: MapLibre GL JS または Mapbox GL JS (ベクタータイル機能等を使用する場合)
ES Modules と CDN を使用して、ブラウザで直接 MaplatCore を使用できます。 OpenLayers の CSS と JS を必ず読み込んでください。
<!-- OpenLayers CSS (必須) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@latest/ol.css" />
<!-- OpenLayers JS (必須) -->
<script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script>
<script type="module">
import { MaplatApp } from 'https://cdn.jsdelivr.net/npm/@maplat/core@latest/dist/maplat_core.js';
// ... 使用法
</script>pnpm 経由でインストールします (推奨):
pnpm add @maplat/coreまたは npm:
npm install @maplat/coreMaplatCore が動作するためには OpenLayers が厳密に必要です。Mapbox GL JS および MapLibre GL JS は、ベクタータイルサポートなどのためのオプション拡張です。
OpenLayers は MaplatCore のアーキテクチャ上必須です。インストールし、CSSもインポートする必要があります。
pnpm:
pnpm add olCDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@latest/ol.css" />
<script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script>Mapbox ベクタータイルを使用する場合のみ必要です。
pnpm:
pnpm add mapbox-glCDN:
<link href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.6.1/mapbox-gl.css" rel="stylesheet" />
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v1.6.1/mapbox-gl.js"></script>注意: Mapbox GL JS にはアクセストークンが必要です。mapboxToken オプション経由で提供してください。
MapLibre ベクタータイルを使用する場合のみ必要です。
pnpm:
pnpm add maplibre-glCDN:
<link href="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.css" rel="stylesheet" />
<script src="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.js"></script>- フェーズや uiHooks については
docs/ui-core-lifecycle.ja.mdを参照してください。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<!-- OpenLayers CSS は必須です -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@latest/ol.css" />
<!-- オプション: MapLibre GL JS -->
<link href="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.css" rel="stylesheet" />
<script src="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.js"></script>
</head>
<body>
<div id="map_div" style="width: 100%; height: 100vh;"></div>
<!-- OpenLayers JS は必須です -->
<script src="https://cdn.jsdelivr.net/npm/ol@latest/dist/ol.js"></script>
<script type="module">
import { MaplatApp } from 'https://cdn.jsdelivr.net/npm/@maplat/core@latest/dist/maplat_core.js';
const option = {
maplibregl: maplibregl, // 使用する場合のみ注入
// mapboxgl: mapboxgl,
// mapboxToken: 'YOUR_ACCESS_TOKEN',
startFrom: 'gsi', // 初期地図 ID
div: 'map_div' // ターゲット div ID (オプション、デフォルトは 'map_div')
};
MaplatApp.createObject(option).then(function(app){
console.log('Maplat initialized', app);
});
</script>
</body>
</html>import { MaplatApp } from '@maplat/core';
import 'ol/ol.css'; // 必須: OpenLayers CSS
// オプション: 必要に応じて MapLibre 等をインポート
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
const option = {
maplibregl: maplibregl, // オプション
startFrom: 'gsi',
};
MaplatApp.createObject(option).then((app) => {
console.log('Maplat initialized', app);
});currentMapInfo(): object- 現在アクティブな地図の情報を取得します。
mapInfo(mapID: string): object- 指定した ID の地図情報を取得します。
changeMap(mapID: string, restore?: object): Promise<void>- 別の地図に切り替えます。
restoreオブジェクトで初期位置 (x, y, zoom, rotation) を指定できます。
- 別の地図に切り替えます。
requestUpdateState(data: object): Promise<void>- 地図の状態(位置、透過度など)の更新をリクエストします。
clientPointToLngLat(clientX: number, clientY: number): [number, number]- 画面座標(ビューポートに対するピクセル)を 経度/緯度 に変換します。
lngLatToClientPoint(lng: number, lat: number): [number, number]- 経度/緯度 を画面座標に変換します。
addMarker(data: object, clusterId?: string): void- マーカーを追加します。
dataにはlng,lat,name,desc(説明),iconなどを含める必要があります。 clusterIdはマーカーを追加するレイヤーを指定します(例: 'main' または特定の地図レイヤー)。
- マーカーを追加します。
removeMarker(id: string): void- ID を指定して特定のマーカーを削除します (例: 'main_1')。
updateMarker(id: string, data: object, overwrite?: boolean): void- 既存のマーカーのデータを更新します (例: 位置の移動)。
clearMarker(clusterId?: string): void- 特定のクラスター/レイヤーからすべてのマーカーを削除します。
selectMarker(id: string): void- プログラムでマーカーを選択(ハイライト)します。
unselectMarker(): void- 現在選択されているマーカーを非選択にします。
getMarker(id: string): object- 特定のマーカーのデータを取得します。
setMarker(data: object): void- マーカーを一括追加/設定します。初期化や大量更新に便利です。
showAllMarkers(): void- すべてのマーカーを表示します。
hideAllMarkers(): void- すべてのマーカーを非表示にします。
addLine(data: object): void- ラインフィーチャを追加します。 data:
{ lnglats: [[lng, lat], ...], stroke: { color: '#...', width: 2 } }
- ラインフィーチャを追加します。 data:
addVector(data: object): void- ポリゴン/ベクターフィーチャを追加します (GeoJSON 互換)。
setLine(data: object): void/setVector(data: object): void- ライン/ベクターを一括設定します。
resetLine()/resetVector()/resetMarker()- 基本的なライン/ベクター/マーカーをクリアしてリセットします(デフォルトレイヤーなどで使用)。
clearLine()/clearVector()- すべてのライン/ベクターをクリアします。
Maplat はマーカーを「レイヤー」で管理します。
addPoiLayer(id: string, data: object): void- 新しい POI レイヤーを作成します。
dataでデフォルトアイコンなどを定義できます。
- 新しい POI レイヤーを作成します。
showPoiLayer(id: string): void- 特定のレイヤーを表示します。
hidePoiLayer(id: string): void- 特定のレイヤーを非表示にします。
listPoiLayers(hideOnly?: boolean, nonzero?: boolean): string[]- 利用可能なレイヤー ID のリストを取得します。
handleGPS(enable: boolean): void- GPS トラッキングをオンまたはオフにします。
getGPSEnabled(): boolean- GPS トラッキングが現在アクティブかどうかを確認します。
setGPSMarker(position: object): void- GPS マーカーの位置を手動で更新します(通常、GPS がオンの場合は自動的に処理されます)。
app.addEventListener(type, callback) を使用してイベントを処理します。
clickMarker: マーカーがクリックされたときに発火します。evt.detailにマーカーデータが含まれます。clickMap: 地図の背景がクリックされたときに発火します。gps_result: GPS 位置更新があったときに発火します。gps_error: GPS が失敗したときに発火します。
MaplatApp.createObject(option).then(function(app){
// 現在の地図情報を表示
console.log(app.currentMapInfo());
// イベントリスナー
app.addEventListener('clickMarker', function(evt) {
console.log('Marker clicked:', evt.detail);
app.selectMarker(evt.detail.namespaceID);
});
// カスタムマーカーを追加
app.addMarker({
lng: 141.1501111,
lat: 39.69994722,
name: "盛岡城",
desc: "盛岡の史跡",
icon: "parts/blue_marker.png"
}, 'main'); // 'main' はデフォルトレイヤー
});# Lint 実行
pnpm run lint
# 型チェック実行
pnpm run typecheck
# ユニットテスト実行
pnpm test
# E2E テスト実行
pnpm run test:e2e# ライブラリのビルド
pnpm run build
# 開発デモのビルド
pnpm run build:demo
# 開発サーバーの実行
pnpm run devCopyright (c) 2019-2026 Kohei Otsuka, Code for History
MaplatCore は Maplat Limited License (Apache 2.0 をベースにいくつかの制限を加えたもの) の下で提供されています。 詳細は LICENSE ファイルをご覧ください。