Skip to content
niryuu edited this page May 25, 2026 · 1 revision

ハードコード定数の完全リスト

embed-core 切り出し / embed 書き直しの際にこれら全てを再現する必要がある。値を変更してよいか判断するために、定義箇所だけでなく外部仕様(サーバ/CDN)に依存しているかを併記する。

参照箇所はすべて現在の master を grep して確認済み。Verification 時にもう一度突き合わせること。

1. ホスト名・URL prefix

用途 定義箇所 外部仕様?
tileserver.geolonia.com ベクトルタイルサーバ (基準) util.ts:44, geolonia-map.ts:144, geolonia-map.ts:156 Yes (サーバ側合意)
*.tiles.geolonia.com (ホスト suffix .tiles.geolonia.com) ベクトルタイルサーバ (サブドメイン版。osm.v2/osm.v3 等) util.ts:45 Yes
tileserver-dev.geolonia.com dev stage の tileserver geolonia-map.ts:157 Yes
https://cdn.geolonia.com/style/ スタイル CDN prefix util.ts:226, util.ts:228, util.ts:269, util.ts:271, keyring.ts:109 Yes
https://api.geolonia.com/ API ルート (/{stage}/sources, /{stage}/sprites/) keyring.ts:110, geolonia-map.ts:131, geolonia-map.ts:167, parse-atts.ts:59 Yes
https://cdn.geolonia.com/logo/geolonia-symbol_1.png GeoloniaControl ロゴ画像 controls/geolonia-control.ts:11 Yes (ブランド)
https://geolonia.com/ GeoloniaControl リンク先 controls/geolonia-control.ts:22 Yes (ブランド)

「外部仕様」= サーバ・CDN 側の URL 体系と合意済み。embed 側で勝手に変えるとリクエストが届かない。

2. デフォルト値 (EmbedAttributes)

parse-atts.ts:33-66 に集約。data-* 属性が無いときの fallback。

