use jismeshcode::prelude::*;
fn main() {
println!("=== 空間範囲検索 ===\n");
let sw = Coordinate::new(35.6, 139.7).unwrap();
let ne = Coordinate::new(35.7, 139.8).unwrap();
let bbox = BoundingBox::new(sw, ne);
println!("検索範囲:");
println!(" 南西端: 北緯{}, 東経{}", sw.lat(), sw.lon());
println!(" 北東端: 北緯{}, 東経{}", ne.lat(), ne.lon());
println!(
" 範囲: 緯度{:.2}度 × 経度{:.2}度",
ne.lat() - sw.lat(),
ne.lon() - sw.lon()
);
println!("\n3次メッシュ(約1km四方)で検索:");
let meshes: Vec<_> = mesh_codes_in_bbox(bbox, MeshLevel::Third).collect();
println!(" 見つかったメッシュ数: {} 個", meshes.len());
if meshes.len() <= 20 {
println!("\n 全メッシュコード:");
for mesh in &meshes {
let center = mesh_to_center(*mesh);
println!(
" {} - 中心座標: ({:.6}, {:.6})",
mesh,
center.lat(),
center.lon()
);
}
} else {
println!("\n 最初の10個のメッシュコード:");
for mesh in meshes.iter().take(10) {
let center = mesh_to_center(*mesh);
println!(
" {} - 中心座標: ({:.6}, {:.6})",
mesh,
center.lat(),
center.lon()
);
}
println!(" ... 他 {} 個", meshes.len() - 10);
}
println!("\n2次メッシュ(約10km四方)で検索:");
let meshes_2nd: Vec<_> = mesh_codes_in_bbox(bbox, MeshLevel::Second).collect();
println!(" 見つかったメッシュ数: {} 個", meshes_2nd.len());
if !meshes_2nd.is_empty() {
println!("\n 2次メッシュコード一覧:");
for mesh in &meshes_2nd {
println!(" {}", mesh);
}
}
println!("\n1次メッシュ(約80km四方)で検索:");
let meshes_1st: Vec<_> = mesh_codes_in_bbox(bbox, MeshLevel::First).collect();
println!(" 見つかったメッシュ数: {} 個", meshes_1st.len());
for mesh in &meshes_1st {
println!(" {}", mesh);
}
println!("\nメモリ効率的な処理例(collect()せずにイテレータで処理):");
let mut count = 0;
for _mesh in mesh_codes_in_bbox(bbox, MeshLevel::Third) {
count += 1;
}
println!(" 処理したメッシュ数: {} 個", count);
}