mardi 28 octobre 2025

Travail sur images satellite Google avec QGIS

1) Il faut une extension dans QGIS

Pour obtenir les images satellite de Google.
Dans le menu, sélectionner "Extensions"
Extension Quick Map Services. La télécharger.

2) Télécharger l'image satellite

Dans le menu, sélectionner "internet" , puis Google
Zoomer sur la vue satellitaire

3) Tracer des lignes

Réglages : Vue > Panneaux > Style de couche
Ajouter une couche shapefile : icone "Nouvelle couche shapefile"
Basculer en mode édition (icone crayon)
Ajouter une identité linéaire (bouton)

Dans le panneau "Style de couche" : ajuster la couleur et l'épaisseur de la ligne (exemple 2 mm)

La souris prend la forme d'un cercle.
Dessiner point à point.
A la fin, cliquer à droite : le trait coloré apparaît

4) Exporter en KML

Sélectionner la couche shapefile.
Clic à droite > Exporter > Sauvegarder les entités sous > Format KML dans dossier sélectionné.

5) Vérification dans Google Earth

Ouvrir le fichier kml dans Google Earth


samedi 11 octobre 2025

Des MB Tiles avec QGis

 Dans QGis :

Couche > Ajouter une couche > Ajouter une couche WMS/WMTS

Explorateur (icone dossier) > WMS/WMTS > Serveur IGN > Ortho 20 cm

La carte de France apparaît en tout petit (lent à apparaître) > Zoomer

Traitement > Boite à outils > Outils Raster > Générer des tuiles XYZ (MBTiles)

Si la boîte à outils n’est pas ouverte, vous la trouverez dans le menu principal de QGIS,  onglet traitement > cliquez sur « Boîte à outils » (ou utiliser le raccourci clavier : Ctrl + Alt + T).

 Boite de dialogue avec options :

  • Emprise > Dessiner sur le canevas de carte
  • Dessiner avec la souris
  • Zoom minimum : 10 par exemple
  • Zoom maximum : 18 par exemple
  • DPI : 300 par exemple
  • Format de tuiles : JPG
  • Qualité : 95%
  • Sortie : choisir un nom et un dossier.
Une barre d'éxécution apparaît de 0 à 100%

Voir également ce tuto.


mercredi 8 octobre 2025

Ma boîte à outils POI

 Les POI (Points Of Interest) ou Points d'intérêt sont les petits "cailloux blancs" qu'on laisse sur un trajet pour se souvenir, bien après, de certains lieux marquants.

Ce trajet peut être une excursion touristique ou géologique, une randonnée pédestre, la visite d'un musée.

Une visite est un ensemble structuré de POIs.

Un POI comporte ou peut comporter différents objets :

  • un ID ou identificateur
  • un titre (obligatoire)
  • une géolocalisation GPS (obligatoire)
  • un commentaire textuel (facultatif)
  • une image ou une photo (facultatif)
  • un commentaire audio (facultatif)
  • une vidéo (facultative).
Puisqu'il est obligatoirement géolocalisé, chaque POI d'une visite peut être représenté par un marqueur sur un fond de carte. Par exemple, une épingle sur un fond de carte Open Street Map.

Il y a deux aspects dans une visite :
  • sa construction
  • sa visualisation

Construire une visite consiste à décrire une succession de POIs, en fournissant pour chaque POI le maximum des objets qu'on vient de nommer. On peut par exemple choisir une photo ou une vidéo captée avec son smartphone,ou encore enregistrer un commentaire vocal descriptif du POI.

Visualiser une visite consiste à suivre des POIs sur une carte. Cette carte, de manière élémentaire, peut être une carte OSM (OpenStreet Map) sur laquelle les POIs sont représentés par des marqueurs. Un clic sur ces marqueurs entraîne l'ouverture de popups (petites fenêtres flottantes) montant les données attachées au POI.
La visualisation des POIs peut se faire dans deux situations :
    - en chambre, avec un ordinateur, c'est une visite virtuelle,
    - sur le terrain, avec un smartphone géolocalisé, c'est une visite guidée.

