Automatiser le système d’information géographique SIG Traitement des données, Excel VBA

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: 

  1. Un fichier Excel avec des colonnes pour les latitudes et longitudes de points géographiques. 
  2. Utilisation de VBA pour calculer la distance entre deux points géographiques en fonction de leurs coordonnées. 
  1. Structure du fichier Excel

Imaginons que votre fichier Excel contient les données suivantes : 

ID  Nom  Latitude  Longitude 
Point A  48.8566  2.3522 
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. 
  1. 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. 

  1. 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 : 

  1. Définition des constantes :
  • Const R As Double = 6371: C’est le rayon de la Terre en kilomètres. 
  1. 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. 

  1. 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. 

  1. 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. 
  1. Utilisation du Code
  1. Ouvrez Excel et appuyez sur Alt + F11 pour ouvrir l’éditeur VBA.
  2. Dans l’éditeur, cliquez sur Insertion > Module et collez le code ci-dessus.
  3. 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. 

  1. É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. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x