Skip to content

Commit

Permalink
短縮IDを自動で付与
Browse files Browse the repository at this point in the history
  • Loading branch information
naogify committed Nov 7, 2024
1 parent df682fc commit dadbc9b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 27 deletions.
54 changes: 33 additions & 21 deletions bin/configToMenuYAML.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
const fs = require('fs');
const yaml = require('js-yaml');

// タイルレイヤー名から3桁の短縮IDを生成する関数
const generateShortId = (tileLayerName) => {
const hash = Array.from(tileLayerName)
.reduce((acc, char) => acc + char.charCodeAt(0), 0); // Unicodeの合計を計算
const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
return (
alphabet[hash % 26] +
alphabet[Math.floor((hash / 26) % 26)] +
alphabet[Math.floor((hash / 676) % 26)]
); // 3文字のIDを生成
};

const configToMenuYAML = (config, outputFile) => {
const app = {
// TODO: 別の設定ファイルから読み込むようにする
name: 'スマートマップ',
zoom: 10,
center: [135.513, 34.6815],
zoom: 12,
center: [138.29255, 34.83344],
minZoom: 9,
maxZoom: 20,
menus: {
Expand All @@ -22,9 +33,9 @@ const configToMenuYAML = (config, outputFile) => {
const menu = app.menus['都市情報一覧'].items;

config.forEach(item => {
const { 大カテゴリー, 中カテゴリー, メニュータイトル, タイルレイヤー名, データ種別, 短縮レイヤーID, レイヤー色 } = item;
const { 大カテゴリー, 中カテゴリー, メニュータイトル, タイルレイヤー名, データ種別, レイヤー色, データ参照先 } = item;

const isFiware = データ種別 === 'fiware';
const isCustomDataType = データ種別 === 'fiware' || データ種別 === 'raster';

if (!大カテゴリー && 中カテゴリー) {
throw new Error('中カテゴリーを指定する場合は、大カテゴリーも指定してください');
Expand All @@ -37,7 +48,7 @@ const configToMenuYAML = (config, outputFile) => {

// 中カテゴリーがない場合は追加
if (中カテゴリー && !menu[大カテゴリー].items[中カテゴリー]) {
menu[大カテゴリー].items[中カテゴリー] = { id: `${大カテゴリー}/${中カテゴリー}`,type: 'category', items: {} };
menu[大カテゴリー].items[中カテゴリー] = { id: `${大カテゴリー}/${中カテゴリー}`, type: 'category', items: {} };
}

if (メニュータイトル) {
Expand All @@ -53,23 +64,23 @@ const configToMenuYAML = (config, outputFile) => {
id: `${大カテゴリー}/${中カテゴリー}/${メニュータイトル}`,
type: 'data',
tileId: タイルレイヤー名,
shortId: 短縮レイヤーID
};

// レイヤー色が指定されている場合はメタデータに追加
if (レイヤー色) {
data.metadata = { color: レイヤー色 };
}

if (isFiware) {
data.dataType = 'fiware';
if (isCustomDataType) {
data.dataType = データ種別;
data.shortId = generateShortId(データ参照先) // Fiwareの場合はデータ参照先を使用
} else {
data.shortId = generateShortId(タイルレイヤー名)
}

menu[大カテゴリー].items[中カテゴリー].items[メニュータイトル] = data;
return;
}

// 大カテゴリとメニュータイトルがある場合
if (大カテゴリー && メニュータイトル) {

if (menu[大カテゴリー].items[メニュータイトル]) {
Expand All @@ -80,23 +91,23 @@ const configToMenuYAML = (config, outputFile) => {
id: `${大カテゴリー}/${メニュータイトル}`,
type: 'data',
tileId: タイルレイヤー名,
shortId: 短縮レイヤーID
};

// レイヤー色が指定されている場合はメタデータに追加
if (レイヤー色) {
data.metadata = { color: レイヤー色 };
}

if (isFiware) {
data.dataType = 'fiware';
if (isCustomDataType) {
data.dataType = データ種別;
data.shortId = generateShortId(データ参照先) // Fiwareの場合はデータ参照先を使用
} else {
data.shortId = generateShortId(タイルレイヤー名)
}

menu[大カテゴリー].items[メニュータイトル] = data;
return;
}

// メニュータイトルのみの場合
if (メニュータイトル) {

if (menu[メニュータイトル]) {
Expand All @@ -107,18 +118,19 @@ const configToMenuYAML = (config, outputFile) => {
id: メニュータイトル,
type: 'data',
tileId: タイルレイヤー名,
shortId: 短縮レイヤーID
};

// レイヤー色が指定されている場合はメタデータに追加
if (レイヤー色) {
data.metadata = { color: レイヤー色 };
}

if (isFiware) {
data.dataType = 'fiware';
if (isCustomDataType) {
data.dataType = データ種別;
data.shortId = generateShortId(データ参照先) // Fiwareの場合はデータ参照先を使用
} else {
data.shortId = generateShortId(タイルレイヤー名)
}

menu[メニュータイトル] = data;

return;
Expand Down
13 changes: 7 additions & 6 deletions main.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ jq -c '.[]' $json_file | while read item; do
reference=$(echo $item | jq -r '.["データ参照先"]')
tippecanoe_opts=$(echo $item | jq -r '.["Tippecanoeオプション"]')


# --------------------------------------------------
# 1. データ参照先で URL で指定されたファイルをダウンロード(GeoJSONとCSVに対応)
# --------------------------------------------------
Expand All @@ -67,16 +66,18 @@ jq -c '.[]' $json_file | while read item; do
# --------------------------------------------------

# Shape の場合
if [ $dataType = "shape" ]; then
if [ "$dataType" = "shape" ]; then

extensions=("shp" "prj" "cpg" "dbf" "sbn" "fbn" "ain" "ixs" "mxs" "atx" "shp.xml" "shx" "sbx")
reference_file=$(basename $reference ".shp")
reference_file=$(basename "$reference" ".shp")
for ext in "${extensions[@]}"; do
# -iname を使って拡張子の大文字小文字を無視して検索し、結果を小文字に変換
src=$(find "$input_directory" -iname "$reference_file.$ext" -print -quit)
dst="$input_directory/$tileLayer.$ext"
dst="$input_directory/$tileLayer.${ext,,}" # ${ext,,}で拡張子を小文字に変換

# 移動元と移動先が同じか確認
if [ -n "$src" ] && [ "$src" != "$dst" ]; then
echo "ファイル名を変更: $src to $dst"
echo "ファイル名を変更: $src to $dst"
mv "$src" "$dst"
else
echo "移動元と移動先が同じファイルです。操作をスキップします。"
Expand Down Expand Up @@ -157,7 +158,7 @@ jq -c '.[]' $json_file | while read item; do
"--force"
)

if [ $dataType != "fiware" ]; then
if [[ "$dataType" != "fiware" && "$dataType" != "raster" ]]; then
ndgeojsonfile="$input_directory/$tileLayer.ndgeojson"
mbtilesfile="$input_directory/$tileLayer.mbtiles"

Expand Down

0 comments on commit dadbc9b

Please sign in to comment.