draw shp file
This commit is contained in:
parent
13dda7c316
commit
c6d28848ab
139
Cargo.lock
generated
139
Cargo.lock
generated
@ -23,6 +23,15 @@ version = "1.0.70"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
|
checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "approx"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "autocfg"
|
name = "autocfg"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@ -111,7 +120,7 @@ dependencies = [
|
|||||||
"js-sys",
|
"js-sys",
|
||||||
"num-integer",
|
"num-integer",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"time",
|
"time 0.1.45",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
@ -126,6 +135,10 @@ dependencies = [
|
|||||||
"gtk4",
|
"gtk4",
|
||||||
"plotters",
|
"plotters",
|
||||||
"plotters-backend",
|
"plotters-backend",
|
||||||
|
"rand",
|
||||||
|
"rand_distr",
|
||||||
|
"rand_xorshift",
|
||||||
|
"shapefile",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -265,6 +278,16 @@ dependencies = [
|
|||||||
"syn 2.0.15",
|
"syn 2.0.15",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dbase"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e3c1a2a9e9238982f599f25b54ec2c7cf1518cc97084cf0c8da475f8a3727fe7"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
"time 0.3.20",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dirs-next"
|
name = "dirs-next"
|
||||||
version = "2.0.0"
|
version = "2.0.0"
|
||||||
@ -526,6 +549,17 @@ dependencies = [
|
|||||||
"system-deps",
|
"system-deps",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "geo-types"
|
||||||
|
version = "0.7.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a5f0b3068e1537a4b861ec3734f4aa9c317d537cf0845bf6fb6221973499d26c"
|
||||||
|
dependencies = [
|
||||||
|
"approx",
|
||||||
|
"num-traits",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.9"
|
version = "0.2.9"
|
||||||
@ -854,6 +888,12 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libm"
|
||||||
|
version = "0.2.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "link-cplusplus"
|
name = "link-cplusplus"
|
||||||
version = "1.0.8"
|
version = "1.0.8"
|
||||||
@ -934,6 +974,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
|
"libm",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1074,6 +1115,12 @@ dependencies = [
|
|||||||
"miniz_oxide 0.7.1",
|
"miniz_oxide 0.7.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ppv-lite86"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-crate"
|
name = "proc-macro-crate"
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
@ -1126,6 +1173,55 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.8.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"rand_chacha",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_distr"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
"rand",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_xorshift"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.16"
|
version = "0.2.16"
|
||||||
@ -1208,6 +1304,20 @@ name = "serde"
|
|||||||
version = "1.0.160"
|
version = "1.0.160"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
|
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.160"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.15",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_spanned"
|
name = "serde_spanned"
|
||||||
@ -1218,6 +1328,17 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "shapefile"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8f77dc980d3b70a602ad40a20e9a5137800d5271ce25ec9e2a2826ca24a4be18"
|
||||||
|
dependencies = [
|
||||||
|
"byteorder",
|
||||||
|
"dbase",
|
||||||
|
"geo-types",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "simd-adler32"
|
name = "simd-adler32"
|
||||||
version = "0.3.5"
|
version = "0.3.5"
|
||||||
@ -1320,6 +1441,22 @@ dependencies = [
|
|||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time"
|
||||||
|
version = "0.3.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"time-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time-core"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.7.3"
|
version = "0.7.3"
|
||||||
|
|||||||
@ -9,10 +9,15 @@ edition = "2021"
|
|||||||
cairo-rs = { version = "0.17.0", features = ["xlib"] }
|
cairo-rs = { version = "0.17.0", features = ["xlib"] }
|
||||||
glib = "0.17.9"
|
glib = "0.17.9"
|
||||||
gtk = { version = "0.6.6", package = "gtk4", features = ["v4_8"] }
|
gtk = { version = "0.6.6", package = "gtk4", features = ["v4_8"] }
|
||||||
|
shapefile = { version = "0.4", features = ["geo-types"] }
|
||||||
|
|
||||||
# gtk = "0.15.5"
|
# gtk = "0.15.5"
|
||||||
|
|
||||||
plotters = "0.3.4"
|
plotters = "0.3.4"
|
||||||
plotters-backend = "0.3.4"
|
plotters-backend = "0.3.4"
|
||||||
|
rand = "0.8.5"
|
||||||
|
rand_distr = "0.4.3"
|
||||||
|
rand_xorshift = "0.3.0"
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
glib-build-tools = "0.17.0"
|
glib-build-tools = "0.17.0"
|
||||||
|
|||||||
42
src/main.rs
42
src/main.rs
@ -1,12 +1,17 @@
|
|||||||
use backend::CairoBackend;
|
use backend::CairoBackend;
|
||||||
|
use plotters::prelude::*;
|
||||||
|
use rand_distr::{Distribution, Normal};
|
||||||
|
use rand_xorshift;
|
||||||
|
use shapefile;
|
||||||
|
|
||||||
use gtk::gdk::Display;
|
use gtk::gdk::Display;
|
||||||
use gtk::{
|
use gtk::{
|
||||||
gio, glib, style_context_add_provider_for_display, Application, ApplicationWindow, CssProvider,
|
gio, glib, style_context_add_provider_for_display, Application, ApplicationWindow, CssProvider,
|
||||||
StyleContext,
|
StyleContext,
|
||||||
};
|
};
|
||||||
use gtk::{prelude::*, DrawingArea};
|
use gtk::{prelude::*, DrawingArea};
|
||||||
use plotters::prelude::{ChartBuilder, IntoDrawingArea};
|
// use plotters::prelude::{ChartBuilder, IntoDrawingArea, Rectangle};
|
||||||
use plotters::style::{BLACK, WHITE};
|
use plotters::style::{HSLColor, BLACK, WHITE};
|
||||||
// use plotters::prelude::DrawingArea;
|
// use plotters::prelude::DrawingArea;
|
||||||
use window::Window;
|
use window::Window;
|
||||||
mod backend;
|
mod backend;
|
||||||
@ -43,13 +48,38 @@ fn build_ui(app: &Application) {
|
|||||||
|
|
||||||
root.fill(&WHITE);
|
root.fill(&WHITE);
|
||||||
|
|
||||||
|
let mut polygons = shapefile::read_as::<_, shapefile::Polygon, shapefile::dbase::Record>(
|
||||||
|
"/Users/ruomu/china/省界_region.shp",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let (polygon, polygon_record) = polygons.first().unwrap();
|
||||||
|
|
||||||
|
let x_range = polygon.bbox().x_range();
|
||||||
|
let y_range = polygon.bbox().y_range();
|
||||||
|
|
||||||
let mut chart = ChartBuilder::on(&root)
|
let mut chart = ChartBuilder::on(&root)
|
||||||
.margin(20)
|
.set_label_area_size(LabelAreaPosition::Left, 60)
|
||||||
.build_cartesian_2d(-2.1f64..0.6f64, -1.2f64..1.2f64).unwrap();
|
.set_label_area_size(LabelAreaPosition::Bottom, 60)
|
||||||
|
.caption("Area Chart Demo", ("sans-serif", 40))
|
||||||
|
.build_cartesian_2d(x_range[0]..x_range[1], y_range[0]..y_range[1])
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
chart.configure_mesh().draw().unwrap();
|
chart
|
||||||
|
.configure_mesh()
|
||||||
|
.disable_x_mesh()
|
||||||
|
.disable_y_mesh()
|
||||||
|
.draw()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let ring = polygon.ring(0).unwrap();
|
||||||
|
|
||||||
|
chart
|
||||||
|
.draw_series(
|
||||||
|
AreaSeries::new(ring.points().iter().map(|x| (x.x, x.y)), 0.0, &RED.mix(0.2))
|
||||||
|
.border_style(&RED),
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
});
|
});
|
||||||
|
|
||||||
window.set_child(Some(&drawing_area));
|
window.set_child(Some(&drawing_area));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user