Orange GIS
Orange GIS is an Orange add-on for loading, transforming, analysing, and
visualising geospatial data. The distribution name is orange-gis; its Python
package is orangecontrib.orange_gis because Python module names cannot contain
hyphens.
Version 0.4 targets Orange 3.40 and Python 3.11 or newer. It contains 30 Orange widgets, including local-LLM toponym extraction through Ollama.
Installation
When the package is published, install orange-gis through Orange's
Options → Add-ons interface. For a local wheel, select the generated
orange_gis-0.4.0-py3-none-any.whl in the same interface.
For development, always run pip with the Python interpreter that belongs to the target Orange installation:
& "<orange-python>" -m pip install -e ".[dev]"
The core package does not force-install Orange Text and its large language resources. Install Orange3-Text separately through Options → Add-ons for the workshop's word-cloud flow and the Toponym to Corpus widget, or use:
& "<orange-python>" -m pip install "orange-gis[text]"
Without Orange Text, the remaining Orange GIS widgets still load; Toponym to Corpus displays a focused installation message when used.
GeoPandas and standalone Orange
GeoPandas remains the supported spatial-table backend in 0.4. Removing it would not remove the compiled GEOS, PROJ, and GDAL/OGR capabilities needed by the GIS widgets. Orange GIS therefore declares GeoPandas together with Shapely, PyProj, and Pyogrio explicitly and uses Pyogrio for vector-file I/O.
On most supported Windows, macOS, and Linux/Python combinations pip installs binary wheels. If the Orange Add-ons installation fails, check the exact Orange Python environment instead of installing packages into another Python:
& "<orange-python>" -m pip install --only-binary=:all: `
"shapely>=2,<3" "pyproj>=3.6,<4" "pyogrio>=0.8,<1" "geopandas>=1,<2"
& "<orange-python>" -m orangecontrib.orange_gis.diagnostics
The first command deliberately fails when a compatible binary wheel is not available; it does not attempt a fragile local GDAL build. The diagnostic command reports the interpreter and the import status of Orange, GeoPandas, Pyogrio, Shapely, and PyProj.
The dependency design and the criteria for any future non-GeoPandas backend are documented in docs/DEPENDENCY_STRATEGY.md.
Local Ollama toponym extraction
The Ollama Toponym Extraction widget sends text only to the configured
Ollama server. The default is the local API at http://127.0.0.1:11434; no
cloud API key or Python Ollama client is required.
Before the first run:
- Install Ollama from https://ollama.com/download and restart Orange.
- Download the default multilingual model with
ollama pull qwen3:4b, or enter another installed model tag in the widget. - Connect an Orange table, select a string column, and run the widget.
Immediately before extraction, the widget checks the API and installed model list. It shows a specific popup when Ollama is not installed, when the local server is stopped, or when the selected model has not been downloaded. Ollama's structured-output JSON schema is used for the result. Models are not downloaded automatically because model files can be several gigabytes.
Map architecture
Interactive maps remain embedded in the Orange widget with QWebEngineView.
One in-process HTTP service is shared by all open map widgets:
- The first map widget starts a server bound to
127.0.0.1on a random port. - Every widget receives a private session ID and random token.
QWebEngineViewloads the map over HTTP.- Marker events return as token-protected JSON POST requests.
- Closing the last map widget schedules automatic server shutdown.
There is no server subprocess, console window, iframe wrapper, temporary HTML file, or Qt WebChannel object.
Package layout
orangecontrib.orange_gis.geo: GeoDataFrame validation and CRS helpersorangecontrib.orange_gis.llm: dependency-free local Ollama API clientorangecontrib.orange_gis.web: loopback map server and web panelorangecontrib.orange_gis.widgets: 30 Orange widgets and resourcestests: metadata, map-server, table, and Ollama-client tests
All Qt imports go through AnyQt. Result-producing text widgets retain the source Orange table before appending their result columns.
Build and validation
& "<orange-python>" -m pytest
& "<orange-python>" -m build
& "<orange-python>" -m twine check dist/*
See PUBLISHING.md for the TestPyPI, clean-Orange, and PyPI Trusted Publishing release gates.
Metadata
Release files for orange-gis 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| orange_gis-0.4.0.tar.gz | 293.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| orange_gis-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 613.9 kB
Release files / orange_gis-0.4.0.tar.gz
| Download URL | orange_gis-0.4.0.tar.gz |
|---|---|
| Size | 293.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0577edebd0bda54a97ce824915d0162e4fc99a55edfc4937b79400781506deb
|
|
BLAKE2b-256 checksum How to use checksums |
183036b82d05d5e3cbb214365c4d63866bbe228702b352a1d8ee740dcc2feacb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.12
|
Release files / orange_gis-0.4.0-py3-none-any.whl
| Download URL | orange_gis-0.4.0-py3-none-any.whl |
|---|---|
| Size | 320.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cbf2c171711ac4426ecc2a92378485df69e185e5c65cb6e33c396eb6a8e4623c
|
|
BLAKE2b-256 checksum How to use checksums |
025ea570b7e77ad1bfc9f8dba0e9c45ce7ab2fddd03a62708a51081101794adf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.12
|