Function addGLMarker

  • GLMarkerを1件追加する — 詳細な使用例

    WebGL でレンダリングされる高パフォーマンスなマーカーを地図上に配置します。 独自アイコン画像・ラベル・クリックイベントを持ち、大量配置にも適しています。 複数追加時は addGLMarkers(複数形)を使うほうがパフォーマンス上有利です。 クラスタリングを行う場合は addGLMarkerClusteringCondition と組み合わせてください。


    GLMarker コンストラクタオプション

    オプション 説明
    position GIA.value.LatLng 表示位置
    info GIA.value.GLMarkerIconInfo アイコン画像・サイズの設定
    zIndex number 描画順(大きいほど前面)
    label GIA.types.GLMarkerLabelOptions ラベルテキストとスタイル
    labelZoomRange GIA.value.ZoomRange ラベルを表示するズーム範囲

    GLMarkerIconInfo コンストラクタオプション

    オプション 説明
    icon string アイコン画像パスまたは Base64
    size GIA.value.Size アイコンの表示サイズ(px)

    Returns void

    Warning

    • 複数マーカーを追加する場合は必ず addGLMarkers を使用してください。 1件ずつ addGLMarker を呼ぶとパフォーマンスが低下します。
    • removeGLMarker / removeGLMarkers は追加時と同一インスタンスを渡す必要があります。変数として保持してください。
    • クラスタリング時はマーカーを map.addGLMarkers ではなく condition.addGLMarkers に渡してください。

    Example: 単体マーカーを追加してクリックイベントを取得する

    import * as GIA from '@ntj/gaia';

    const info = new GIA.value.GLMarkerIconInfo({
    icon: 'path/to/marker.png',
    size: new GIA.value.Size(46, 33),
    });

    const marker = new GIA.object.GLMarker({
    position: new GIA.value.LatLng(35.6812, 139.7671),
    info,
    zIndex: 1000,
    });

    marker.addEventListener('click', () => {
    console.log('クリックされたマーカーの位置:', marker.getPosition());
    });

    map.addGLMarker(marker);

    // 位置更新
    marker.setPosition(new GIA.value.LatLng(35.69, 139.70));

    // 表示 / 非表示切り替え
    marker.hide();
    marker.show();

    // 削除
    map.removeGLMarker(marker);

    Example: 複数マーカーを管理する(倒济管理パターン)

    import * as GIA from '@ntj/gaia';

    const info = new GIA.value.GLMarkerIconInfo({
    icon: 'path/to/pin.png',
    size: new GIA.value.Size(46, 33),
    });

    let markers: GIA.object.GLMarker[] = [];

    // 表示: 前回のマーカーを削除してから再追加
    const showMarkers = (coords: Array<{ lat: number; lon: number }>) => {
    map.removeGLMarkers(markers);
    markers = [];

    for (const coord of coords) {
    const marker = new GIA.object.GLMarker({
    position: new GIA.value.LatLng(coord.lat, coord.lon),
    info,
    zIndex: 1000,
    });
    markers.push(marker);
    }

    map.addGLMarkers(markers); // まとめて追加(パフォーマンス推奨)
    };

    // 非表示
    const hideMarkers = () => {
    map.removeGLMarkers(markers);
    markers = [];
    };

    Example: `setProperties` でマーカーにメタデータを持たせてクリック時に取り出す

    import * as GIA from '@ntj/gaia';

    type SpotData = { name: string; id: number };

    const marker = new GIA.object.GLMarker({
    position: new GIA.value.LatLng(35.6581, 139.7016),
    info,
    });

    // マーカーにプロパティがセットできる
    marker.setProperties<SpotData>({ name: '東京タワー', id: 42 });

    marker.addEventListener('click', () => {
    const data = marker.getProperties<SpotData>();
    console.log('クリックされたスポット:', data?.name);
    });

    map.addGLMarker(marker);

    Example: ラベル付きマーカーを追加する

    import * as GIA from '@ntj/gaia';

    const labelStyle: GIA.types.GLMarkerLabelStyle = {
    fontSize: '12px',
    fontWeight: 'bold',
    color: '#FFFFFF',
    backgroundColor: '#88888888',
    };

    const marker = new GIA.object.GLMarker({
    position: new GIA.value.LatLng(35.6812, 139.7671),
    info,
    label: {
    content: '東京駅',
    offset: new GIA.value.Point(24, 4),
    style: labelStyle,
    },
    labelZoomRange: new GIA.value.ZoomRange(14, 24),
    });

    map.addGLMarker(marker);

    See