Automatiser le système d’information géographique SIG Traitement des données, Excel VBA
Automatiser le traitement des données dans un système d’information géographique (SIG) avec VBA dans Excel peut être un défi, surtout si vous voulez interagir avec des formats SIG spécifiques comme les shapefiles ou des bases de données géospatiales. Cependant, il est possible d’automatiser certaines tâches à partir d’Excel, notamment la manipulation des données géospatiales, la gestion des attributs géographiques, et l’intégration avec des outils SIG comme QGIS ou ArcGIS en utilisant des API externes.
Dans cet exemple, nous allons démontrer comment automatiser des tâches de traitement de données géospatiales avec VBA, en supposant que vous avez déjà un fichier contenant des données géographiques, comme des coordonnées de points ou des informations d’attributs, dans un fichier Excel.
Objectif:
Automatiser le processus de nettoyage et d’analyse des données géospatiales (par exemple, calculer la distance entre deux points géographiques).
Prérequis:
- Un fichier Excel avec des colonnes pour les latitudes et longitudes de points géographiques.
- Utilisation de VBA pour calculer la distance entre deux points géographiques en fonction de leurs coordonnées.
- Structure du fichier Excel
Imaginons que votre fichier Excel contient les données suivantes :
ID | Nom | Latitude | Longitude |
1 | Point A | 48.8566 | 2.3522 |
2 | Point B | 51.5074 | -0.1278 |
- La latitude et la longitude sont stockées sous forme de nombres décimaux.
- Vous souhaitez calculer la distance entre ces deux points en kilomètres.
- Calcul de la distance entre deux points géographiques (formule Haversine)
Nous allons utiliser la formule Haversine pour calculer la distance entre deux points sur la surface de la Terre à partir de leurs coordonnées de latitude et longitude.
- Code VBA
Voici un code VBA pour automatiser ce processus :
Option Explicit ' Constantes pour la Terre Const R As Double = 6371 ' Rayon de la Terre en kilomètres ' Fonction pour convertir les degrés en radians Function DegrésEnRadians(degré As Double) As Double DegrésEnRadians = degré * (WorksheetFunction.Pi() / 180) End Function ' Fonction pour calculer la distance entre deux points géographiques Function CalculerDistance(Lat1 As Double, Lon1 As Double, Lat2 As Double, Lon2 As Double) As Double ' Convertir les latitudes et longitudes en radians Lat1 = DegrésEnRadians(Lat1) Lon1 = DegrésEnRadians(Lon1) Lat2 = DegrésEnRadians(Lat2) Lon2 = DegrésEnRadians(Lon2) ' Calcul de la différence Dim dLat As Double Dim dLon As Double Dim a As Double Dim c As Double dLat = Lat2 - Lat1 dLon = Lon2 - Lon1 a = Sin(dLat / 2) * Sin(dLat / 2) + Cos(Lat1) * Cos(Lat2) * Sin(dLon / 2) * Sin(dLon / 2) c = 2 * Atan2(Sqr(a), Sqr(1 - a)) ' Retourner la distance en kilomètres CalculerDistance = R * c End Function ' Sub pour traiter les données de l'Excel Sub TraiterDonneesSIG() Dim i As Integer Dim Latitude1 As Double, Longitude1 As Double Dim Latitude2 As Double, Longitude2 As Double Dim Distance As Double ' On commence à la ligne 2 pour ignorer l'en-tête For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Latitude1 = Cells(i, 3).Value Longitude1 = Cells(i, 4).Value Latitude2 = Cells(i + 1, 3).Value ' Prochain point Longitude2 = Cells(i + 1, 4).Value ' Prochain point ' Calculer la distance entre les deux points Distance = CalculerDistance(Latitude1, Longitude1, Latitude2, Longitude2) ' Afficher la distance dans la colonne 5 (distance en kilomètres) Cells(i, 5).Value = Distance Next i MsgBox "Le traitement des données géospatiales est terminé.", vbInformation End Sub
Explication du code :
- Définition des constantes :
- Const R As Double = 6371: C’est le rayon de la Terre en kilomètres.
- Fonction DegrésEnRadians :
Cette fonction convertit les coordonnées géographiques de degrés en radians, car les fonctions trigonométriques en VBA utilisent les radians.
- Fonction CalculerDistance :
C’est la fonction qui implémente la formule Haversine pour calculer la distance en kilomètres entre deux points. Elle prend en paramètre les latitudes et longitudes des deux points géographiques et retourne la distance calculée.
- Sub TraiterDonneesSIG :
- Cette subroutine parcourt les données dans la feuille Excel (à partir de la ligne 2), récupère les coordonnées des points géographiques dans les colonnes 3 et 4 (Latitude et Longitude), et calcule la distance entre chaque point et le suivant.
- La distance est ensuite affichée dans la colonne 5 de la feuille Excel.
- Utilisation du Code
- Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
- Dans l’éditeur, cliquez sur Insertion > Module et collez le code ci-dessus.
- Revenez à la feuille Excel, puis appuyez sur Alt + F8 pour exécuter la macro TraiterDonneesSIG.
Cela remplira la colonne 5 avec la distance entre chaque point et le suivant, en kilomètres.
- Étapes supplémentaires :
- Importer des données SIG : Pour un traitement plus avancé avec des shapefiles ou des bases de données géospatiales (comme PostGIS), vous pouvez utiliser des outils comme QGIS ou ArcGIS avec des scripts Python, mais cela dépasse les capacités de VBA. Vous pouvez automatiser l’exportation de données vers Excel et ensuite effectuer des calculs ou des analyses géographiques dans Excel.
- Visualisation SIG dans Excel : Vous pouvez aussi générer des cartes dans Excel en utilisant des données géographiques (par exemple, en représentant les points sur une carte à l’aide de graphiques à nuages de points).
Conclusion :
Ce code VBA vous permet d’automatiser un processus simple de calcul de distance entre deux points géographiques dans un fichier Excel. Cependant, pour des analyses plus complexes, l’intégration avec un logiciel SIG spécialisé est recommandée.