Skip to content

Views to display and interact with geographical objects and cartographic layers for UI

License

Notifications You must be signed in to change notification settings

OpenSmock/GeoView

Repository files navigation

Pharo 12 Pharo 13

License Unit tests

GeoView

image

GeoView is a library for displaying and interacting with geographical objects and cartographic layers in a user interface.

GeoView’s architecture is designed to support multiple graphics backends. Currently, the default and only supported backend is Bloc, using the Alexandrie library. Thanks to its integration with Bloc, GeoView also works within Toplo UI views.

🔧 Key Architectural Features

  • Graphics backend agnostic
    GeoView is designed to be independent of any specific graphics backend. The default implementation uses Bloc/Alexandrie.

  • Multiple levels of user-facing APIs
    GeoView provides several API layers to suit different abstraction levels:

    • High-level API
      Work directly with geographic data using real-world units like latitude/longitude and meters.
    • Intermediate-level API
      Provides access to cartesian coordinates (x, y, z) for spatial logic and control.
    • Low-level API
      Works in display/device coordinates (pixels, points), ideal for low-level rendering customization.
  • Fully customizable rendering
    Visual appearance is completely decoupled from rendering technology, allowing flexible styling.

🧩 Built-in Geographic Components

GeoView includes a library of ready-to-use geographic objects, such as:

  • Circles
  • Lines
  • Points
  • Polygons
  • Labels
  • And more (non-exhaustive list)

These built-in components are designed to cover common geospatial visualization needs and can be extended or customized.

In addition, GeoView provides a layer-based system to organize and manage rendering. Layers are a flexible mechanism that:

  • Allow grouping of any kind of geographic or custom object
  • Control visibility, rendering order, and interactions independently
  • Are not limited to built-in objects — you can use layers for custom components or specialized rendering logic
  • Support splitting the rendering of a single object type across multiple layers
    (e.g., you can render position icons in one layer and their corresponding labels in another, to better manage z-order or interaction logic)

This approach gives developers fine-grained control over how geographical content is displayed and interacted with.

✨ Others features

  • Simplified symbology management
    Define and apply visual styles (e.g., color, icons) to geographic objects easily and consistently.

  • Support for multiple map projections
    Allows working with different geographic projections.
    Note: The map data provider must support the selected projection.

  • Picking API
    Enable object selection and interaction through pointer events.

  • Optional integration with Molecule
    Seamlessly plug into the Molecule component framework if desired.

📦 Status

GeoView is in active development but already powers many UI applications and prototypes involving geospatial data.


Prerequisites

Make sure your Bloc backend uses Alexandrie, as other backends are not yet supported.

Getting Started

Full version installation

To install GeoView with all features and dependencies, simply execute the following script in your Pharo image:

Metacello new
   baseline: 'GeoView';
   repository: 'github://OpenSmock/GeoView:main/src';
   load.

Minimal version (Core) installation

If you prefer to install only the core version of GeoView (without Molecule component framework integration), use the following script:

Metacello new
   baseline: 'GeoView';
   repository: 'github://OpenSmock/GeoView:main/src';
   load: 'Core'.

Dependencies

Core :

Default/Full adding :

Note: Bloc and Alexandrie will soon be integrated into Pharo, at which point this dependency will be removed.

License

This project is licensed under the MIT License - see the LICENSE file for details.