Entre la construction et la visualisation se fait un passage de données, par le truchement d'un fichier.
Ce fichier est en fait une archive (un zip) qui comporte les données brutes  (dossier "data") et la structure qui lie les données (fichier visit.json).

La traduction informatique de cette visite guidée va être réalisée par l'écriture de plusieurs applications qui ont en commun le fait d'être des PWA (Progressive Web Applications). Rappelons en quelques phrases l'intérêt du choix des PWA.
    - Code unique : Une PWA utilise une seule base de code (HTML, CSS, JavaScript) pour toutes les plateformes (web, mobile, desktop).
    - Pas de store d'applications obligatoire : L'utilisateur peut installer la PWA directement depuis le navigateur, sans passer par l'App Store ou Google Play, simplifiant le processus d'adoption.
    - Légèreté : Les PWA sont souvent beaucoup plus légères que les applications natives.
    - Vitesse et performance : Les PWA sont conçues pour être rapides et réactives.
    - Fonctionnement hors ligne (ou avec connexion limitée) : Grâce aux Service Workers, elles peuvent mettre en cache du contenu et fonctionner même sans connexion Internet ou avec une connexion instable.
    - Partage facilité : Elles peuvent être lancées et partagées via un simple lien URL.

Pour bâtir les applications, les robots générateurs de code sont essentiels (ChatGPT, Claude, Gemini, Grok, Github Copilot, Perplexity ...). Leur rôle a été déterminant.

La construction de la visite à partir des POIs est basée sur 3 applications accessibles sur le dépôt Github :
    - editpoih : construction des POI
    - modifpoi : correction et déplacement des POIs
    - ordonnepoi : tri les POI selon la latitude ou la longitude

La visualisation de la visite est réalisée par :
    - visupoicd : visite virtuelle ou visite guidée

Une fois que l'application est lancée dans le navigateur (Chrome, Firefox, Safari ...), il est possible de l'installer. Selon le navigateur et le type de plateforme, le processus d'installation est différent. Il peut s'agir d'une icône particulière à côté de la barre d'URL ou d'une option accessible par l'icône "trois points" ou hamburger. L'application apparaît avec son icône sur la page d'accueil et dans la liste des applications installées.

Comment utiliser editpoih
1) Donner un nom à la visite renfermant les POIs.
Remarquer tout de suite qu'il est possible de reprendre une visite déjà commencée et pour laquelle on ajoute des POIs supplémentaire. Cette visite préliminaire est un fichier .zip.
2) Donner un titre au POI sur lequel on va travailler.
3) Deux champs d'entrée qui permettent de fixer la latitude et la longitude du POI. Ces champs peuvent être remplis de 3 manières :
    - automatiquement par importation d'une photogéolocalisée (métadonnées EXIF)
    - par positionnement manuel d'un marqueur sur la carte OSM
    - par remplissage manuel (format degrés décimaux, avec point décimal).
La géolocalisation est obligatoire de quelque manière que ce soit.
4) Remplissage d'un commentaire textuel.
5) Importation d'un fichier audio MP3.
6) Importation d'une vidéo MP4
7) Quand toutes les données sont introduites, on clique sur le bouton "Ajouter ce POI".
Ce POI apparaît alors dans la liste des POIs validés, dans la colonne de droite.
8) On recommence avec l'introduction d'un nouveau POI, autant de fois qu'il y a de POIs prévus.
9) Quand  tous les POIs sont validés, on sauvegarde la visite sous la forme d'un fichier Zip.

Les POIs apparaissent dans la liste dans l'ordre dans lequel ils ont été introduits.
Par glisser/déposer, on peut modifier cet ordre.
On peut également éditer de nouveau un POI de la liste ou le supprimer.

Comment utiliser modifpoi
Il est fréquent qu'une photo ait été mal géolocalisée par le GPS inetrne du smartphone. Le marqueur du POI se trouve positionné sur la carte au maivais endroit.
A l'aide de la carte, on déplace le marqueut fautif au bon enfroit. On sauvegarde le fichier modifié.

