IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Programme Delphi de conversion de coordonnées GPS/UTM


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 8
    Points
    8
    Par défaut Programme Delphi de conversion de coordonnées GPS/UTM
    Voila, je dois réaliser un petit logiciel en delphi... mais je ne connais pas du tout delphi...

    Ce logiciel doit pouvoir faire des conversions de coordonnées GPS en UTM, et inversement...

    voila à quoi devrait ressembler l'application:



    (bien évidément la zone "Résultat" serrait inversée en cas de conversion UTM vers GPS...)

    je ne connais pas non plus les formules de conversion, les seules que j'ai trouvé n'étant pas en delphi...

    si quelqu'un pourrait me donner un petit coup de main, ca serrait super simpa

    merci bcp

  2. #2
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 287
    Points : 1 934
    Points
    1 934
    Par défaut
    Bonjour et bienvenue sur developpez.com !

    Avant toute chose, merci de lire les règles de ce forum et également ceci :
    http://www.developpez.net/forums/showthread.php?t=9157

    Nous sommes tous des bénévoles, mais nous ne pouvons réaliser entièrement ton boulot.

    Par contre nous serons là avec plaisir pour t'aider sur tel ou tel point précis.

    Bonne lecture

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut et bienvenue !
    Citation Envoyé par furious-kiki
    je ne connais pas non plus les formules de conversion, les seules que j'ai trouvé n'étant pas en delphi...
    Si tu nous les montrais, on pourrait peut-être t'aider à les convertir !

    @+ Claudius

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    voir sur google : ConversApi.dll

    sinon en convertir du basic vers delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Attribute VB_Name = "Module1"
    'Conversion Lat long en Coordonnées UTM
    Option Explicit
     
    Const A = 6378137 'a (earth radius-m)
    Const PI = 3.1415927
    Const k0 = 0.9996 'coeff.d'aplatissement de la terre
    Const e = 0.8 'excentricité
    Const eccSquared = 0.0064 'carré de l'excentricité
    Const eccPrimeSquared = 0.007
    Const North_South_Offset = 10000000 'décalage NS pour toujours manipuler des données positives l'équateur a la valeur
                                        '10000km quand on va vers le Sud
    Const East_West_Offset = 500000 'Le centre de chaque zone de 6 degrés a la valeur de
                                    '500km.
     
    'Data inputs
    Public Deg_Long
    Public Min_Long
    Public Sec_Long
    Public Deg_Lat
    Public Min_Lat
    Public Sec_Lat
    Public DirEW
    Public DirNS
     
    'Data output
    Public Zone_Number
    Public X_North_south
    Public Y_East_West
     
    'Intermediate data
    Dim b, f, deg_RAD, longrad, FormuleLong, FormuleLat, FormuleNS As Long
    Dim longi, longo, lat, longdeg_origin, longradorigin As Long
    Dim sinlat, sin2lat, coslat, tanlat, n1, n2, n3, n4, n5, T, C, A0 As Double
    Dim Aprime, Bprime, Cprime, Dprime, Eprime, M, N As Double
     
     
    Sub ConvUTM3(DirEW, DirNS, Deg_Long, Min_Long, Sec_Long, Deg_Lat, Min_Lat, Sec_Lat)
     
    'Intermediate
     b = A - A / 298.2572
     deg_RAD = 2 * PI / 360
     
    FormuleLong = ((Deg_Long) + (Min_Long) / 60 + (Sec_Long) / 3600) * deg_RAD
    FormuleLat = ((Deg_Lat) + ((Min_Lat) / 60) + ((Sec_Lat) / 3600)) * deg_RAD
     
    'Détermination du signe de longitude
    If DirEW = "E" Then
        longi = FormuleLong
    Else
        longi = -1 * FormuleLong
    End If
    '
    'Détermination du signe de latitude
    If DirNS = "N" Then
        lat = FormuleLat
    Else
        lat = -1 * FormuleLat
    End If
     
    'Calcul du numéro de la Zone
    If Deg_Long = 180 Then
        Zone_Number = 1
    Else
        If DirEW = "E" Then
            Zone_Number = Int((Deg_Long / 6) + 31)
        Else
            Zone_Number = Abs(Int((Deg_Long) / 6) - 30)
        End If
    End If
     
    'Calcul de l'origine (centre) de la Zone
     
    longdeg_origin = ((Zone_Number - 1) * 6) - 180 + 3
    longo = (longdeg_origin) * deg_RAD
     
     
    'Calculs de géométrie
     
    sinlat = Sin(lat)
    sin2lat = Sin(lat) * Sin(lat)
    coslat = Cos(lat)
    tanlat = Tan(lat)
     
    T = Tan(lat)
    N = A / Sqr(1 - eccSquared * sin2lat)
    C = eccPrimeSquared * coslat * coslat
    A0 = coslat * (longi - longo)
     
    n1 = (A - b) / (A + b)
    n2 = n1 * n1
    n3 = n2 * n1
    n4 = n3 * n1
    n5 = n4 * n1
     
     
    Aprime = A * (1 - n1 + (5 / 4) * (n2 - n3) + (81 / 64) * (n4 - n5))
    Bprime = (3 * A * n1 / 2) * (1 - n1 + (7 / 8) * (n2 - n3) + (55 / 64) * (n4 - n5))
    Cprime = (15 * A * n2 / 16) * (1 - n1 + (3 / 4) * (n2 - n3))
    Dprime = (35 * A * n3 / 48) * (1 - n1 + (11 / 16) * (n2 - n3))
    Eprime = (315 * A * n4 / 51) * (99 / 144) * (n2 - n3)
     
    M = Aprime * lat - Bprime * Sin(2 * lat) + Cprime * Sin(4 * lat) - Dprime * Sin(6 * lat) + Eprime * Sin(8 * lat)
    FormuleNS = (k0 * (M + N * tanlat * (A0 * A0 / 2 + (5 - T + 9 * C + 4 * C * C) * A0 * A0 * A0 * A0 / 24 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A0 * A0 * A0 * A0 * A0 * A0 / 720)))
     
    'Output data
    If lat < 0 Then
        X_North_south = North_South_Offset + FormuleNS
    Else
        X_North_south = FormuleNS
    End If
     
    Y_East_West = (k0 * N * (A0 + (1 - T + C) * A0 * A0 * A0 / 6 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A0 * A0 * A0 * A0 * A0 / 120) + East_West_Offset)
     
     
    End Sub

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 443
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 443
    Points : 5 863
    Points
    5 863
    Par défaut
    salut

    as tu au moins essayer de le transcrire ?

    y'a pas plus simple en voici une version quelque peut modifié
    verifie si cela te donne les meme valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    unit UConversGps;
     
    interface
    (****************************************
    Conversion Lat long en Coordonnées UTM
    ****************************************)
    Type
      TptCoord = Record
        Degre   : longint;
        Minute  : longint;
        Seconde : longint;
      end;
     
      TCoord = Record
        Longitude : TptCoord;
        Latitude  : TptCoord;
      end;
     
      TConversGps = Class
      private
        fZone_Number : integer;
        fX_North_south : currency;
        fY_East_West   : currency;
        Procedure InitialiseValeur ;
        Procedure ConvertUTM3(DirEW, DirNS : Char;Coord : TCoord);
      Public
        Constructor Create(DirEW, DirNS : Char;Coord : TCoord);
        Property Zone : integer read fZone_Number;
        Property X    : currency read fX_North_south;
        Property Y    : currency read fY_East_West;
      end;
     
    implementation
    Uses Math;
     
    Const A = 6378137 ;//'a (earth radius-m)
      PI = 3.1415927 ;//
      k0 = 0.9996 ;// 'coeff.d'aplatissement de la terre
      e = 0.8 ;//'excentricité
      eccSquared = 0.0064 ;//carré de l'excentricité
      eccPrimeSquared = 0.007 ;//
      North_South_Offset = 10000000 ;//décalage NS pour toujours manipuler des données positives l'équateur a la valeur
                                     // 10000km quand on va vers le Sud
      East_West_Offset = 500000 ;//Le centre de chaque zone de 6 degrés a la valeur de
                                 // 500km.
     
    Constructor TConversGps.Create;
    begin
      ConvertUTM3(DirEW,DirNS,Coord);
    end;
     
    Procedure TConversGps.InitialiseValeur ;
    begin
      fZone_Number   := 0;
      fX_North_south := 0;
      fY_East_West   := 0;
    end;
    Procedure TConversGps.ConvertUTM3(DirEW, DirNS : Char;Coord : TCoord);
    var
    //Intermediate data
      b, f, deg_RAD, longrad, FormuleLong, FormuleLat, FormuleNS : currency;
      longi, longo, lat, longdeg_origin, longradorigin : currency;
      sinlat, sin2lat, coslat, tanlat, n1, n2, n3, n4, n5, T, C, A0 : Double ;
      Aprime, Bprime, Cprime, Dprime, Eprime, M, N : Double;
    Begin
      InitialiseValeur ;
    //Intermediate
      b  := A - A / 298.2572 ;
      deg_RAD := 2 * PI / 360;
      with Coord.Longitude do
        FormuleLong := ((Degre) + (Minute) / 60 + (Seconde) / 3600) * deg_RAD;
     
      with Coord.Latitude do
        FormuleLat := ((Degre) + ((Minute) / 60) + ((Seconde) / 3600)) * deg_RAD;
     
    //'Détermination du signe de longitude
      If DirEW = 'E' Then
        longi := FormuleLong
      Else
        longi := -1 * FormuleLong ;
    //'
    //'Détermination du signe de latitude
      If DirNS = 'N' Then
        lat := FormuleLat
      Else
        lat := -1 * FormuleLat ;
     
      //'Calcul du numéro de la Zone
      with Coord.Longitude do
      begin
        If Degre = 180 Then
          fZone_Number := 1
        Else
          If DirEW = 'E' Then
            fZone_Number := Trunc((Degre / 6) + 31)
          Else
            fZone_Number := Abs(Trunc((Degre) / 6) - 30) ;
      end;
      //'Calcul de l'origine (centre) de la Zone
      longdeg_origin := ((fZone_Number - 1) * 6) - 180 + 3;
      longo := (longdeg_origin) * deg_RAD;
     
      //'Calculs de géométrie
      sinlat  := Sin(lat);
      sin2lat := Sin(lat) * Sin(lat);
      coslat  := Cos(lat);
      tanlat  := Tan(lat);
     
      T  := Tan(lat);
      N  := A / Sqr(1 - eccSquared * sin2lat);
      C  := eccPrimeSquared * coslat * coslat;
      A0 := coslat * (longi - longo);
     
      n1 := (A - b) / (A + b);
      n2 := n1 * n1;
      n3 := n2 * n1;
      n4 := n3 * n1;
      n5 := n4 * n1;
     
     
      Aprime := A * (1 - n1 + (5 / 4) * (n2 - n3) + (81 / 64) * (n4 - n5));
      Bprime := (3 * A * n1 / 2) * (1 - n1 + (7 / 8) * (n2 - n3) + (55 / 64) * (n4 - n5));
      Cprime := (15 * A * n2 / 16) * (1 - n1 + (3 / 4) * (n2 - n3));
      Dprime := (35 * A * n3 / 48) * (1 - n1 + (11 / 16) * (n2 - n3));
      Eprime := (315 * A * n4 / 51) * (99 / 144) * (n2 - n3);
     
      M := Aprime * lat - Bprime * Sin(2 * lat) + Cprime * Sin(4 * lat) - Dprime * Sin(6 * lat) + Eprime * Sin(8 * lat);
      FormuleNS := (k0 * (M + N * tanlat * (A0 * A0 / 2 + (5 - T + 9 * C + 4 * C * C) * A0 * A0 * A0 * A0 / 24 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A0 * A0 * A0 * A0 * A0 * A0 / 720)));
     
      //'Output data
      If lat < 0 Then
        fX_North_south := North_South_Offset + FormuleNS
      Else
        fX_North_south := FormuleNS ;
     
      fY_East_West := (k0 * N * (A0 + (1 - T + C) * A0 * A0 * A0 / 6 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A0 * A0 * A0 * A0 * A0 / 120) + East_West_Offset);
    End;
     
    end.
    @+ Phil

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/09/2014, 10h13
  2. Réponses: 6
    Dernier message: 31/12/2011, 13h17
  3. librairie de conversion de coordonnées?
    Par hitchie dans le forum MFC
    Réponses: 3
    Dernier message: 28/07/2005, 19h08
  4. Comment intégrer un programme Delphi dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/07/2005, 20h23
  5. Réponses: 3
    Dernier message: 29/06/2005, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo