Spaces:
Sleeping
Sleeping
File size: 4,691 Bytes
a1c0952 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
/** 注意: [経度, 緯度] の順 */
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<T> = {
meta: {
/** データ更新日(UNIX時間; 秒) */
updated: number;
};
data: T;
}
/**
* 都道府県、市区町村一覧API
* 政令都市の場合は区で区切ります
* @file api/ja.json
*/
export type PrefectureApi = Api<SinglePrefecture[]>;
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<SingleCity[]>;
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<SingleMachiAza[]>;
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('-');
}
|