Skip to content

zhanghongnian/h3_to_adcode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

H3 to Adcode

Preview

将经纬度坐标转换为中国行政区划代码 (adcode) 的高性能解决方案。

基于 Uber H3 空间索引,提供 Go 和 Java 参考实现。

性能

测试环境:Apple M2,14M H3 索引,真实数据

查询性能

语言 实现 查询速度 吞吐量
Go Swiss Map 56 ns/op 17.7M ops/sec
Go 二分查找 258 ns/op 3.9M ops/sec
Java Fastutil Map 260 ns/op 3.9M ops/sec
Java 二分查找 318 ns/op 3.1M ops/sec

资源占用

语言 实现 内存 加载时间
Java 二分查找 161 MB 381 ms
Go 二分查找 209 MB 644 ms
Java Fastutil Map 388 MB 3.1 s
Go Swiss Map 411 MB 2.7 s

选型建议

场景 推荐
极致查询性能 Go + Swiss Map (56 ns)
内存敏感 Java + 二分查找 (161 MB)
冷启动敏感 Java + 二分查找 (381 ms)
平衡方案 Go + 二分查找

使用方式

直接复制代码到你的项目中,根据需要修改。

Go

复制 examples/go/h3adcode/ 到你的项目:

// 内存优先 (209 MB, O(log n))
resolver, _ := h3adcode.New("data/h3_to_adcode_res8.bin")

// 速度优先 (411 MB, O(1))
resolver, _ := h3adcode.NewFast("data/h3_to_adcode_res8.bin")

// 查询
adcode := resolver.Lookup(39.9042, 116.4074)  // 北京 -> 110101

Java

复制 examples/java/src/ 到你的项目,添加依赖:

<!-- 仅 FastResolver 需要 -->
<dependency>
    <groupId>it.unimi.dsi</groupId>
    <artifactId>fastutil</artifactId>
    <version>8.5.12</version>
</dependency>
// 内存优先 (161 MB, O(log n))
Resolver resolver = Resolver.fromBinary(Paths.get("data/h3_to_adcode_res8.bin"));

// 速度优先 (388 MB, O(1))
FastResolver resolver = FastResolver.fromBinary(Paths.get("data/h3_to_adcode_res8.bin"));

// 查询
int adcode = resolver.lookup(39.9042, 116.4074);  // 北京 -> 110101

数据文件

二进制数据文件位于 data/ 目录:

文件 分辨率 精度 大小
h3_to_adcode_res8.bin 8 ~0.7 km² 160 MB

项目结构

├── data/                     # 二进制数据文件
│   └── h3_to_adcode_res8.bin
├── examples/
│   ├── go/h3adcode/          # Go 参考实现
│   └── java/                 # Java 参考实现
├── generator/                # 数据生成工具 (gitignore)
├── Makefile                  # make bench 运行性能测试
└── README.md

运行性能测试

make bench       # Go + Java
make bench-go    # 仅 Go
make bench-java  # 仅 Java

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published