jp-location-relation

Crates.iojp-location-relation
lib.rsjp-location-relation
version0.2.0
created_at2022-08-14 14:07:56.959951+00
updated_at2026-01-09 08:00:23.746254+00
description日本の市区町村・都道府県の隣接関係を取得するライブラリ
homepagehttps://github.com/uiuifree/rust-jp-location-relation
repositoryhttps://github.com/uiuifree/rust-jp-location-relation
max_upload_size
id645436
size309,864
Misaki (uiuifree)

documentation

https://docs.rs/jp-location-relation

README

jp-location-relation

Crates.io docs.rs License: MIT

日本の市区町村・都道府県の隣接関係を取得できるRustライブラリです。

A Rust library for retrieving adjacent municipalities and prefectures in Japan.

特徴

  • 全国1,868市区町村の隣接関係データを収録
  • 47都道府県の隣接関係データを収録
  • 全国地方公共団体コード(JIS X 0401/0402)に対応
  • 県境を超えた隣接の判定が可能
  • Serde対応(JSON等へのシリアライズ可能)
  • 外部依存なし(serdeのみ)

インストール

[dependencies]
jp-location-relation = "0.2"

Rust 1.80以上が必要ですstd::sync::LazyLockを使用)

使い方

市区町村の隣接関係

use jp_location_relation::City;

// 市区町村コードから検索 -> Option<&'static City>
let city = City::find_by_id(13101).unwrap();
assert_eq!(city.name, "千代田区");
assert_eq!(city.relation_city_name, vec!["港区", "新宿区", "文京区", "中央区", "台東区"]);

// 市区町村名から検索 -> Option<&'static City>
let city = City::find_by_name("堺市堺区").unwrap();
assert_eq!(city.id, 27141);

// 隣接市区町村をCityオブジェクトで取得 -> Vec<&'static City>
let neighbors = city.get_relation_cities();

都道府県の隣接関係

use jp_location_relation::Prefecture;

// 都道府県コードから検索 -> Option<&'static Prefecture>
let tokyo = Prefecture::find_by_id(13).unwrap();
assert_eq!(tokyo.prefecture_name, "東京都");

// 隣接都道府県を取得 -> Vec<&'static Prefecture>
let neighbors = tokyo.get_relation_prefectures();
// 埼玉県、千葉県、神奈川県、山梨県

// 都道府県名から検索 -> Option<&'static Prefecture>
let osaka = Prefecture::find_by_name("大阪府").unwrap();

// 隣接都道府県名を取得 -> Vec<String>
let names = osaka.relation_prefecture_name();
// ["京都府", "兵庫県", "奈良県", "和歌山県"]

都道府県から市区町村を取得

use jp_location_relation::City;

// 都道府県コードで絞り込み -> Vec<&'static City>
let tokyo_cities = City::find_by_prefecture_id(13);

県境を超えた隣接の判定

use jp_location_relation::City;

let inagi = City::find_by_id(13225).unwrap(); // 稲城市

// 県境を超えた隣接があるか -> bool
if inagi.has_cross_prefecture_relation() {
    // 県境を超えた隣接市区町村を取得 -> Vec<&'static City>
    let cross_border = inagi.get_cross_prefecture_relations();
    // 川崎市麻生区、川崎市多摩区
}

// 同一都道府県内の隣接市区町村を取得 -> Vec<&'static City>
let same_pref = inagi.get_same_prefecture_relations();

イテレータ

use jp_location_relation::{City, Prefecture};

// 全市区町村をイテレート
for city in City::iter() {
    println!("{}: {}", city.id, city.name);
}

// 全都道府県をイテレート
for pref in Prefecture::iter() {
    println!("{}: {}", pref.prefecture_id, pref.prefecture_name);
}

API

City

メソッド 戻り値 説明
get_cities() &'static HashMap<i32, City> 全市区町村のHashMapを取得
find_by_id(i32) Option<&'static City> 市区町村コードで検索
find_by_name(&str) Option<&'static City> 市区町村名で検索
find_by_prefecture_id(i32) Vec<&'static City> 都道府県コードで絞り込み
get_relation_cities(&self) Vec<&'static City> 隣接市区町村を取得
get_cross_prefecture_relations(&self) Vec<&'static City> 県境を超えた隣接を取得
get_same_prefecture_relations(&self) Vec<&'static City> 同一県内の隣接を取得
has_cross_prefecture_relation(&self) bool 県境を超えた隣接があるか
iter() impl Iterator<Item = &'static City> 全市区町村のイテレータ

Prefecture

メソッド 戻り値 説明
get_all() &'static Vec<Prefecture> 全都道府県を取得
find_by_id(u32) Option<&'static Prefecture> 都道府県コードで検索
find_by_name(&str) Option<&'static Prefecture> 都道府県名で検索
get_relation_prefectures(&self) Vec<&'static Prefecture> 隣接都道府県を取得
relation_prefecture_name(&self) Vec<String> 隣接都道府県名を取得
get_cities(&self) Vec<&'static City> この都道府県の市区町村を取得
iter() impl Iterator<Item = &'static Prefecture> 全都道府県のイテレータ

データ構造

City

pub struct City {
    pub id: i32,                        // 市区町村コード(全国地方公共団体コード)
    pub prefecture_id: i32,             // 都道府県コード(1〜47)
    pub name: String,                   // 市区町村名
    pub relation_city_id: Vec<i32>,     // 隣接市区町村コード
    pub relation_city_name: Vec<String>, // 隣接市区町村名
}

Prefecture

pub struct Prefecture {
    pub prefecture_id: u32,               // 都道府県コード(1〜47)
    pub prefecture_name: String,          // 都道府県名
    pub relation_prefecture_id: Vec<u32>, // 隣接都道府県コード
}

市区町村コードについて

市区町村コードは全国地方公共団体コード(JIS X 0401/0402)に準拠しています。

  • 都道府県コード: 01(北海道)〜 47(沖縄県)
  • 市区町村コード: 5桁(例: 13101 = 東京都千代田区)

データソース

総務省統計局 地域メッシュ統計 https://www.stat.go.jp/data/mesh/m_itiran.html

ライセンス

MIT

Commit count: 0

cargo fmt