属性 デフォルト 備考
lat, lng, zoom, bearing, pitch 0 数値型は parseFloat で読まれる
hash 'off' 'on' で URL hash に同期
marker 'on'
markerColor '#E4402F' Geolonia 赤。geolonia-marker.ts:40 にも同じ literal あり (重複)
openPopup 'off'
customMarker '' CSS selector
customMarkerOffset '0, 0' parse-atts.ts:44 の literal、後で .split(/,/) で分解
gestureHandling params.interactive === false のときのみ 'off'、それ以外 'on' parse-atts.ts:45
navigationControl params.interactive === false のときのみ 'off'、それ以外 'on' parse-atts.ts:46
geolocateControl 'off'
fullscreenControl 'off'
scaleControl 'off'
geoloniaControl 'on'
geojson ''
simpleVector ''
cluster 'on'
clusterColor '#ff0000' simplestyle.ts:33 にも literal あり (重複)
style 'geolonia/basic-v2' parse-atts.ts:30,55 の 2 箇所に同じ literal
lang getLang() の結果 ('ja' または 'en')、data-lang="auto" 時のみ navigator から判定 parse-atts.ts:16-25
plugin 'off' 未使用
key keyring.apiKey parse 済み API key
apiUrl `https://api.geolonia.com/${keyring.stage}` template 結合
stage keyring.stage 'v1' または 'dev'
loader 'on'
minZoom '' (空文字 = 未指定) getOptions で `Number(...) === 0
maxZoom 20
'3d' '' キー名はリテラル '3d' (識別子と区別)

3. SimpleStyle / SimpleStyleVector 色定数

simplestyle.ts:8-11 / simplestyle-vector.ts:7-10両方に同名定数が独立に定義されている (DRY 違反、移植時に統一可能)。

定数 用途
textColor '#000000' テキスト塗り
textHaloColor '#FFFFFF' テキストハロー
backgroundColor 'rgba(255, 0, 0, 0.4)' fill / circle 既定
strokeColor '#FFFFFF' stroke 既定

4. SimpleStyle (GeoJSON 版) のレイヤ / ソース ID

options.id のデフォルトは 'geolonia-simple-style' (simplestyle.ts:30)。レイヤ ID は次の通り (${id}-... の形):

ID 種別
geolonia-simple-style source (type: 'geojson', ポリゴンと線)
geolonia-simple-style-points source (type: 'geojson', ポイント + cluster)
geolonia-simple-style-polygon layer (type: 'fill')
geolonia-simple-style-polygon-symbol layer (type: 'symbol')
geolonia-simple-style-linestring layer (type: 'line')
geolonia-simple-style-linestring-symbol layer (type: 'symbol')
geolonia-simple-style-circle-points layer (type: 'circle')
geolonia-simple-style-symbol-points layer (type: 'symbol')
geolonia-simple-style-clusters layer (type: 'circle')
geolonia-simple-style-cluster-count layer (type: 'symbol')

注意: 同一マップに複数 SimpleStyle インスタンスを生成すると ID 衝突。

5. SimpleStyleVector (ベクトルタイル版) のレイヤ / ソース ID

simplestyle-vector.ts:16sourceName = 'vt-geolonia-simple-style' を固定。

ID 種別
vt-geolonia-simple-style source (type: 'vector')
vt-geolonia-simple-style-polygon-symbol layer
vt-geolonia-simple-style-linestring-symbol layer
vt-geolonia-simple-style-polygon layer
vt-geolonia-simple-style-linestring layer
vt-circle-simple-style-points layer (prefix が vt-circle- で他とずれる: simplestyle-vector.ts:170)
vt-geolonia-simple-style-points layer

source-layer: 'g-simplestyle-v1' をすべてのレイヤで指定 (simplestyle-vector.ts:67,91,125,147,173,195)。これはサーバ側のベクトルタイル仕様に依存する。

6. SimpleStyle GeoJSON properties 規約

GeoJSON Feature の properties で意味を持つキー (simplestyle.ts / simplestyle-vector.ts のスタイル式から逆引き):

プロパティ 用途 既定値
marker-color string (色) ポイントの円塗り 'rgba(255, 0, 0, 0.4)'
marker-size 'small' / 'large' / その他 円半径とテキストオフセット デフォルト分岐 (9 / 1.2)
marker-symbol string (アイコン ID) icon-image (なし → circle レイヤ表示)
fill string (色) ポリゴン塗り backgroundColor
fill-opacity number ポリゴン透明度 1.0
stroke string (色) 線色 / 円の枠 strokeColor (線色は backgroundColor)
stroke-width number 線幅 2 (線), 1 (円枠)
stroke-opacity number 線透明度 1.0
text-color string (色) テキスト塗り textColor
text-halo-color string (色) テキストハロー textHaloColor
title string ラベル (なし)
description string (HTML) ポップアップ (なし — クリック無視)

descriptionsanitize-html でフィルタしてから innerHTML に挿入 (util.ts:394-403)。許可タグ: sanitize-html の defaults + 'img'、全要素で 'class' 属性許可。

marker-size のマッピング (simplestyle.ts:220-225):

  • 'small'circle-radius: 7text-radial-offset: 1
  • 'large'circle-radius: 13text-radial-offset: 1.6
  • その他 → circle-radius: 9text-radial-offset: 1.2

vector 版では text-offset に変わる (simplestyle-vector.ts:213-220):

  • 'small'[0, 1]
  • 'large'[0, 1.6]
  • その他 → [0, 1.2]

7. 描画パラメータ (cluster / popup / fitBounds)

用途 場所
clusterMaxZoom: 14 クラスタ展開閾値 simplestyle.ts:91
clusterRadius: 50 クラスタ半径 (px) simplestyle.ts:92
クラスタ円 circle-radius: 20 クラスタ表示半径 (固定) simplestyle.ts:321
クラスタ count text-size: 14 カウント文字サイズ simplestyle.ts:334
通常 text-size: 12 レイヤ文字サイズ 多数
text-max-width: 12 テキスト折り返し 多数
text-halo-width: 1 テキストハロー幅 多数
text-font: ['Noto Sans Regular'] フォント名 simplestyle.ts:111,135,252,335, simplestyle-vector.ts:80,104,209
localIdeographFontFamily: 'sans-serif' maplibre option (CJK ローカル fallback) util.ts:294
fitBounds duration: 3000 アニメ時間 (ms) simplestyle.ts:152
fitBounds padding: 30 余白 (px) simplestyle.ts:153, simplestyle-vector.ts:50
fitBounds (vector, 初期 zoom) duration: 0 即時 simplestyle-vector.ts:49
popup offset: [0, -25] popup と marker の隙間 geolonia-map.ts:256
marker offset: [0, -15] SVG marker のアンカー位置 geolonia-marker.ts:47
marker SVG 26 x 34 px サイズ (CSS) geolonia-marker.ts:25-26
ロゴ画像 16 x 16 px GeoloniaControl ロゴ controls/geolonia-control.ts:13-14
sessionId 40 桁 hex getSessionId(40) 呼び出し geolonia-map.ts:121

8. HTTP / プロトコル / クエリ名

用途 場所
'geolonia-api-key' script URL のクエリパラメータ名 keyring.ts:68
'key' transformRequest で URL に追加するパラメータ名 geolonia-map.ts:123,160,173
'sessionId' transformRequest で URL に追加するパラメータ名 geolonia-map.ts:124,159
HTTP 402 restricted mode のステータスコード geolonia-map.ts:361
'dev' デフォルト stage keyring.ts:73,80
'v1' npm scripts (start, build:embed, analyze) で渡される stage package.json:18,21,22

9. プロトコル / URL スキーム

用途 場所
pmtiles maplibre プロトコル登録名 render.ts:14, embed-core.ts:12
geolonia:// カスタム URL スキーム (data-simple-vector で受ける) util.ts:359, geolonia-map.ts:139
geolonia://tiles/custom/{id} parseSimpleVector が生成する URL util.ts:362
geolonia://tiles/{username}/{customtileId} transformRequest 内 regex で match geolonia-map.ts:140-141
https://tileserver.geolonia.com/customtiles/{id}/tiles.json 変換後の TileJSON URL geolonia-map.ts:144
`https://api.geolonia.com/(dev v1)/sprites/` regex sprite URL match

