Rust 实现 省市县镇村 数据查询 名称模糊搜索 及坐标对应城市搜索
csv数据源使用示例
```toml
area-db = { version = "~0.0.*"} ```
rust
let code_path = PathBuf::from("data/2023-7-area-code.csv.gz");
let geo_path = PathBuf::from("data/2023-7-area-geo.csv.gz");
let data = area_db::CsvAreaData::new(
area_db::CsvAreaCodeData::from_inner_path(code_path, true).unwrap(),
Some(area_db::CsvAreaGeoData::from_inner_path(geo_path, true).unwrap()),
);
let area = area_db::AreaDao::new(data).unwrap();
解压后使用
如果你已经装了lib-sqlite的库,可用:
data-sqlite
会使用系统的sqlite库. 具体参见crate:rusqlite
实现
如果你未安装lib-sqlite的库,可用:
data-sqlite-source
会通过c源码编译sqlite库. sqlite源码通过子模块git submodule update --init
获取
sqlite数据源使用示例
```toml
area-db = { version = "~0.0.*", default-features=false,features=["data-sqlite-source"]} ```
rust
let area = area_db::AreaDao::new(mysql).unwrap();
let conn = "data/area-data.db";
let sqlite = area_db::SqliteAreaData::new(
area_db::SqliteAreaCodeData::from_path(PathBuf::from(&conn)),
Some(area_db::SqliteAreaGeoData::from_path(PathBuf::from(&conn))),
);
let area = area_db::AreaDao::new(sqlite).unwrap();
mysql数据库作为数据源的示例
```toml
area-db = { version = "~0.0.*", default-features=false,features=["data-mysql"]} ```
rust
let pool = "mysql://***:***@127.~0.0.*:3306/***";
let mysql = area_db::MysqlAreaData::new(
area_db::MysqlAreaCodeData::from_uri(pool),
Some(area_db::MysqlAreaGeoData::from_uri(pool)),
);
let area = area_db::AreaDao::new(mysql).unwrap();
rust
let area = area_db::AreaDao::new(...).unwrap();
area.geo_reload().unwrap();//重新加载GEO数据
area.code_reload().unwrap();//重新加载CODE数据
默认不引入
lib-clib
,需要FFI请开启
```toml
area-db = { version = "~0.0.*",features=["lib-clib"]} ```
测试查询时间 100us 以内
rust
let child="";//空列出省级,把省级的code转入列出市级..依次完成
let res = area.code_childs(child).unwrap();
println!("{}", &res);
rust
let child="441403133";//地址code
let res = area.code_related(child).unwrap();
println!("{}", &res);
测试查询时间 100us 以内
可用于系统内的code到地址转换
rust
let child="441403133";//地址code
let res = area.code_find(child).unwrap();
println!("{}", &res);
测试查询时间 50 ~ 80ms
rust
let child="guang dong";//地址信息 在比如: 广东 布吉
let limit = 10;//返回匹配数量
let res = area.code_search(child, limit).unwrap();
println!("{}", &res);
可用手机根据geo信息自动填写当前位置收货地址
测试查询时间 10 ~ 30ms
目前到市一级,因为只找到了市一级的坐标数据
rust
let res = area.geo_search( 26.61474, 114.13548 , ).unwrap();
println!("{}", &res);