The map component

Visualize SQL data on a map.

The map component displays a custom interactive map with markers on it.

Useful in combination with PostgreSQL's PostGIS or SQLite's spatialite, to create custom visualizations of your geospatial data.

The map component is also compatible with non-geospatial databases, by manually setting the latitude and longitude parameters.

Example Use Cases

  1. Store Locator: Build an interactive map to find the nearest store information using SQL-stored geospatial data.
  2. Delivery Route Optimization: Visualize the results of delivery route optimization algorithms.
  3. Sales Heatmap: Identify high-performing regions by mapping sales data stored in SQL.
  4. Real-Time Tracking: Create dynamic dashboards that track vehicles, assets, or users live using PostGIS or MS SQL Server geospatial time series data.
  5. Demographic Insights: Map customer demographics or trends geographically to uncover opportunities for growth or better decision-making.

Introduced in SQLPage v0.8.0.

Top-level parameters

name required type description
attribution

HTML

Text to display at the bottom right of the map. Defaults to "© OpenStreetMap".
class

TEXT

class attribute added to the container in HTML. It can be used to apply custom styling to this item through css. Added in v0.18.0.
id

TEXT

id attribute added to the container in HTML. It can be used to target this item through css or for scrolling to this item through links (use "#id" in link url).
latitude

REAL

Latitude of the center of the map. If omitted, the map will be centered on its markers.
longitude

REAL

Longitude of the center of the map.
max_zoom

INTEGER

How far the map can be zoomed in. Defaults to 18. Added in v0.15.2.
tile_source

URL

Custom map tile images to use, as a URL. Defaults to "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png". Added in v0.15.2.
zoom

REAL

Zoom Level to apply to the map. Defaults to 5.

Row-level parameters

name required type description
latitude REQUIRED

REAL

Latitude of the marker. Required only if geojson is not set.
longitude REQUIRED

REAL

Longitude of the marker. Required only if geojson is not set.
color

COLOR

Background color of the marker on the map. Requires "icon" to be set.
description

TEXT

Plain text description of the marker, to be displayed in a tooltip when the marker is clicked.
description_md

TEXT

Description of the marker, in markdown, rendered in a tooltip when the marker is clicked.
geojson

JSON

A GeoJSON geometry (line, polygon, ...) to display on the map. Can be styled using geojson properties using the name of leaflet path options. Introduced in 0.15.1. Accepts raw strings in addition to JSON objects since 0.15.2.
icon

ICON

Name of the icon to use for the marker
link

TEXT

A link to associate to the marker's title. If set, the marker tooltip's title will be clickable and will open the link.
size

INTEGER

Size of the marker icon. Requires "icon" to be set. Introduced in 0.15.2.
title

TEXT

Title of the marker, displayed on hover and in the tooltip when the marker is clicked.

Example 1

Adding a marker to a map

Showing how to place a marker on a map. Useful for basic location displays like showing a single office location, event venue, or point of interest. The marker shows basic hover and click interactions.

select 
    'map' as component;
select 
    'New Delhi' as title,
    28.6139     as latitude,
    77.209      as longitude;

Result

Loading map...

Example 2

Advanced map customization using GeoJSON and custom map tiles

This example demonstrates using topographic map tiles, custom marker styling, and clickable markers that link to external content - perfect for educational or tourism applications.

It uses GeoJSON to display polygons and lines.

  • You can generate GeoJSON data from PostGIS geometries using the ST_AsGeoJSON function.
  • In spatialite, you can use the AsGeoJSON function.
  • In MySQL, you can use the ST_AsGeoJSON() function.
select 
    'map' as component,
    5     as zoom,
    8     as max_zoom,
    600   as height,
    -25   as latitude,
    28    as longitude,
    'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png' as tile_source,
    ''    as attribution;
select 
    'peace' as icon,
    20      as size,
    'https://en.wikipedia.org/wiki/Nelson_Mandela' as link,
    '{"type":"Feature", "properties": { "title":"Mvezo, Birth Place of Nelson Mandela" }, "geometry": { "type":"Point", "coordinates": [28.49, -31.96] }}' as geojson;

Result

Loading map...

Example 3

Maps with links and rich descriptions

Demonstrates how to create an engaging map with custom icons, colors, rich descriptions with markdown support, and connecting points with lines. Perfect for visualizing multi-dimensional relationships between points on a map, like routes between locations.

select 
    'map'   as component,
    'Paris' as title,
    11      as zoom,
    48.85   as latitude,
    2.34    as longitude;
select 
    'Notre Dame'             as title,
    'building-castle'        as icon,
    'indigo'                 as color,
    48.853                   as latitude,
    2.3498                   as longitude,
    'A beautiful cathedral.' as description_md,
    'https://en.wikipedia.org/wiki/Notre-Dame_de_Paris' as link;
select 
    'Eiffel Tower' as title,
    'tower'        as icon,
    'yellow'       as color,
    48.8584        as latitude,
    2.2945         as longitude,
    'A tall tower. [Wikipedia](https://en.wikipedia.org/wiki/Eiffel_Tower)' as description_md;
select 
    'Tower to Cathedral'      as title,
    JSON('{"type":"LineString","coordinates":[[2.2945,48.8584],[2.3498,48.8530]]}') as geojson,
    'teal'                    as color,
    'A nice 45 minutes walk.' as description;

Result

Paris

Loading map...

Example 4

Abstract geometric visualizations

Example showing how to create abstract geometric visualizations without a base map. Useful for displaying spatial data that doesn't need geographic context, like floor plans, seating charts, or abstract 2D data visualizations.

select 
    'map' as component,
    FALSE as tile_source;
select 
    'MySQL'                   as title,
    'red'                     as color,
    'The litteral red square' as description,
    JSON('{"type":"Polygon","coordinates":[[[0,0],[0,4],[4,4],[4,0],[0,0]]]}') as geojson;
select 
    'SQLite' as title,
    'blue'   as color,
    'This 2D shape was generated by a SQL query.' as description,
    JSON('{"type":"Polygon","coordinates":[[[5,0],[9,0],[7,4],[5,0]]]}') as geojson;

Result

Loading map...

See also: other components