Comment utiliser ordonnepoi
Les POIs sont souvent entrés dans un ordre indifférent à leur ordonnancement géographique.
Si la visite est linéaire, il est possible de réorganiser les POIs selon la latitude ou selon la longitude.
Comme les marqueurs sont numérotés, il est alors plus facile de suivre la progression sur le terrain.

Comment utiliser visupoicd

Alors que la construction des POIs se prépare essentiellement sur Desktop (ordinateur), la visualisation des POIs est intrinséquement plus adaptée aux situations de mobilité externe et donc au smartphone. Visupoicd peut fonctionner sur PC ou sur Mac, mais on reste dans la virtualité.
On insistera donc sur les propriétés de l'application installée sur un smartphone (Android ou iOS).

A l'ouverture de l'application, il n'est demandé que de charger un fichier .zip.
Ce fichier .zip qui peut atteindre des dizaines ou des centaines de mégaoctets aura été précédemment sauvegardé dans un dossier facilement accessible. Sa taille interdit généralement d'être transmis par mél. On utilisera à cet effet des plateformes de transfert de fichiers lourds ou un Drive dans le cloud.
Si la visite comporte de nombreux POIs et des fichiers média lourds, alors l'importation peut demander un certain temps.

Une carte s'affiche présentant une suite numérotée de marqueurs de POIs. Normalement, tous les POIs sont représentés et correspondent à une certaine échelle. Il est possible de zoomer pour grossir et mieux distinguer individuellement les POIs..
Un clic sur un marqueur de POI enttraîne l'ouverture d'une popup (petite fenêtre attachée au point).
Si vous déplacez la carte (glisser), vous constatez que votre position géographique actuelle est figurée par un gros marqueur rouge pulsant. En zoomant dessus, vous verrez les détails de topographie ou d'architecture apparaître.
Dans la popup sont figurés :
    - le titre du POI,
    - sa latitude et sa longitude
    - un commentaire (facultatif)
    - une photo (facultative)
    - un lecteur audio (facultatif)
    - un lecteur vidéo (facultatif)
    - une distance en mètres vous séparant du POI
    - un azimut en degrés par rapport au Nord vers le POI sélectionné.
La distance et l'azimut sont mis à jour à mesure que vous vous déplacez. On peut ainsi se rapprocher progressivement du POI en tenant compte de l'évolution de la distance.

Si une photo est présente dans la popup, un simple clic sur cette photo ouvre une "lightbox" zoomable.
Ceci permet d'observer des détails précis à l'intérieur de la photo. Une croix de fermeture permet de faire disparaître la lightbox.
__________________________________

Pour aider à l'optimisation des photos apparaissant dans les POIs, une petite application PWA a été créée :

    - optimiseur
________________________________________

Pour vérifier si une photo est correctement géolocalisée dans ses données EXIF


mardi 2 septembre 2025

Porter sa WPA sur GitHub

Le problème : Développement vs. Production

Lorsque vous travaillez sur votre ordinateur, vous utilisez probablement un serveur de développement (comme celui de Vite ou Create React App). Ce serveur fait beaucoup de travail en arrière-plan : il compile votre code TypeScript/JSX (.tsx) en JavaScript standard que les navigateurs peuvent comprendre, et il le fait à la volée à chaque fois que vous modifiez un fichier.

Cependant, GitHub Pages est un service d'hébergement de fichiers statiques. Il ne fait aucune compilation. Il se contente de servir les fichiers que vous lui donnez, tels quels.

Votre fichier index.html contient cette ligne :
<script type="module" src="/index.tsx"></script>

Un navigateur web ne peut pas exécuter un fichier .tsx directement. Il va donc échouer à charger le script, et par conséquent, votre application React ne démarrera jamais, laissant visible uniquement la couleur de fond de votre page (un gris très sombre, bg-gray-900, qui apparaît comme un écran noir).

La solution : Le "Build"

