openlr

Crates.ioopenlr
lib.rsopenlr
version0.2.0
created_at2025-07-07 08:05:05.509479+00
updated_at2025-09-18 07:10:27.112983+00
descriptionOpenLR Rust implementation
homepage
repositoryhttps://github.com/geopinionated/openlr
max_upload_size
id1740865
size1,060,219
Marco Conte (gliderkite)

documentation

README

OpenLR Rust implementation

Binary (and Base64) ser/deserialization of OpenLR Location References (version 3) with basic support for line encoder and decoder capabilities.

White Paper

Reference Implementation (Java)

License

Licensed under either of

Examples

Serialization

use openlr::{Coordinate, LocationReference, deserialize_base64_openlr, serialize_base64_openlr};

let location = LocationReference::GeoCoordinate(Coordinate {
    lon: 13.090918,
    lat: 52.466884,
});

let encoded: String = serialize_base64_openlr(&location).unwrap();
let decoded: LocationReference = deserialize_base64_openlr(&encoded).unwrap();

Decoding and Encoding

use openlr::{
    DecoderConfig, DirectedGraph, EncoderConfig, Location, decode_base64_openlr, encode_base64_openlr
};

struct RoadNetworkGraph;

type VertexId = i64;
type EdgeId = i64;

impl DirectedGraph for RoadNetworkGraph {
    type VertexId = VertexId;
    type EdgeId = EdgeId;

    // TODO: implement DirectedGraph methods
}

let graph = RoadNetworkGraph;

let location: Location<EdgeId> =
    decode_base64_openlr(&DecoderConfig::default(), &graph, "CwmShiVYczPJBgCs/y0zAQ==").unwrap();

let location: String =
    encode_base64_openlr(&EncoderConfig::default(), &graph, location).unwrap();
Commit count: 123

cargo fmt