@cieloazul310/ol-gsi-vt-utils
@cieloazul310/ol-gsi-vt-utils API
Theme
@cieloazul310/ol-gsi-vt
テーマは、配色設定である palette
、注記の文字の設定である typography
、地物描写の階層の設定である zIndex
からなります。
type Theme = {
palette: Palette;
typography: Typography;
zIndex: ZIndex;
};
<function>
useDefaultTheme
const defaultTheme = useDefaultTheme();
ol-gsi-vtのデフォルトのテーマを返す関数
Source
deprecated <Object>
defaultTheme
(非推奨) パッケージのプリセットのテーマ設定
Source
<function>
mergeDefaultTheme(defaultTheme?)
const merge = mergeDefaultTheme();
const palette = definePalette({
background: "#ffe",
});
const myTheme = merge({ palette });
自分で設定したテーマを、デフォルトのテーマにマージする関数を生成する関数。
Source
argument
<Object>
defaultTheme? Theme
returns
<function>
(themeOptions?: <Object>
ThemeOptions
) => <Object>
Theme
import {
mergeDefaultTheme,
useDefaultTheme,
palePalette,
} from '@cieloazul310/ol-gsi-vt';
// パッケージのデフォルトテーマをマージ先のデフォルトテーマとする関数
const mergeToDefaultTheme = mergeDefaultTheme();
const myTheme = mergeToDefaultTheme({
palette: {
background: '#fff',
},
});
// 淡色パレットによるテーマをマージ先のデフォルトテーマとする関数
const mergeToPaleTheme = mergeDefaultTheme({
...useDefaultTheme(),
palette: usePalePalette(),
});
const myPaleTheme = mergeToPaleTheme({
palette: {
road: {
highway: {
main: '#0f0',
edge: '#0a0',
},
},
},
});
Palette
type Palette = {
/** 注記レイヤーの文字色 */
anno: {
/** テキスト */
text: {
main: string;
light: string;
};
/** 水域関連の文字色 */
water: string;
/** 山岳関連の文字色 */
terrain: string;
/** 交通関連の文字色 */
transp: string;
/** 森林・緑地・公園関連の文字色 */
green: string;
};
/** レイヤーの背景 */
background: string;
/** 境界の色 */
boundary: {
main: string;
light: string;
};
/** 建物の色 */
building: {
stroke: string;
fill: string;
};
/** 等高線の色 */
contour: {
main: string;
light: string;
};
/** テキストの文字縁など */
contrast: string;
/** 等深線 */
isbt: string;
/** 鉄道関連 */
rail: {
/** 駅 */
station: {
main: string;
light: string;
};
/** 新幹線 */
shinkansen: string;
/** JR */
jr: string;
/** JR以外 */
shitetsu: string;
};
/** 道路の色
* `main`は道路中心線、`edge` は道路縁
*/
road: {
/** 高速道路 */
highway: {
main: string;
edge: string;
};
/** 国道 */
national: {
main: string;
edge: string;
};
/** 都道府県道 */
pref: {
main: string;
edge: string;
};
/** 一般道 */
basic: {
main: string;
edge: string;
};
/** z16以上の道路縁 */
edge: string;
};
/** 航路 */
searoute: string;
/** ダムなどの構造物 */
structure: string;
/** 地形面 */
tpgphArea: {
/** 湿地 */
wetland: string;
/** 万年雪 */
firn: string;
/** 砂礫地 */
sand: string;
};
/** 国道番号・高速道路番号 */
transp: {
/** 高速道路番号の背景色 */
highway: string;
/** 国道番号の背景色 */
national: string;
};
/** 火山 */
volcano: string;
/** 水域・河川 */
waterarea: string;
/** 海岸線・水涯線 */
waterline: string;
};
Typography
type Typography = {
fontFamily: string;
fontSize: {
/** default to '10px' */
xs: string;
/** default to '12px' */
sm: string;
/** default to '14px' */
md: string;
/** default to '18px' */
lg: string;
/** default to '24px' */
xl: string;
};
/** Canvas フォント設定を生成
* https://developer.mozilla.org/ja/docs/Web/API/CanvasRenderingContext2D/font
*/
toString: (
fontSize?: keyof Typography['fontSize'] | string,
options?: {
italic?: boolean;
bold?: boolean;
fontFamily?: string;
fontWeight?: string | number | number;
}
) => string;
};
typography.toString(fontSize?, options?)
TextStyle
クラスの font
オプションに指定できる文字列を生成するための関数。
import Style from 'ol/style/Style';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Text from 'ol/style/Text';
import type {
GsiOptVtStyleOptions,
GsiOptVTFeatureProperties,
} from '@cieloazul310/ol-gsi-vt';
const style: GsiOptVtStyleOptions = {
Anno: (feature, resolution, { palette, typography }) => {
const { vt_code, vt_text } = feature.getProperties() as GsiOptVTFeatureProperties<number, {
vt_text?: string;
}>;
if (!vt_text) return new Style();
// vt_code 140: 都道府県
if (vt_code === 140)
return new Style({
text: new Text({
text: vt_text,
font: typography.toString('xl', { bold: true }),
// => '24px system-ui, -apple-system, sans-serif'
fill: new Fill({ color: palette.anno.text.main }),
stroke: new Stroke({ color: palette.contrast, width: 4 }),
}),
});
if (vt_code === 110)
return new Style({
text: vt_text,
font: typography.toString('lg', { bold: true, italic: true }),
// => 'italic bold 18px system-ui, -apple-system, sans-serif'
fill: new Fill({ color: palette.anno.text.main }),
stroke: new Stroke({ color: palette.contrast, width: 3 }),
});
return new Style();
},
};
zIndex
type ZIndex = {
/** 水域 (default to 0) */
waterarea: number;
/** 海岸線・水涯線 (default to 1) */
waterline: number;
/** 地形面 (default to 2) */
tpgphArea: number;
/** 等高線 (default to 3) */
contour: number;
/** 航路 (default to 4) */
searoute: number;
/** 道路の背景 (default to 100) */
roadBg: number;
/** 鉄道の背景 (default to 150) */
railwayBg: number;
/** 建物の基準面 (default to 150) (lvOrder属性に依存) */
building: number;
/** 道路の基準面 (default to 150) (lvOrder属性に依存) */
road: number;
/** 鉄道の基準面 (default to 160) (lvOrder属性に依存) */
railway: number;
/** 駅 (default to 200) */
station: number;
/** 送電線 (default to 250) */
pwrTrnsmL: number;
/** 境界線 (default to 500) */
boundary: number;
/** 標高点 (default to 600) */
elevation: number;
/** 国道番号・高速道路番号 (default to 700)「 */
transp: number;
/** 注記の基準 (default to 800) */
label: number;
/** 記号の基準 (default to 900) */
symbol: number;
/** 注記の最上位 (default to 1000) */
highest: number;
};
関数
For source-layers
ベクトルタイルのソースレイヤーの取捨選択用の定数と関数
<Array>
gsiOptVtLayerNameCollection
最適化ベクトルタイルの全てのソースレイヤー名を格納した配列
Source
<function>
defineOptVtLayers(GsiOptVTLayerName[])
最適化ベクトルタイルのソースレイヤーを指定するためのヘルパー関数
Source
<function>
gsiOptVtLayerExclude(GsiOptVTLayerName[])
最適化ベクトルタイルのソースレイヤーから指定のソースレイヤーを取り除く関数
Source
import {
gsiOptVtLayerNameCollection,
defineOptVtLayers,
gsiOptVtLayerExclude,
} from '@cieloazul310/ol-gsi-vt';
console.log(gsiOptVtLayerNameCollection);
// => ['AdmArea', 'AdmBdry', 'Anno', 'BldA', 'Cntr', 'Cstline', 'Isbt', 'PwrTrnsmL', 'RailCL', 'RailTrCL', 'RdEdg', 'RdCompt', 'RdCL', 'RvrCL', 'SpcfArea', 'StrctLine', 'StrctArea', 'TpgphArea', 'TpgphLine', 'WA', 'WL', 'WStrA', 'WStrL', 'WRltLine']
console.log(defineOptVtLayers(["Anno", "StrctLine"]));
// => ["Anno", "StrctLine"]
console.log(gsiOptVtLayerExclude(['Anno', 'StrctLine', 'StrctArea']));
// => ['AdmArea', 'AdmBdry', 'BldA', 'Cntr', 'Cstline', 'Isbt', 'PwrTrnsmL', 'RailCL', 'RailTrCL', 'RdEdg', 'RdCompt', 'RdCL', 'RvrCL', 'SpcfArea', 'TpgphArea', 'TpgphLine', 'WA', 'WL', 'WStrA', 'WStrL', 'WRltLine']
<Array>
gsiVtLayerNameCollection
ベクトルタイルの全てのソースレイヤー名を格納した配列
Source
<function>
defineVtLayers(GsiVTLayerName[])
ベクトルタイルのソースレイヤーを記述するためのヘルパー関数
Source
<function>
gsiVtLayerExclude(GsiVTLayerName[])
ベクトルタイルのソースレイヤーから指定のソースレイヤーを取り除く関数
Source
注記
マニュアル記法で注記のスタイルを記述する際に、地物のフィルタリングと型安全を保つための関数。
const style = defineOptVtLayerStyle({
Anno: (feature, resolution, theme) => {
const { vt_code } =
feature.getProperties()
as GsiOptVTFeatureProperties<
number,
{
vt_text?: string;
}
>;
// 住所・地名関連以外の地物に空のスタイルを与える
if (!annoCodeIsAddress(vt_code)) return new Style();
if (!vt_text) return new Style();
return new Style({
text: new Text({
text: vt_text,
}),
});
},
});
annoCodeIsAddress(code)
住所関連の地物を判別するための関数
- argument:
<number>
最適化ベクトルタイルの場合はvt_code
、ベクトルタイルの場合はftCode
またはannoCtg
- returns:
<Boolean>
annoCodeIsAdm(code)
行政関連施設の地物を判別するための関数
Source
annoCodeIsAirport(code)
空港関連の地物を判別するための関数
Source
annoCodeIsElevation(code)
標高点関連の地物を判別するための関数
Source
annoCodeIsGreen(code)
公園・森林関連の地物を判別するための関数
Source
annoCodeIsLandformPoint(code)
地形(点)の地物を判別するための関数
Source
annoCodeIsPort(code)
港湾関連の地物を判別するための関数
Source
annoCodeIsSchool(code)
学校関連の地物を判別するための関数
Source
annoCodeIsTerrain(code)
山名、地形名関連の地物を判別するための関数
Source
annoCodeIsTransp(code)
交通構造物関連の地物を判別するための関数
Source
annoCodeIsVegetation(code)
植生関連の地物を判別するための関数
Source
annoCodeIsWater(code)
水域関連の地物を判別するための関数
Source
その他
zoomToResolution(zoomLevel)
dspPos(dspPos?, arrng?, radius?)
型定義
TypeScript でマニュアル記法をするときに有用な、最適化ベクトルタイル及びベクトルタイルの地物の型定義のヘルパー
地物の型定義
GsiOptVTFeatureProperties<VTCode*, *T>
最適化ベクトルタイルの地物の属性に型を与える型定義です。ジェネリックス <VTCode, T>
の引数を指定せずに使うこともできます。
Source
export type GsiOptVTFeatureProperties<
VTCode extends number = number,
T extends Record<string, unknown> = Record<string, unknown>
> = {
/** レイヤ名 */
layer: GsiOptVTLayerName;
/** 地物種別コード */
vt_code: VTCode;
/** 階層順 (z11-17) */
vt_lvorder?: 0 | 1 | 2 | 3 | 4;
/** ズームレベル17の表示フラグ (z16-17)
* `0`: ズームレベル16を表示
* `1`: ズームレベル16,17ともに表示
* `2`: ズームレベル17を表示
*/
vt_flag17?: 0 | 1 | 2;
} & T;
const { vt_code } = feature.getProperties() as GsiOptVTFeatureProperties;
// vt_code: number
GsiVTFeatureProperties<FTCode*, *T>
ベクトルタイルの地物の属性に型を与える型定義です。ジェネリックス <FTCode, T>
の引数を指定せずに使うこともできます。
Source
export type GsiVTFeatureProperties<
FTCode extends number = number,
T extends Record<string, unknown> = Record<string, unknown>
> = {
/** レイヤ名 */
layer: GsiVTLayerName;
/** 地物種別コード */
ftCode: FTCode;
/** 道路の階層順 */
lvOrder?: 0 | 1 | 2 | 3 | 4;
/** 出典地理情報レベル */
orgGILvl: string;
} & T;