Flarum Map extension
A Flarum extension.
Display a map in flarum in those ways:
insert a BBCode in a post
upload a .gpx
file to display it on a map and a download link
upload a GeoJSON
file (.geojson
of .json
) display it on a map and a download link
To include a map in your post, there's an icon in the bar when composing:
It will insert that BBCode:
[map provider=osm style=street zoom=13 title='Marker title' desc='Marker pop-up content. Leave title and desc both empty to hide the marker.']WHERE[/map]
The WHERE
value can be any location:
Nonceveux, Liège, Belgium
as a plain text place name.
50.45626367636966, 5.744007900692774
as coordinates to pin point an exact place.
You can also change the zoom level by changing the zoom
attribute within the BBCode:
# Zoom=13 can fit my village
[map provider=osm style=street zoom=13]Nonceveux[/map]
# Zoom=8 can fit my country
[map provider=osm style=street zoom=8]Belgium[/map]
Valid values for zoom
are between 0
(world) and 18
(house).
How to customize the map
The post above was written like this:
# Mapbox satelite streets (need to register at MapBox.com to get a free API key) :
[map provider=mapbox style=mapbox/satellite-streets-v11 zoom=15]Nonceveux, Liège, Belgium[/map]
# GPX example:
[upl-file uuid=e89405b4-7c99-4af6-9fb3-8bd80df9ea64 size=2kB url=http://localhost/assets/files/2022-10-31/1667250318-401743-gpxexample.gpx]gpxexample.gpx[/upl-file]
# GeoJSON example:
[upl-file uuid=022d8589-8c9c-4e63-b0ad-1942b5a4b480 size=133kB url=http://localhost/assets/files/2022-10-11/1665509211-565647-trail-center-ambleve.geojson]trail-center-ambleve.geojson[/upl-file]
Supported tile layers
Free, no registration needed: OpenStreetMap.
| Provider | Style | Tiles type | Description |
| -------- | ----- | ---------- | ----------- |
| osm
| street
| Rasters | OpenStreetMap, default. |
MapTiler
Free, API key needed at https://www.maptiler.com/
| Provider | Style | Tiles type | Description |
| -------- | ----- | ---------- | ----------- |
| maptiler
| basic-v2
| Vectors | Basic (basic-v2) |
| maptiler
| basic-4326
| Vectors | Basic EPSG:4326 (basic-4326) |
| maptiler
| bright-v2
| Vectors | Bright (bright-v2) |
| maptiler
| openstreetmap
| Vectors | OpenStreetMap (openstreetmap) |
| maptiler
| outdoor
| Vectors | Outdoor (outdoor) |
| maptiler
| pastel
| Vectors | Pasterl (pastel) |
| maptiler
| hybrid
| Vectors | Satelite hybrid (hybrid) |
| maptiler
| streets-v2
| Vectors | Street (streets-v2) |
| maptiler
| toner
| Vectors | Toner (toner) |
| maptiler
| topo
| Vectors | Topo (topo) |
| maptiler
| topographique
| Vectors | Topographique (topographique) |
| maptiler
| voyager
| Vectors | Voyager (voyager) |
| maptiler
| winter
| Vectors | Winter (winter) |
MapBox
Free, API key needed at https://www.mapbox.com/
| Provider | Style | Tiles type | Description |
| -------- | ----- | ---------- | ----------- |
| mapbox
| mapbox/streets-v11
| Vectors | Streets (mapbox/streets-v11) |
| mapbox
| mapbox/outdoors-v11
| Vectors | Outdoors (mapbox/outdoors-v11) |
| mapbox
| mapbox/light-v10
| Vectors | Light (mapbox/light-v10) |
| mapbox
| mapbox/dark-v10
| Vectors | Dark (mapbox/dark-v10) |
| mapbox
| mapbox/satellite-v9
| Vectors | Satelite (mapbox/satellite-v9) |
| mapbox
| mapbox/satellite-streets-v11
| Vectors | Satelite streets (mapbox/satellite-streets-v11) |
| mapbox
| mapbox/navigation-day-v1
| Vectors | Navigation day (mapbox/navigation-day-v1) |
| mapbox
| mapbox/navigation-night-v1
| Vectors | Navigation night (mapbox/navigation-night-v1) |
ThunderForest
Free, API key needed at https://www.thunderforest.com/
| Provider | Style | Tiles type | Description |
| -------- | ----- | ---------- | ----------- |
| thunderforest
| cycle
| Rasters | cycle |
| thunderforest
| transport
| Rasters | transport |
| thunderforest
| landscape
| Rasters | landscape |
| thunderforest
| outdoors
| Rasters | outdoors |
| thunderforest
| transport-dark
| Rasters | transport-dark |
| thunderforest
| spinal-map
| Rasters | spinal-map |
| thunderforest
| pioneer
| Rasters | pioneer |
| thunderforest
| mobile-atlas
| Rasters | mobile-atlas |
| thunderforest
| neighbourhood
| Rasters | neighbourhood |
| thunderforest
| atlas
| Rasters | atlas |
Installation
Composer
Install with composer:
composer require jeromegillard/map:"*"
Configure extensions
- Enable the
FoF Uploads
extension.
- Enable the
Map
extension.
- Configure
FoF Uploads
to add the new GPX Template:
- Write
^application\/.*(gpx|json|xml|geojson|geo.json)
mime type upload adapter mapping.
- Select
Map
as template.
- Click the
|+|
button to add the mapping
- Then add
gpx,json,geojson
extensions to this list:
- :warning: Save changes (bottom of the screen)
- Configure the
Map
extension (optional).
Updating
composer update jeromegillard/map:"*"
php flarum migrate
php flarum cache:clear
Go further
GeoJSON
FeatureCollection can be displayed.
As an example, to generate the GeoJSON file assets/GeoJSON.example.json
to get a view of all trails of the Amblève Trail Center, follow those steps:
# Go to https://overpass-turbo.eu/
# Input that query:
[out:json][timeout:25];
(
relation(13959062);>>;
)->.a;
rel.a;
out body;
>;
out skel qt;
# Click export, as GeoJSON
Development
I've prepared a all-in-one docker-compose
file to get up and running to develop this Flarum extension easily.
Prepare the environment
- create the
flarum-dev.env.local
file. There's an example just nearby.
- Spin the containers:
docker-compose up -d
- Enter the container:
docker exec -it -w /flarum/app flarum-dev /bin/sh
- Allow local packages sources:
composer config repositories.0 path "packages/*"
- Install the extension:
composer require jeromegillard/map *@dev
- Wait for the container to start. It might be long stuck on last log "[INFO] Setting folder permissions", just wait.
- You can browse to
http://localhost
when logs shows "[INFO] End of startup script. Forum is starting."
- To rebuild the front-end, outside the container, go to the
js
folder and do npm install
then npm run dev
(you'll need npm installed on your computer).
Links