Rust Quickstart
Get started with A5 in Rust by installing the crate and running a simple example.
Installation
Add the A5 crate to your Cargo.toml:
[dependencies]
a5 = "0.1.0"
serde_json = "1.0"
Or using cargo:
cargo add a5 serde_json
Code Example: Generate A5 Cells
Here's a complete example that generates A5 cells at a specified resolution and outputs them as GeoJSON:
use a5::{cell_to_boundary, cell_to_children, u64_to_hex};
use serde_json::json;
fn main() {
let resolution = 2;
let cell_ids = cell_to_children(0, Some(resolution)).unwrap();
let cells: Vec<_> = cell_ids
.iter()
.map(|&cell_id| {
let boundary: Vec<[f64; 2]> = cell_to_boundary(cell_id, None)
.unwrap()
.iter()
.map(|point| [point.longitude(), point.latitude()])
.collect();
json!({
"type": "Feature",
"geometry": { "type": "Polygon", "coordinates": [boundary] },
"properties": { "cellIdHex": u64_to_hex(cell_id) }
})
})
.collect();
let geojson = json!({ "type": "FeatureCollection", "features": cells });
println!("{}", serde_json::to_string_pretty(&geojson).unwrap());
}
Example Output
The above code will produce a collection of cells that cover the whole world.
Note that the cells all have the same area, they are just warped by the map projection
A5 Wireframe Example
Cells shown: 240
Hover over cells to see their IDs
Usage
This will generate A5 cells at resolution 2 and output them as GeoJSON.
cargo run
Next Steps
- Learn more about A5 indexing
- Explore cell hierarchy
- Check out more examples