Dependency-free, ultra fast calculation of geodesic distances.
Marc-Antoine Dupuis
2025-11-25
La géodésie
The shortest path between two points on the earth, customarily treated as an ellipsoid of revolution, is called a geodesic.1
But : un package léger, sans dépendance, pour calculer des distances géodésiques très rapidement.
Est deux fois plus rapides que ses concurrents (du marché gratuit) : SF et Geosphere2
Publié en 2018, fondé notamment sur l’algorithme de Karney (2013).
La conccurence
Avantages de Geodist : rapide, gratuit, flexible, virtuellement aucune limite d’adresses, pouvoir tout faire soi-même, compatibilité avec les milliers de packages R.
Inconvénients : devoir tout faire « soi-même », ne calcule pas les distances routières (Google Maps API), ou les niveaux de terrain (QGIS, Mapbox).
Outil
Accessibilité
Communauté d'utilisateurs
Popularité en sciences sociales
Compatibilité avec d'autres outils
Transparence et réplicabilité
Adaptabilité et flexibilité
sf, geosphere, geodist (packages R)
Gratuit, open-source.
Large communauté
Élevée
Excellente
Maximale
Très élevée
QGIS (Système d'Information Géographique)
Gratuit, open-source
Logiciel SIG le plus populaire
Croissante
Excellente
Élevée
Très élevée
Google Maps API (Application Programming Interface)
Gratuit, mais abonnements payants, jusqu’à + 6000$.
Large
Croissante
Excellente
Moyenne
Très élevée
Geodist en sciences sociales
Exemple pour calculer les distances moyennes entre les principales communautés autochtones du Québec et les services de santé les plus proches. Erreurs possibles : IA a récupéré les adresses.
# ===================================================# CODE COMBINÉ : CALCUL DE DISTANCES + VISUALISATION# ===================================================# Charger les librairieslibrary(dplyr)library(tidyr)library(geodist)library(ggplot2)# ===== PARTIE 1 : CALCUL DES DISTANCES =====# Lire le fichier CSVdonnees <-read.csv("/Users/marcantoinedupuis/Library/CloudStorage/GoogleDrive-2946762@gmail.com/Mon disque/Université/ULAVAL/Outils Numériques/outil_presentation/donnes_clsc.csv", stringsAsFactors =FALSE)# Fonction pour séparer les coordonnéesseparer_coordonnees <-function(coord_string) { coords <-strsplit(gsub(" ", "", coord_string), ",")[[1]]return(data.frame(lat =as.numeric(coords[1]), lon =as.numeric(coords[2])))}# Traiter les coordonnées autochtonescoords_autochtones <-do.call(rbind, lapply(donnees$localisation_autochtone, separer_coordonnees))colnames(coords_autochtones) <-c("lat_autochtone", "lon_autochtone")# Traiter les coordonnées des centres de santécoords_sante <-do.call(rbind, lapply(donnees$localisation_sante, separer_coordonnees))colnames(coords_sante) <-c("lat_sante", "lon_sante")# Combiner les donnéesdonnees_completes <-cbind(donnees, coords_autochtones, coords_sante)# Calculer la distance pour chaque lignecalcul_distances <-function(data) { resultats <-data.frame()for (i in1:nrow(data)) { origine <-c(data$lon_autochtone[i], data$lat_autochtone[i]) destination <-c(data$lon_sante[i], data$lat_sante[i]) distance_geodesique <- geodist::geodist(x =matrix(origine, ncol =2),y =matrix(destination, ncol =2),measure ="haversine" ) /1000 distance_routiere_approx <- distance_geodesique *1.35 resultats <-rbind(resultats, data.frame(communaute = data$nom_communaute[i],centre_sante = data$institution_sante_proche[i],distance_geodesique_km =round(distance_geodesique, 2),distance_routiere_approx_km =round(distance_routiere_approx, 2) )) }return(resultats)}# Calculer toutes les distancesresultats_distances <-calcul_distances(donnees_completes)# Afficher les résultatscat("===== DISTANCES ENTRE COMMUNAUTÉS ET CENTRES DE SANTÉ =====\n\n")
===== DISTANCES ENTRE COMMUNAUTÉS ET CENTRES DE SANTÉ =====
for (i in1:nrow(resultats_distances)) {cat(sprintf("Communauté: %s\n", resultats_distances$communaute[i]))cat(sprintf("Centre de santé: %s\n", resultats_distances$centre_sante[i]))cat(sprintf("Distance routière approximative: %.2f km\n\n", resultats_distances$distance_routiere_approx_km[i]))}
Communauté: Odanak
Centre de santé: Centre de Santé d'Odanak
Distance routière approximative: 0.09 km
Communauté: Wôlinak
Centre de santé: Centre de Santé de Wôlinak
Distance routière approximative: 0.09 km
Communauté: Wolf Lake
Centre de santé: CLSC de Témiscaming-Kipawa (Point de service)
Distance routière approximative: 33.73 km
Communauté: Kebaowek First Nation
Centre de santé: Centre de Santé de Kebaowek
Distance routière approximative: 0.14 km
Communauté: Communauté anicinape de Kitcisakik
Centre de santé: Poste de soins infirmiers Kitcisakik
Distance routière approximative: 0.03 km
Communauté: Kitigan Zibi Anishinabeg
Centre de santé: Centre de santé Wanaki
Distance routière approximative: 0.24 km
Communauté: La Nation Anishnabe du Lac-Simon
Centre de santé: Centre de Santé Mino-Tehewin
Distance routière approximative: 0.08 km
Communauté: Conseil de la Première Nation Abitibiwinni
Centre de santé: Centre de Santé de Pikogan
Distance routière approximative: 0.24 km
Communauté: Algonquins of Barriere Lake
Centre de santé: Centre de santé de Lac-Rapide
Distance routière approximative: 0.02 km
Communauté: Timiskaming First Nation
Centre de santé: Centre de Santé Timiskaming
Distance routière approximative: 0.05 km
Communauté: Long Point First Nation
Centre de santé: Centre de santé de Winneway
Distance routière approximative: 0.07 km
Communauté: Atikamekw de Manawan
Centre de santé: Centre de Santé Masko-Siwin
Distance routière approximative: 0.09 km
Communauté: Bande des Atikamekw d'Opitciwan
Centre de santé: Centre de Santé d'Opitciwan
Distance routière approximative: 0.05 km
Communauté: Conseil des Atikamekw de Wemotaci
Centre de santé: Centre de Santé de Wemotaci
Distance routière approximative: 0.09 km
Communauté: La Nation Crie de Chisasibi
Centre de santé: CMC Chisasibi
Distance routière approximative: 104.61 km
Communauté: La Nation Crie d'Eastmain
Centre de santé: CMC Eastmain
Distance routière approximative: 143.22 km
Communauté: La Nation Crie de Mistissini
Centre de santé: CMC Mistissini
Distance routière approximative: 0.79 km
Communauté: La Nation Crie de Nemaska
Centre de santé: CMC Nemaska
Distance routière approximative: 0.09 km
Communauté: Oujé-Bougoumou Cree Nation
Centre de santé: CMC Oujé-Bougoumou
Distance routière approximative: 39.57 km
Communauté: Les Cris de la Première Nation de Waskaganish
Centre de santé: CMC Waskaganish
Distance routière approximative: 0.14 km
Communauté: Waswanipi
Centre de santé: CMC Waswanipi
Distance routière approximative: 3.28 km
Communauté: La Nation Crie de Wemindji
Centre de santé: CMC Wemindji
Distance routière approximative: 1.07 km
Communauté: La Première Nation de Whapmagoostui
Centre de santé: CMC Whapmagoostui
Distance routière approximative: 1.49 km
Communauté: Bande des Innus de Pessamit
Centre de santé: Centre de Santé de Pessamit
Distance routière approximative: 21.52 km
Communauté: Bande Innue Essipit
Centre de santé: Centre de santé communautaire d'Essipit
Distance routière approximative: 75.28 km
Communauté: Première Nation des Pekuakamiulnuatsh
Centre de santé: Centre de Santé de Mashteuiatsh
Distance routière approximative: 37.90 km
Communauté: Bande de la Nation Innu Matimekush-Lac John
Centre de santé: Centre de santé de Matimekush
Distance routière approximative: 10.05 km
Communauté: Bande des Innus de Ekuanitshit
Centre de santé: Centre de santé d'Ekuanitshit
Distance routière approximative: 0.15 km
Communauté: Première Nation des Innus de Nutashkuan
Centre de santé: Centre de santé de Nutashkuan
Distance routière approximative: 3.51 km
Communauté: Bande des Montagnais de Pakua Shipi
Centre de santé: Centre de santé de Pakua Shipi
Distance routière approximative: 374.93 km
Communauté: Montagnais de Unamen Shipu
Centre de santé: Centre de santé d'Unamen Shipu
Distance routière approximative: 48.57 km
Communauté: Innu Takuaikan Uashat mak Mani-Utenam
Centre de santé: Centre de santé Uashat mak Mani-Utenam
Distance routière approximative: 0.06 km
Communauté: La Nation Micmac de Gespeg
Centre de santé: CLSC de Gaspé (Services de santé Gespeg)
Distance routière approximative: 2.86 km
Communauté: Micmacs of Gesgapegiag
Centre de santé: Gesgapegiag Health and Community Services
Distance routière approximative: 0.06 km
Communauté: Listuguj Mi'gmaq Government
Centre de santé: Listuguj Community Health Services
Distance routière approximative: 11.04 km
Communauté: Nation Naskapi de Kawawachikamach
Centre de santé: CLSC Naskapi
Distance routière approximative: 8.27 km
Communauté: Première Nation Wolastoqiyik Wahsipekuk
Centre de santé: CLSC de Rivière-du-Loup (Siège administratif)
Distance routière approximative: 17.79 km
Communauté: Nation Wendat
Centre de santé: Centre de santé Marie-Paule-Sioui-Vincent
Distance routière approximative: 4.29 km
Communauté: Mohawks of Kahnawá:ke
Centre de santé: Centre Hospitalier Kateri Memorial
Distance routière approximative: 1.10 km
Communauté: Mohawks of Kanesatake
Centre de santé: Centre de santé de Kanesatake
Distance routière approximative: 0.09 km
Communauté: Akulivik
Centre de santé: CLSC d'Akulivik
Distance routière approximative: 0.04 km
Communauté: Aupaluk
Centre de santé: CLSC d'Aupaluk
Distance routière approximative: 0.12 km
Communauté: Chisasibi
Centre de santé: CMC Chisasibi
Distance routière approximative: 104.61 km
Communauté: Inukjuak
Centre de santé: CLSC d'Inukjuak
Distance routière approximative: 0.30 km
Communauté: Ivujivik
Centre de santé: CLSC d'Ivujivik
Distance routière approximative: 0.03 km
Communauté: Kangiqsualujjuaq
Centre de santé: CLSC de Kangiqsualujjuaq
Distance routière approximative: 0.15 km
Communauté: Kangiqsujuaq
Centre de santé: CLSC de Kangiqsujuaq
Distance routière approximative: 0.16 km
Communauté: Kangirsuk
Centre de santé: CLSC de Kangirsuk
Distance routière approximative: 0.10 km
Communauté: Killiniq
Centre de santé: N/A
Distance routière approximative: 0.00 km
Communauté: Kuujjuaq
Centre de santé: Centre de santé Ungava Tulattavik
Distance routière approximative: 5.24 km
Communauté: Kuujjuarapik
Centre de santé: CLSC de Kuujjuaraapik
Distance routière approximative: 0.06 km
Communauté: Puvirnituq
Centre de santé: Centre de santé Inuulitsivik
Distance routière approximative: 0.08 km
Communauté: Quaqtaq
Centre de santé: CLSC de Quaqtaq
Distance routière approximative: 0.06 km
Communauté: Salluit
Centre de santé: CLSC de Salluit
Distance routière approximative: 0.06 km
Communauté: Tasiujaq
Centre de santé: CLSC de Tasiujaq
Distance routière approximative: 0.06 km
Communauté: Umiujaq
Centre de santé: CLSC d'Umiujaq
Distance routière approximative: 0.05 km
# Sauvegarder les résultats dans un fichier CSVwrite.csv(resultats_distances, "distances_communautes_centres_sante.csv", row.names =FALSE)cat("Les résultats ont été sauvegardés dans 'distances_communautes_centres_sante.csv'\n")
Les résultats ont été sauvegardés dans 'distances_communautes_centres_sante.csv'
# Afficher un résumé statistiquecat("\n===== STATISTIQUES DES DISTANCES =====\n")