几个月前,我想处理一些日本的坐标数据,映射到行政区划级别即可。所以利用日本气象厅(JMA)的行政区划数据,写了一个反解析的工具 reversejp。核心代码用 Rust 编写的,然后用 PyO3 和 Maturin 制作了 Python Package。

日本的国土面积虽然不是很大,但是在 JMA 数据里,最细级别划分出了 3000 多个行政区划。考虑到日本的国土面积,实际已经非常精细了。

整个数据的核心流程是遍历所有的多边形,然后判断这个点是否在多边形内部,将满足条件的多边形对应的信息按照顺序返回即可。

Rust 使用方法如下:

1
cargo add reversejp
1
2
3
4
5
6
7
8
9
// https://github.com/ringsaturn/reversejp/blob/main/reversejp-rust/examples/demo.rs
use reversejp::ReverseJp;

let reverse_jp = ReverseJp::with_embedded_data().unwrap();
let props = reverse_jp.find_properties(139.7670, 35.6812);

for prop in props {
    println!("Code: {}, Name: {}, English Name: {}", prop.code, prop.name, prop.en_name);
}

输出的结果为:

1
2
Code: 130010, Name: 東京都, English Name: Tokyo
Code: 1310100, Name: 千代田区, English Name: Chiyoda City

Python 的使用方法如下:

1
pip install reversejp
1
2
3
4
5
6
7
# https://github.com/ringsaturn/reversejp/blob/main/reversejp-python/examples/demo.py
import reversejp

props = reversejp.find_properties(139.7670, 35.6812)

for prop in props:
    print(prop.code, prop.name, prop.en_name)

输出的结果为:

1
2
130010 東京都 Tokyo
1310100 千代田区 Chiyoda City