17 releases

0.7.3 Mar 2, 2025
0.7.0 Nov 27, 2024
0.6.3 Feb 28, 2024
0.6.1 Oct 31, 2023
0.2.2 Jul 8, 2019

#189 in Geospatial

Download history 51/week @ 2024-12-04 30/week @ 2024-12-11 7/week @ 2024-12-18 5/week @ 2025-01-01 42/week @ 2025-01-08 24/week @ 2025-01-15 196/week @ 2025-01-22 29/week @ 2025-01-29 75/week @ 2025-02-05 82/week @ 2025-02-12 19/week @ 2025-02-19 190/week @ 2025-02-26 46/week @ 2025-03-05 5/week @ 2025-03-12 13/week @ 2025-03-19

257 downloads per month
Used in 4 crates

ISC license

44KB
853 lines

geo-svg

This crate is a lib to generate SVG strings from geo-types.

crate.io docs.rs

Below is an example of a geometry collection rendered to SVG.

example

Features

  • GeometryCollection and all variants of Geometry are supported
  • the viewport size is automatically computed to contain all shapes
  • style and formatting options are available
  • the image size can be set in absolute units such as cm or px.

Example

The following will show how to convert a line to a SVG string. The to_svg method is provided by the ToSvg trait which is implemented for all geo-types.

use geo_types::{Coordinate, Line, Point};
use geo_svg::{Color, ToSvg};
let point = Point::new(10.0, 28.1);
let line = Line::new(
    Coordinate { x: 114.19, y: 22.26 },
    Coordinate { x: 15.93, y: -15.76 },
);

let svg = point
    .to_svg()
    .with_radius(2.0)
    .and(line.to_svg().with_stroke_width(2.5))
    .with_fill_color(Color::Named("red"))
    .with_stroke_color(Color::Rgb(200, 0, 100))
    .with_fill_opacity(0.7);

println!("{}", svg);

Result

<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet" viewBox="7 -18.26 109.69 49.36"><circle cx="10" cy="28.1" r="2" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)"/><path d="M 114.19 22.26 L 15.93 -15.76" fill="red" fill-opacity="0.7" stroke="rgb(200,0,100)" stroke-width="2.5"/></svg>

Dependencies

~5MB
~101K SLoC