[][src]Crate topojson

Examples

This crate uses serde for serialization and allows conversion to GeoJson objects.

To get started, add topojson to your Cargo.toml:

[dependencies]
topojson = "*"

Reading

use topojson::TopoJson;

let topojson_str = r#"
{
    "arcs": [[[0.0, 0.0], [0.0, 9999.0], [2000.0, 0.0], [0.0, -9999.0], [-2000.0, 0.0]]],
    "objects": {"example ": {
            "type": "GeometryCollection",
            "geometries": [
                {"coordinates": [4000.0, 5000.0],
                 "properties": {"prop0": "value0"},
                 "type": "Point"},
                {"arcs": [[0]],
                 "properties": {"prop0": "value0", "prop1": {"this": "that"}},
                 "type": "Polygon"}
            ]
     }},
    "transform": {"scale": [0.0005, 0.0001], "translate": [100.0, 0.0]},
    "type": "Topology"
}
"#;

let topo = topojson_str.parse::<TopoJson>().unwrap();

Writing

TopoJson can then be serialized by calling to_string:


use topojson::{TopoJson, Geometry, Value, Topology, NamedGeometry};
use serde_json;

let topo = Topology {
    arcs: vec![
        vec![vec![2.2, 2.2], vec![3.3, 3.3]]
    ],
    objects: vec![NamedGeometry {
        name: String::from("example"),
        geometry: Geometry {
            value: Value::LineString(vec![0]),
            bbox: None,
            id: None,
            properties: None,
            foreign_members: None,
        },
    }],
    bbox: None,
    transform: None,
    foreign_members: None,
};

let topojson_string = serde_json::to_string(&topo).unwrap();

Converting to GeoJson

TopoJson can then be converted to GeoJson using the to_geojson` function:

extern crate geojson;

use topojson::{TopoJson, to_geojson};
use geojson::GeoJson;

let topojson_str = r#"
{
    "arcs": [[[0.0, 0.0], [0.0, 9999.0], [2000.0, 0.0], [0.0, -9999.0], [-2000.0, 0.0]]],
    "objects": {"example": { "type": "GeometryCollection", "geometries": [
        {"coordinates": [4000.0, 5000.0], "properties": {"prop0": "value0"}, "type": "Point"},
        {"arcs": [[0]], "properties": {"prop0": "value0", "prop1": {"this": "that"}}, "type": "Polygon"}]}},
    "transform": {"scale": [0.0005, 0.0001], "translate": [100.0, 0.0]},
    "type": "Topology"
}"#;
// Parse to Topology:
let topo = topojson_str.parse::<TopoJson>().unwrap();

// Conversion to GeoJson FeatureCollection for the "example" object:
let geojson = match topo {
    TopoJson::Topology(t) => {
        to_geojson(&t, &String::from("example"))
            .expect("Unable to convert TopoJSON to GeoJSON")
    },
    _ => unimplemented!(),
};

Structs

Geometry

Geometry Objects

NamedGeometry

One member of the 'objects' member of a Topology

Topology

Topology object

TransformParams

Transforms

Enums

Error

Error when reading to TopoJson

TopoJson

TopoJSON Objects (either Topology or Geometry)

Value

The underlying Geometry value (which may contain Position or Arc indexes)

Functions

to_geojson

Convert a TopoJSON Topology object to a GeoJSON Feature collection.

Type Definitions

Arc

Arcs (an array of position which may have been quantized and delta-encoded)

ArcIndexes

Arc indexes (an array of indexes)

Bbox

Bounding Boxes

Position

Positions