6 releases

Uses new Rust 2024

new 0.2.0 Jul 3, 2025
0.1.10 Jun 21, 2025

#77 in Geospatial

Download history 245/week @ 2025-06-11 220/week @ 2025-06-18 17/week @ 2025-06-25 140/week @ 2025-07-02

622 downloads per month

MIT license

525KB
2.5K SLoC

Geello

Geello (GeO_Vello) try to render geo data through GEO and VELLO

Geello

[!WARNING] Geello is a testing project in an alpha state.

v0.3.0 Work

  • Calc image size with x/y resolution or WMTS zoom
  • More Renderer, graph renderer
  • More Renderer, animation renderer
  • More docs

As a library

Geello can be used as a library to render geo data into a texture.

  1. Use RenderedGeometry::new() to create new geometry.

  2. Read file or Create a RenderOption.

  3. Set some options, like RenderRegion or Transform.

  4. Get Vello values just like Vello.

  5. Run one of functions below, or with _with_new_texture.

  6. Use return value to draw on canvas or encode to file.

geello::render_to_texture(
    geoms: &mut Vec<RenderedGeometry>,
    device: &Device,
    queue: &Queue,
    renderer: &mut Renderer,
    texture: &Texture,
    transform: Affine,
    option: &RenderOption,
)
geello::render_to_buffer(
    geoms: &mut Vec<RenderedGeometry>,
    device: &Device,
    queue: &Queue,
    renderer: &mut Renderer,
    texture: &Texture,
    transform: Affine,
    option: &RenderOption,
)

As a server

Geello can be used as a server to provide map render (real-time/cache) services like WMTS/WMS.

cargo r --release --features server

WMTS LIKE

// real-time
http://addr:port/wmts/real-time

// cache
http://addr:port/wmts/cache

//params
layers=${/path/to/json} // use `,` split multi layer, render as order
styles=${/path/to/render_option} // render_option to filter rendered geometry
x=${x}
y=${y}
z=${z}
format=${format} // like image/png or png

WMS LIKE

http://addr:port/wms

// params
layers=${/path/to/json} // use `,` split multi layer, render as order
styles=${/path/to/render_option} // render_option to filter rendered geometry
format=${format} // like image/png or png
width=${width}
height=${height}
bbox=${bbox}

What's More -> Animation Or Dynamic Data

Geello use web socket to handle real-time animation or dynamic data.

Such as a point that grows from small to large for representing importance.

Or a real-time route of a car.

ws://addr:port/ws/anim

// params
layers=${/path/to/json} // use `,` split multi layer, render as order
styles=${/path/to/render_option} // render_option to filter rendered geometry
format=${format} // like image/png or png
width=${width}
height=${height}
bbox=${bbox}

Web Map example

When run as server, Geello provides a web map example by open http://addr:port/map/index.html in browser.

Docker

Package Page: geello

Run the docker image:

[!WARNING] Need NVIDIA Container Toolkit installed

Some how docker need xhost to Xserver access, WGPU need that to use GPU otherwise will use CPU, find some issues and docs:

wgpu/issues/2123-1012233430: get the reason

wgpu/issues/2123-1428961445: answer the question

archlinux docs: how to enable Xserver access, need xhost installed

docker run --rm --gpus all -e "DISPLAY=:0.0" -e "GEELLO_ADDRESS=0.0.0.0" --mount type=bind,src=/tmp/.X11-unix,dst=/tmp/.X11-unix --device=/dev/dri:/dev/dri -p 8000:8000 ghcr.io/deadpoetspoon/geello:latest

Contributing

Please!

License

The code is available under the MIT license.

Dependencies

~22–59MB
~1M SLoC