Pour que votre application fonctionne sur GitHub Pages, vous devez la "compiler" ou la "builder" pour la production avant de la déployer. Cette étape de "build" va :

  1. Convertir tous vos fichiers .tsx et .ts en fichiers JavaScript optimisés.

  2. Regrouper votre code et ses dépendances en quelques fichiers pour améliorer les performances.

  3. Créer un dossier (généralement nommé dist ou build) contenant une version de production de votre site.

Voici les étapes à suivre :

  1. Lancer la commande de build : Dans le terminal, à la racine de votre projet, exécutez la commande suivante (selon le gestionnaire de paquets que vous utilisez) :

    • npm run build

    • ou yarn build

  2. Déployer le bon dossier : Après l'exécution de la commande, un nouveau dossier dist (ou build) apparaîtra dans votre projet. C'est le contenu de ce dossier que vous devez configurer pour être déployé sur GitHub Pages, et non la totalité de votre projet avec les fichiers sources.

  3. (Important) Configurer le chemin de base : Si votre dépôt GitHub est nommé mon-projet, votre site sera accessible à https://votre-nom.github.io/mon-projet/. Vous devez indiquer cela à votre outil de build. Si vous utilisez Vite, par exemple, vous devez modifier votre fichier vite.config.ts pour y ajouter la ligne base:

    JavaScript
    import { defineConfig } from 'vite'
    import react from '@vitejs/plugin-react'
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [react()],
      base: '/mon-projet/' // Remplacez 'mon-projet' par le nom de votre dépôt GitHub
    })

    Après cette modification, relancez la commande npm run build.

En résumé, le processus correct est : développer localement -> builder le projet -> déployer le dossier . En suivant ces étapes, votre application s'affichera correctement sur GitHub Pages.

lundi 25 août 2025

Un agenda Google géré par une feuille de calcul Google Sheets

Cette méthode utilise un script pour lire les données de votre Google Sheets, effacer les événements existants dans un Google Calendar, puis créer de nouveaux événements à partir des données de la feuille. Le script peut être exécuté manuellement pour mettre à jour l'agenda.

Logique du Script

  1. Accéder aux données : Le script se connectera à votre feuille Google Sheets et lira les données de chaque ligne.

  2. Effacer l'agenda : Il effacera tous les événements existants dans l'agenda cible pour éviter les doublons ou la présence d'événements obsolètes.

  3. Itérer et créer les événements : Il parcourra ensuite chaque ligne de votre feuille, créant un nouvel événement dans un Google Calendar spécifié pour chaque ligne.

  4. Définir les détails de l'événement : Le script utilisera les données de vos colonnes pour définir le titre de l'événement, la date, l'heure de début (en ajoutant 3 heures pour l'heure de fin) et la description.

  5. Formater la description : Il lira les en-têtes et les données correspondantes des autres colonnes (lieu, animateur, etc.) et les formatera clairement dans la description de l'événement.

