logiciel libre · licence MIT

Collecte et publication d'informations géolocalisées

geocrowd reçoit des points géolocalisés par une API publique, les soumet à une modération dans un back-office, puis les publie au format GeoJSON. Un site public facultatif affiche les points sur une carte et accepte des ajouts. Le logiciel fonctionne sur un hébergement PHP mutualisé, avec une base SQLite.

GET /api/collections/bancs/points
$ curl https://votre-instance.org/api/collections/bancs/points

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": 128,
      "geometry": {
        "type": "Point",
        "coordinates": [4.8357, 45.764]
      },
      "properties": {
        "etat": "Abîmé",
        "places": 3,
        "dossier": true
      }
    }
  ]
}

Fonctionnalités

collections
Chaque jeu de données est une collection, définie dans un éditeur de schéma : champs, listes de choix, images, liens entre points, description.
api publique
Lecture en GeoJSON avec filtres par emprise, par lien et par champ renseigné. Soumission de points en JSON ou avec des images.
site public
Facultatif, servi à la racine de l'instance : carte des points publiés, fiche de chaque point, formulaires d'ajout et de proposition de modification générés à partir du schéma.
modération
Les envois sont publiés après validation dans le back-office. La modération se règle par collection.
propositions de modification
Correction d'un point publié par le public, avec un commentaire. Le back-office affiche l'état actuel et l'état proposé de chaque champ.
clés d'api
Accès à l'API restreint par clé, en option. Une clé peut être limitée à des domaines.
double authentification
Connexion au back-office par mot de passe et code TOTP. Aucun envoi d'e-mail ou de SMS n'est nécessaire.
vie privée
Images réencodées sans métadonnées. Adresses IP conservées uniquement sous forme hachée, pendant une heure. Aucun compte demandé au public.
import openstreetmap
Un script remplit une collection à partir d'une requête Overpass et la met à jour sans modifier le statut des points.
hébergement
PHP 8.1 et SQLite. Ni Composer, ni Node, ni tâche planifiée. Installation par copie des fichiers.

Fonctionnement

Exemple avec une collection de bancs publics.

  1. Définition de la collection

    La collection et ses champs sont décrits dans l'éditeur de schéma du back-office. L'API renvoie cette définition.

    définition de bancs
    { "id": "bancs", "name": "Bancs publics", "moderation": true,
      "fields": [{ "name": "etat", "label": "État", "type": "select",
                   "options": ["Bon", "Abîmé", "Cassé"] }] }
  2. Envoi d'un point

    Un formulaire, une application ou un script envoie le point à l'API. Chaque champ est validé selon son type.

    POST /api/collections/bancs/points
    curl -X POST https://votre-instance.org/api/collections/bancs/points \
      -H 'Content-Type: application/json' \
      -d '{"lat": 45.764, "lng": 4.8357, "properties": {"etat": "Abîmé"}}'
    # {"status":"pending"}
  3. Modération

    Le point apparaît dans la page Modération du back-office, à sa position sur la carte. Il est validé, modifié, refusé ou supprimé.

  4. Publication

    Une fois validé, le point est renvoyé par GET /api/collections/bancs/points et affiché sur le site public s'il est activé.

Installation

Prérequis : PHP 8.1 ou supérieur, extensions pdo_sqlite, gd et openssl.

  1. Copie des fichiers sur l'hébergement (archive du dépôt).
  2. Droits d'écriture sur data/.
  3. Création du premier compte sur /admin/, avec la double authentification.
  4. Création d'une collection dans l'éditeur de schéma.
  5. Activation du site public, en option, dans la page « Site public ».

Code source

Le code source est publié sous licence MIT. Il est écrit en PHP et en JavaScript, sans dépendance à installer. Les questions et les contributions passent par les tickets du dépôt.