gdal 0.1.1

GDAL bindings for Rust
Documentation
use vector::{Geometry, ToGdal};
use geo;
use geo::ToGeo;

#[test]
fn test_import_export_point() {
    let wkt = "POINT (1 2)";
    let coord = geo::Coordinate{x: 1., y: 2.};
    let geo = geo::Geometry::Point(geo::Point(coord));

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

#[test]
fn test_import_export_multipoint() {
    let wkt = "MULTIPOINT (0 0,0 1,1 2)";
    let coord = vec!(
        geo::Point(geo::Coordinate{x: 0., y: 0.}),
        geo::Point(geo::Coordinate{x: 0., y: 1.}),
        geo::Point(geo::Coordinate{x: 1., y: 2.}),
    );
    let geo = geo::Geometry::MultiPoint(geo::MultiPoint(coord));

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

#[test]
fn test_import_export_linestring() {
    let wkt = "LINESTRING (0 0,0 1,1 2)";
    let coord = vec!(
        geo::Point(geo::Coordinate{x: 0., y: 0.}),
        geo::Point(geo::Coordinate{x: 0., y: 1.}),
        geo::Point(geo::Coordinate{x: 1., y: 2.}),
    );
    let geo = geo::Geometry::LineString(geo::LineString(coord));

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

#[test]
fn test_import_export_multilinestring() {
    let wkt = "MULTILINESTRING ((0 0,0 1,1 2),(3 3,3 4,4 5))";
    let strings = vec!(
        geo::LineString(vec!(
            geo::Point(geo::Coordinate{x: 0., y: 0.}),
            geo::Point(geo::Coordinate{x: 0., y: 1.}),
            geo::Point(geo::Coordinate{x: 1., y: 2.}),
        )),
        geo::LineString(vec!(
            geo::Point(geo::Coordinate{x: 3., y: 3.}),
            geo::Point(geo::Coordinate{x: 3., y: 4.}),
            geo::Point(geo::Coordinate{x: 4., y: 5.}),
        )),
    );
    let geo = geo::Geometry::MultiLineString(geo::MultiLineString(strings));

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

fn square(x0: isize, y0: isize, x1: isize, y1: isize) -> geo::LineString {
    geo::LineString(vec!(
        geo::Point(geo::Coordinate{x: x0 as f64, y: y0 as f64}),
        geo::Point(geo::Coordinate{x: x0 as f64, y: y1 as f64}),
        geo::Point(geo::Coordinate{x: x1 as f64, y: y1 as f64}),
        geo::Point(geo::Coordinate{x: x1 as f64, y: y0 as f64}),
        geo::Point(geo::Coordinate{x: x0 as f64, y: y0 as f64}),
    ))
}

#[test]
fn test_import_export_polygon() {
    let wkt = "POLYGON ((0 0,0 5,5 5,5 0,0 0),\
                        (1 1,1 2,2 2,2 1,1 1),\
                        (3 3,3 4,4 4,4 3,3 3))";
    let outer = square(0, 0, 5, 5);
    let holes = vec!(square(1, 1, 2, 2), square(3, 3, 4, 4));
    let geo = geo::Geometry::Polygon(geo::Polygon(outer, holes));

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

#[test]
fn test_import_export_multipolygon() {
    let wkt = "MULTIPOLYGON (\
        ((0 0,0 5,5 5,5 0,0 0),\
         (1 1,1 2,2 2,2 1,1 1),\
         (3 3,3 4,4 4,4 3,3 3)),\
        ((4 4,4 9,9 9,9 4,4 4),\
         (5 5,5 6,6 6,6 5,5 5),\
         (7 7,7 8,8 8,8 7,7 7))\
        )";
    let multipolygon = geo::MultiPolygon(vec!(
        geo::Polygon(
            square(0, 0, 5, 5),
            vec!(square(1, 1, 2, 2), square(3, 3, 4, 4)),
        ),
        geo::Polygon(
            square(4, 4, 9, 9),
            vec!(square(5, 5, 6, 6), square(7, 7, 8, 8)),
        ),
    ));
    let geo = geo::Geometry::MultiPolygon(multipolygon);

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}

#[test]
fn test_import_export_geometrycollection() {
    let wkt = "GEOMETRYCOLLECTION (POINT (1 2),LINESTRING (0 0,0 1,1 2))";
    let coord = geo::Coordinate{x: 1., y: 2.};
    let point = geo::Geometry::Point(geo::Point(coord));
    let coords = vec!(
        geo::Point(geo::Coordinate{x: 0., y: 0.}),
        geo::Point(geo::Coordinate{x: 0., y: 1.}),
        geo::Point(geo::Coordinate{x: 1., y: 2.}),
    );
    let linestring = geo::Geometry::LineString(geo::LineString(coords));
    let collection = geo::GeometryCollection(vec!(point, linestring));
    let geo = geo::Geometry::GeometryCollection(collection);

    assert_eq!(Geometry::from_wkt(wkt).to_geo(), geo);
    assert_eq!(geo.to_gdal().wkt(), wkt);
}