Aller au contenu

Apportez vos propres données

Les superpositions privées vivent sous le préfixe de votre compte sur R2 et se peignent au-dessus du fond de carte du Canada et des catalogues sectoriels. Le fichier est à vous de préparer. unmap le stocke et le dessine. Il ne le reprojette pas, ne l'indexe pas, ne le cherche pas et ne l'identifie pas.

Limites

PlafondValeur
Superpositions par compte10
Taille par superposition5 Mo
FormatsGeoJSON (FeatureCollection, Feature ou une géométrie) et PMTiles
AuthClé API sur /byod, cookie de session sur /account/byod

Un fichier trop grand ou une 11e superposition est 400 bad_request. Une superposition reste tant que vous ne la supprimez pas. Les clés d'un même compte partagent les dix places. Une clé sans compte garde ses propres fichiers, et le tableau de bord liste le compte, donc ces fichiers n'y figurent pas. C'est inclus avec l'accès à l'API. Ce n'est pas un complément séparé, et chaque requête compte comme un appel byod.

Téléverser, lister, supprimer

curl -X POST "https://api.unmap.dev/byod?name=leases" \
  -H "Authorization: Bearer $UNMAP_API_KEY" \
  -H "Content-Type: application/geo+json" \
  --data-binary @leases.geojson
{
  "id": "ovl_aabbccddeeff",
  "name": "leases",
  "kind": "geojson",
  "bytes": 1284,
  "createdAt": "2026-09-11T18:00:00.000Z",
  "url": "https://api.unmap.dev/byod/ovl_aabbccddeeff/data",
  "overlay": "byod:ovl_aabbccddeeff"
}

GET /byod liste vos superpositions et répète les plafonds. DELETE /byod/{id} retire l'objet. GET /byod/{id}/data est le fichier lui-même (même clé). Un multipart file + name facultatif est aussi accepté. L'onglet données du tableau de bord téléverse, liste et supprime avec la session du compte. La carte charge encore le fichier avec votre clé API.

Il n'y a pas de remplacement. Un nouveau téléversement crée un nouvel id, et supprimer la superposition précédente libère la place. Un style qui nomme encore l'ancien id est un 400.

Les objets sont stockés à byod/{accountId}/{id}. Un autre compte ne peut ni lister, ni lire, ni supprimer les vôtres : la réponse est 404, pas une confirmation que l'id existe.

Depuis le SDK

import { Unmap } from "@unmap/sdk";
const unmap = new Unmap({ key: process.env.UNMAP_API_KEY! });
 
const input = document.querySelector<HTMLInputElement>("#overlay")!;
const { overlay } = await unmap.byod.upload(input.files![0]!, { name: "Zones de service" });
const map = new Unmap({ key: process.env.UNMAP_API_KEY!, container: "#map", overlays: [overlay] });
 
const { overlays, limits } = await unmap.byod.list();
await unmap.byod.delete("ovl_aabbccddeeff");

upload() retourne l'enregistrement complet : overlay est le jeton byod:<id> qu'attend overlays, non l'id nu. Passez un File directement depuis un champ de formulaire et l'environnement se charge de l'encodage multipart. Un objet simple part en GeoJSON, et des octets bruts partent en PMTiles sauf si vous passez { kind: "geojson" }. Un téléversement refusé lève une CatalogError avec status 400 et code bad_request, qui porte la raison donnée par le serveur. Les téléversements et les suppressions ne sont jamais relancés : une réponse perdue ne peut pas stocker deux fois le même fichier.

Le fichier

Envoyez le GeoJSON en longitude, latitude, en degrés. unmap ne reprojette pas. Un fichier projeté est stocké tel quel et dessiné au mauvais endroit.

Le téléversement accepte le corps quand le JSON s'analyse et que son type de premier niveau est un type GeoJSON, ou quand un fichier PMTiles commence par l'en-tête PMTiles. Il ne vérifie pas que les coordonnées sont des nombres, ni qu'elles tombent au Canada.

MapLibre télécharge tout le GeoJSON au chargement de la carte. Cinq mégaoctets, c'est le fichier entier. Une zone plus grande demande une archive PMTiles, que vous ajoutez vous-même à la carte.

La peindre sur un style

Les superpositions GeoJSON se composent par le crochet overlays= existant :

GET /styles/muted.json?overlays=byod:ovl_aabbccddeeff,municipalities

overlays= remplace profile. Listez dans le même paramètre chaque couche du catalogue que vous voulez encore.

const map = new Unmap({
  key,
  style: "muted",
  overlays: ["byod:ovl_aabbccddeeff", "municipalities"],
});

unmap ajoute une source GeoJSON vers /byod/{id}/data?key= et deux couches, au-dessus des routes et sous les étiquettes, dans la couleur de limite du style :

  • Point et MultiPoint sont des cercles.
  • LineString, MultiLineString, Polygon et MultiPolygon sont des traits. Il n'y a pas de remplissage.
  • Une GeometryCollection ne correspond à aucune des deux couches : elle est stockée et n'est pas dessinée.
  • Les attributs restent dans le fichier. Ces couches ne les lisent pas, donc rien n'est étiqueté et rien n'est coloré à partir d'une propriété.

Votre clé API est dans cette URL de données. MapLibre récupère le fichier depuis le navigateur et ne peut pas envoyer d'en-tête Authorization, donc traitez le document de style comme un secret. Un id manquant est un 400. Supprimer une superposition ne réécrit pas un style qui la nomme encore; cette requête reste un 400 tant que vous ne retirez pas le jeton.

PMTiles

Un téléversement PMTiles est stocké et servi à /byod/{id}/{z}/{x}/{y}?key=. Ajoutez la source vectorielle vous-même et nommez son source-layer. La composition de style ne devine pas ce nom, donc overlays=byod: sur un id PMTiles est un 400. GET /byod/{id} renvoie le nom, le type et la taille, pas les noms de couches dans l'archive. Une tuile hors de la plage de zoom de l'archive, ou une tuile sans octets, est un 204 sans corps.

Ce que ce n'est pas

  • Un endroit où interroger, joindre ou restyler les attributs de votre fichier.
  • Un complément facturé. L'usage est compté comme byod.
  • Un remplacement du catalogue de couches public.

Prochaines étapes

  • Couches pour les superpositions du catalogue, sans rien téléverser.
  • L'API de cartes pour la composition d'une superposition sur un style.
  • Forfaits et limites pour la façon dont chacune de ces requêtes compte comme un appel.