10. CSS class 名 (embed が生成・参照)

class 場所 用途
.geolonia render.ts:82-87 DOM 走査対象セレクタ
data-lazy-loading="off" render.ts:83 即時 render 用属性セレクタ
loading-geolonia-map geolonia-map.ts:115 loader 親 div
lds-grid geolonia-map.ts:116 loader spinner
geolonia-default-marker geolonia-marker.ts:19 デフォルトマーカー container
geolonia-clickable-marker geolonia-map.ts:282 popup 付きマーカー
geolonia__restricted-mode-image-container util.ts:372 402 表示用
geolonia__error-container util.ts:378 初期化失敗時
geolonia__error-message util.ts:386 エラーメッセージ
geolonia__error-message-description util.ts:387 エラー詳細
maplibregl-ctrl controls/geolonia-control.ts:8, CustomAttributionControl.ts:68,72,77 maplibre 標準
maplibregl-ctrl-attrib CustomAttributionControl.ts:68 maplibre 標準
maplibregl-ctrl-attrib-button CustomAttributionControl.ts:72 maplibre 標準
maplibregl-ctrl-attrib-inner CustomAttributionControl.ts:79 maplibre 標準
maplibregl-compact / maplibregl-compact-show / maplibregl-attrib-empty CustomAttributionControl.ts 内多数 状態クラス

11. SVG マーカー (assets/marker.svg を svg-inline-loader で取り込み)

geolonia-marker.ts:34-44:

  • .left selector の style.filloptions.color または '#E4402F'
  • .right selector の style.filltinycolor(color).darken().toString()

つまりマーカー SVG 内に .left.right という class を持つ要素が必須(現 assets/marker.svg でその構造)。書き直し時もこの DOM 構造を維持しないと色が変わらない。

12. iframe 許可特例 (checkPermission() util.ts:52-120)

3 サイトに対し referrer ベースの特例を持つ:

ホスト origin チェック referrer prefix 場所
Codepen https://cdpn.io または https://codepen.io https://codepen.io util.ts:67-77
JSFiddle https://fiddle.jshell.net https://jsfiddle.net util.ts:82-89
CodeSandbox *.csb.app (regex) https://codesandbox.io util.ts:98-105

これら以外の iframe は 同一 origin または API key がすでにロード済み のときのみ許可。

13. CSS リテラル (CustomAttributionControl 内蔵スタイル)

CustomAttributionControl.ts:84-219 に Shadow DOM 用 CSS が長尺で埋め込まれている。書き直し時はこれを丸ごとコピペするか別ファイル化する。主要トークン:

  • font: 12px/20px Helvetica Neue,Arial,Helvetica,sans-serif
  • box-shadow: 0 0 2px 2px #0096ff (focus)
  • 背景: hsla(0,0%,100%,.5)
  • リンク色: rgba(0,0,0,.75)
  • compact 表示の閾値: offsetWidth <= 640 (CustomAttributionControl.ts:361)

14. 検証コマンド (書き直し時の照合用)

# 全 hex color
grep -nE "'#[0-9A-Fa-f]+'" src --include="*.ts" -r | grep -v test

# Geolonia 系ホスト
grep -nE "geolonia\.com|tileserver|cdn\.geolonia|api\.geolonia" src --include="*.ts" -r | grep -v test

# layer/source ID prefix
grep -nE "geolonia-simple-style|vt-(circle|geolonia)-simple-style" src --include="*.ts" -r

# CSS class
grep -nE "(geolonia-|maplibregl-|lds-grid|geolonia__)" src --include="*.ts" -r

上記コマンドの出力と本ファイルの表が一致していれば再現可能性が担保される。

Clone this wiki locally