Source: helpers/sphere.js

import { polygon, featureCollection } from "@turf/helpers";

/**
 * Crée un polygone approximatif de la sphère projetée dans le plan SVG
 * et le retourne dans une FeatureCollection
 * @param {d3.GeoProjection} projection - La projection D3 utilisée pour le SVG
 * @param {number} [stepDeg=5] - Pas en degrés pour approximer la sphère
 * @returns {GeoJSON.FeatureCollection} - FeatureCollection contenant le polygone Turf de la sphère projetée
 */
export function sphere(projection, stepDeg = 5) {
  const coords = [];

  // contour supérieur (latitude 90°)
  for (let lon = -180; lon <= 180; lon += stepDeg) {
    const pt = projection([lon, 90]);
    if (pt) coords.push(pt);
  }

  // contour droit (longitude 180°)
  for (let lat = 90; lat >= -90; lat -= stepDeg) {
    const pt = projection([180, lat]);
    if (pt) coords.push(pt);
  }

  // contour inférieur (latitude -90°)
  for (let lon = 180; lon >= -180; lon -= stepDeg) {
    const pt = projection([lon, -90]);
    if (pt) coords.push(pt);
  }

  // contour gauche (longitude -180°)
  for (let lat = -90; lat <= 90; lat += stepDeg) {
    const pt = projection([-180, lat]);
    if (pt) coords.push(pt);
  }

  const poly = polygon([coords]);

  // Retourner une FeatureCollection pour être compatible avec Turf intersect
  return featureCollection([poly]);
}