/** 注意: [経度, 緯度] の順 */ export type LngLat = [number, number]; export type SinglePrefecture = { /** 全国地方公共団体コード */ code: number; /** 都道府県名 */ pref: string; /** 都道府県名 (カナ) */ pref_k: string; /** 都道府県名 (ローマ字) */ pref_r: string; /** 代表点 (県庁の位置) */ point: LngLat; cities: SingleCity[]; }; /** * SinglePrefecture から都道府県名を取得します。 * @param pref SinglePrefecture * @returns string */ export function prefectureName(pref: SinglePrefecture): string { return pref.pref; } type Api = { meta: { /** データ更新日(UNIX時間; 秒) */ updated: number; }; data: T; } /** * 都道府県、市区町村一覧API * 政令都市の場合は区で区切ります * @file api/ja.json */ export type PrefectureApi = Api; export type SingleCity = { /** 全国地方公共団体コード */ code: number; /** 郡名 */ county?: string; /** 郡名 (カナ) */ county_k?: string; /** 郡名 (ローマ字) */ county_r?: string; /** 市区町村名 */ city: string; /** 市区町村名 (カナ) */ city_k: string; /** 市区町村名 (ローマ字) */ city_r: string; /** 政令市区名 */ ward?: string; /** 政令市区名 (カナ) */ ward_k?: string; /** 政令市区名 (ローマ字) */ ward_r?: string; /** 代表点 (自治体役場の位置) */ point: LngLat; }; /** * SingleCity から市区町村名を取得します。郡名と政令市区名を含めます。 * @param city SingleCity * @returns string */ export function cityName(city: SingleCity): string { return `${city.county || ''}${city.city}${city.ward || ''}`; } /** * 市区町村一覧API * @file api/ja/{都道府県名}.json */ export type CityApi = Api; export type SingleMachiAza = { /** ABR上の「町字ID」 */ machiaza_id: string; /** 大字・町名 */ oaza_cho?: string; /** 大字・町名 (カナ) */ oaza_cho_k?: string; /** 大字・町名 (ローマ字) */ oaza_cho_r?: string; /** 丁目名 */ chome?: string; /** 丁目名 (数字) */ chome_n?: number; /** 小字名 */ koaza?: string; /** 小字名 (カナ) */ koaza_k?: string; /** 小字名 (ローマ字) */ koaza_r?: string; /** 住居表示住所の情報の存在。値が存在しない場合は、住居表示住所の情報は存在しません。 */ rsdt?: true; /** 代表点 */ point?: LngLat; /** CSV APIに付加情報が存在する場合、この町字のバイト範囲を指定します。 */ csv_ranges?: { ["住居表示"]?: { start: number; length: number; }; ["地番"]?: { start: number; length: number; }; } }; /** * SingleMachiAza から町字名を取得します。大字・丁目・小字を含めます。 * @param machiAza SingleMachiAza * @returns string */ export function machiAzaName(machiAza: SingleMachiAza): string { return `${machiAza.oaza_cho || ''}${machiAza.chome || ''}${machiAza.koaza || ''}`; } /** * 町字一覧API * @file api/ja/{都道府県名}/{市区町村名}.json */ export type MachiAzaApi = Api; export type SingleRsdt = { /** 街区符号 */ blk_num?: string; /** 住居番号 */ rsdt_num: string; /** 住居番号2 */ rsdt_num2?: string; /** 代表点 */ point?: LngLat; }; /** * SingleRsdt の街区符号・住居番号・住居番号2を `-` で区切った文字列を返します。 * @param rsdt SingleRsdt * @returns string */ export function rsdtToString(rsdt: SingleRsdt): string { return [rsdt.blk_num, rsdt.rsdt_num, rsdt.rsdt_num2].filter(Boolean).join('-'); } /** * {市区町村名}-住居表示.json は類似なデータフォーマットを使います。 * @file api/ja/{都道府県名}/{市区町村名}-住居表示.json */ export type RsdtApi = { machiAza: SingleMachiAza; rsdts: SingleRsdt[]; }[]; export type SingleChiban = { /** 地番1 */ prc_num1: string; /** 地番2 */ prc_num2?: string; /** 地番3 */ prc_num3?: string; /** 代表点 */ point?: LngLat; }; /** * SingleChiban の地番1・地番2・地番3を `-` で区切った文字列を返します。 * @param chiban SingleChiban * @returns string */ export function chibanToString(chiban: SingleChiban): string { return [chiban.prc_num1, chiban.prc_num2, chiban.prc_num3] .filter(Boolean) .join('-'); }