Étapes pour l'implémentation

  1. Créez un Google Calendar dédié : Il est recommandé de créer un nouvel agenda spécialement pour ces événements. Cela évite que le script ne modifie accidentellement votre agenda personnel.

  2. Ouvrez l'éditeur de script : Dans votre Google Sheets, allez dans Extensions > Apps Script. Cela ouvrira un nouvel onglet avec l'éditeur de script.

  3. Collez le code : Copiez le code ci-dessous et collez-le dans l'éditeur. Vous devrez remplacer les identifiants YOUR_SPREADSHEET_ID et YOUR_CALENDAR_ID par les vôtres.

  4. Configurez le script :

    • YOUR_SPREADSHEET_ID : Remplacez par l'ID de votre feuille Google Sheets. Vous le trouvez dans l'URL de votre feuille (c'est la longue chaîne de lettres et de chiffres entre /d/ et /edit).

    • YOUR_CALENDAR_ID : Remplacez par l'ID de votre nouvel agenda. Pour le trouver, allez dans les paramètres de votre Google Calendar, sélectionnez l'agenda que vous avez créé, et cherchez l'ID de l'agenda sous Intégrer l'agenda.

  5. Sauvegardez le script : Cliquez sur l'icône de la disquette pour sauvegarder le projet.

  6. Exécutez le script : Cliquez sur le bouton Exécuter (▶️). La première fois que vous l'exécutez, vous devrez donner au script les autorisations nécessaires pour accéder à votre Google Sheets et Google Calendar.

  7. Intégrez l'agenda : Allez sur votre site Google Sites. Insérez un nouvel élément et sélectionnez Intégrer > Agenda. Sélectionnez l'agenda que vous venez de mettre à jour.

3 modifications à faire du script suivant YOUR_CALENDAR_ID et YOUR_SPREADSHEET_ID'
____________________________________________________________



// Fonction pour effacer tous les événements d'un agenda spécifique
function clearCalendar() {
  const calendarId = 'YOUR_CALENDAR_ID'; // Remplacez par votre ID de calendrier
  const calendar = CalendarApp.getCalendarById(calendarId);
  if (!calendar) {
    Logger.log('Erreur : l\'ID de calendrier est invalide. Veuillez vérifier l\'ID.');
    return;
  }
  const events = calendar.getEvents(new Date('1970-01-01'), new Date('2100-01-01'));
  
  Logger.log('Suppression de ' + events.length + ' événements...');
  for (let i = 0; i < events.length; i++) {
    events[i].deleteEvent();
  }
}

// Fonction pour créer de nouveaux événements à partir de la feuille Google Sheets
function createEventsFromSheet() {
  const spreadsheetId = 'YOUR_SPREADSHEET_ID'; // Remplacez par votre ID de feuille de calcul
  const calendarId = 'YOUR_CALENDAR_ID'; // Remplacez par votre ID de calendrier
  const sheet = SpreadsheetApp.openById(spreadsheetId).getActiveSheet();
  
  // Efface d'abord l'agenda pour éviter les doublons et les événements obsolètes
  clearCalendar();
  
  const dataRange = sheet.getDataRange();
  const values = dataRange.getValues();
  const headers = values[0];
  
  // Saute la première ligne qui contient les en-têtes
  for (let i = 1; i < values.length; i++) {
    const row = values[i];
    
    const eventTitle = row[0];
    const dateStr = row[1]; // Les dates sont lues comme du texte
    const startTimeStr = row[2]; // Les heures sont lues comme du texte
    
    // Vérifie si la ligne contient un titre, une date et une heure de début
    if (eventTitle && dateStr && startTimeStr) {
      
      const [day, month, year] = dateStr.split('/').map(Number);
      const [hour, minute] = startTimeStr.split(':').map(Number);
      
      const startDate = new Date(year, month - 1, day, hour, minute);
      // L'événement dure 3 heures
      const endDate = new Date(startDate.getTime() + 3 * 60 * 60 * 1000); 
      
      // Crée la chaîne de description détaillée à partir des autres colonnes
      let description = '';
      for (let j = 3; j < headers.length; j++) {
        if (headers[j] && row[j]) {
          description += `${headers[j]} : ${row[j]}\n`;
        }
      }
      
      // Crée l'événement dans l'agenda
      try {
        CalendarApp.getCalendarById(calendarId).createEvent(eventTitle, startDate, endDate, {
          description: description
        });
      } catch (e) {
        Logger.log('Impossible de créer l\'événement : ' + eventTitle + ' Erreur : ' + e.message);
      }
    } else {
      // Si la ligne n'a pas de titre, de date ou d'heure de début, la sauter
      Logger.log('Ligne ignorée : ' + row);
    }
  }
}

lundi 18 août 2025

Créer une application avec Android Studio et I.A.

Ouvrir Android Studio 
Créer un nouveau projet. 
Choisir "Empty Activity"
Sous la racine "Android"
Sous-dossiers : App et Gradle Scripts

Donner un nom au projet
    Le nom du package est donné
    Le dossier dans lequel est sauvegardé le projet (AndroidStudioProjects à la racine de l'utilisateur
    SDK minimum API 24
    Language : Kotlin (recommandé par Google)

mercredi 13 août 2025

Créer un site sur Github

 Pour créer un site avec GitHub, utiliser **GitHub Pages**. Voici les étapes principales :

Documentation Github Pages

1. **Crée un dépôt GitHub**  

   - Va sur [github.com](https://github.com) et connecte-toi.

   - Clique sur "New" pour créer un nouveau repository.

   - Donne-lui un nom, par exemple `nomdemonsite.github.io` (pour un site personnel) ou un autre nom pour un site de projet.


2. **Ajoute tes fichiers de site**  

   - Ajoute un fichier `index.html` (page principale).

   - Tu peux aussi ajouter des fichiers CSS, images, etc.


3. **Active GitHub Pages**  

   - Va dans les "Settings" du dépôt.

   - Cherche la section "Pages".

   - Choisis la branche à publier (par exemple `main` ou `gh-pages`), puis le dossier (généralement `/root` pour la racine).

   - Clique sur "Save".


4. **Attends la publication**  

   - GitHub va générer ton site.  

   - Tu verras l’URL de ton site, du type :  

     `https://nomdemonsite.github.io/`  

     ou  

     `https://nomdemonsite.github.io/nom-du-depot/`


5. **Modifie ton site**  

   - Tu peux éditer tes fichiers et les pousser à nouveau sur GitHub, ton site sera mis à jour automatiquement.


**Pour aller plus loin:  

- Tu peux utiliser des générateurs de site statique comme Jekyll, Hugo, ou simplement écrire ton HTML/CSS.

_____________________________________________

  1. Dans le coin supérieur droit de n’importe quelle page, sélectionnez sur , puis cliquez sur Nouveau référentiel.

    Capture d’écran d’un menu déroulant GitHub montrant les options permettant de créer des éléments. L’élément de menu « Nouveau référentiel » est souligné en orange foncé.

  2. Entrez username.github.io comme nom du dépôt Remplacez username par votre nom d’utilisateur GitHub. Par exemple, si votre nom d’utilisateur est octocat, le nom du dépôt doit être octocat.github.io.

    Capture d’écran des paramètres GitHub Pages dans un dépôt. Le champ nom du dépôt contient le texte « octocat.github.io » et est délimité en orange foncé.

  3. Choisissez une visibilité de dépôt. Pour plus d’informations, consultez « À propos des dépôts ».

  4. Sélectionnez Initialize this repository with a README (Initialiser ce dépôt à l’aide d’un fichier LISEZMOI).

  5. Cliquez sur Créer le dépôt.

  6. Sous le nom de votre dépôt, cliquez sur  Paramètres. Si vous ne voyez pas l’onglet « Paramètres », sélectionnez le menu déroulant  , puis cliquez sur Paramètres.

    Capture d’écran d’un en-tête de dépôt montrant les onglets. L’onglet « Paramètres » est mis en évidence avec un encadré orange foncé.

  7. Dans la section « Code et automatisation » de la barre latérale, cliquez sur  Pages.

  8. Sous « Génération et déploiement », sous « Source », sélectionnez Déployer à partir d’une branche.

  9. Sous « Génération et déploiement », sous « Branche », utilisez le menu déroulant Branche et sélectionnez une source de publication.

    Capture d’écran des paramètres Pages dans un dépôt GitHub. Un menu permettant de sélectionner une branche pour une source de publication, intitulé « Aucun », est indiqué en orange foncé.

  10. Ouvrez éventuellement le fichier README.md de votre dépôt. Le fichier README.md est l’endroit où vous allez écrire le contenu de votre site. Vous pouvez modifier le fichier ou conserver le contenu par défaut pour l’instant.

  11. Accédez à username.github.io pour voir votre nouveau site web. Notez qu'il peut s'écouler jusqu'à 10 minutes avant que les modifications apportées à votre site ne soient publiées après avoir été transférées sur GitHub.

  12. https://votre-nom.github.io/nom-du-depot/