Skip to main content

shapelib/
lib.rs

1#![doc(html_root_url = "https://docs.rs/shapelib-rs/0.2.2")]
2//! Rust crate shapelib-rs supports ESRI J shapefile (C bindings)
3//!
4//! # Requirements
5//!
6//! - [ OSGeo ]( https://OSGeo.org/ )
7//! - [ OSGeo shapelib (C) ]( https://github.com/OSGeo/shapelib )
8//! - [ shapelib ]( http://shapelib.maptools.org/ )
9//! - [ ESRI J shapefile ]( https://www.esrij.com/products/japan-shp/ )
10//!
11//! link shapelib_i.lib
12//!
13
14pub mod shape;
15
16#[cfg(test)]
17mod tests {
18  use super::shape::*; // {ShapeC, c, sdup, get_pref_city, u8zs, i8zs, ShapeF};
19  use std::path::PathBuf;
20  use asciiz::u8z;
21
22  /// with [-- --nocapture] or with [-- --show-output]
23  #[test]
24  fn check_shapelib() {
25unsafe{
26    let mut shp = ShapeC::from(7, 3);
27    assert!(shp.to_int() == 21);
28    assert_eq!(c(5, 3), 15);
29}
30    assert_eq!(u8zs(b"aB\0".to_vec()).unwrap(),
31      String::from_utf8(b"aB".to_vec()).unwrap());
32  }
33
34  #[test]
35  fn check_path() {
36    let s_path: String = if cfg!(docsrs) {
37      std::env::var("OUT_DIR").unwrap()
38    }else{
39      ".".to_string()
40    }; // to keep lifetime
41    let o_path: &str = s_path.as_str();
42    if o_path != "." { return; }
43    let bp = PathBuf::from(o_path).join("shp").join("ESRIJ_com_japan_ver84");
44    println!("{}", bp.join("japan_ver84.shp").to_str().unwrap());
45    println!("{}", bp.join("japan_ver84.dbf").to_str().unwrap());
46    let s = bp.join("japan_ver84"); // to keep lifetime
47    let u = s.to_str().unwrap(); // to keep lifetime
48    let p = u8z::U8zBuf::from_u8array(u.as_bytes()); // to keep lifetime
49    let e = u8z::U8zBuf::from_u8array(b"cp932"); // to keep lifetime
50unsafe {
51    let mut shp = ShapeC::new(p.as_i8p(), e.as_i8p());
52    assert!(shp.is_valid());
53/*
54    shp.disp_record_inf();
55    let gci = shp.alloc_gci(); // same as mut
56    shp.get_shape(gci);
57    shp.free_gci(gci);
58*/
59    drop(shp);
60}
61    let shp = ShapeF::new(u, "cp932").unwrap();
62    shp.disp_record_inf().unwrap();
63    let _sci = shp.get_shp_contours(false).unwrap();
64    drop(shp);
65  }
66}