[RESOLU] Conversion de coordonnées marine

SeaBoy
Invité n'ayant pas de compte PHPfrance

16 juin 2013, 12:12

Bonjour ,

Je vous expose mon projet,

Je souhaiterais indiquer sur une carte google mes coordonnées. Mais il faut que je transforme 35 26.34S 057 26.64W en -35.437177,-57.442231 5 ( decimal) lisible par google.J 'ai un script ( on ma aidé pour cela ) mais celui-ci n 'est pas totalement fiable . alors je vous demande de l' aide , je précise que ceci est juste un projet perso rien de commerciale . si quelqu'un veut avoir accès au projet je vous donnerez l 'accès en messages privés. Merci d'avance

Voici le code actuel : les coordonnées sont dans position.txt

Code : Tout sélectionner

<?php function convertDec($var) { // Sexagésimal vers décimal $sens = substr($var,-1); $var = substr($var, 0, strlen($var)-1); $var = preg_replace('#([^a-z0-9]+)#i', '-', $var); $tab = explode('-', $var); $varD = $tab[0] + ($tab[1] / 60) + ($tab[2] / 3600); if(in_array($sens, array('S', 'O'))){ $varD = -$varD; } return $varD; } // Lecture du fichier $fp = fopen("position.txt", "r"); while (!feof($fp)) { $ligne = fgets($fp,1024); // récupération de la ligne // on sépare les 2 bouts pour obtenir les latitude/longitude sexagésimal : $ligne_array = explode(' , ', $ligne); $sexa_latitude = $ligne_array[0]; // '34 50.34S' $sexa_longitude = $ligne_array[1]; // '057 26.64W' // on peut mainteant les passer par la fonction de conversion : $deci_latitude = convertDec($sexa_latitude); $deci_longitude = convertDec($sexa_longitude); // TEST d'affichage echo 'sexa : '.$sexa_latitude.' '.$sexa_longitude.'<br />'; echo 'deci : '.$deci_latitude.' '.$deci_longitude.'<br />'; echo '<br />'; } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 juin 2013, 16:27

Salut,

C'est quoi le soucis exactement ?
As tu des données de test si l'on souhaite tester ton code ?

@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

16 juin 2013, 18:20

Bonjour Moogli,

Les coordonnées test [ 35 26.34S , 057 26.64W ] cela retour -0.59055555555556 57.451111111111 ce qui est faux, il faudrait -34.59055555555556 -57.451111111111

Je peux aussi vous données accès au fichiers position.txt si c'est utile

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 juin 2013, 19:14

J'ai trouvé un exemple de conversion : http://fr.m.wikipedia.org/wiki/Système_sexagésimal
Est ce que la méthode de conversion est bonne ?

Elle correspond a ce que tu as dans ton code, après il fait voir la récupération des données.

Effectivement des données d'exemple peuvent aider ;)


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

16 juin 2013, 19:26

Ok donc voici l 'accés au fichier
http://www.maritime-position.fr/MAIL2/position.txt

J 'ai fais aussi une modif j 'ai changer O (ouest ) par' W '

if(in_array($sens, array('S', 'W'))){ $varD = -$varD; }

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 juin 2013, 10:41

je viens de tester ce code
<!doctype html>
<html>
<head>
    <style type="text/css">
        th, td {
            border: 1px solid lightseagreen;
        }
        table {
            border-collapse: collapse;
            width: 90%;
            margin: auto;
        }
    </style>
</head>
<?php
/**
 * Created by JetBrains PhpStorm.
 * User: laplace.g
 * Date: 17/06/13
 * Time: 10:12
 * To change this template use File | Settings | File Templates.
 */
function convertDec($var) { // Sexagésimal vers décimal
    $var = trim($var); // pour être sur de ne pas avoir de caractère "invisbible" qui traine
    // le sens est indiqué par la lettre (pourrais être récupérée avec une expression régulière mais on est certain
    // du format)
    $sens = substr($var, -1);
    $coord = substr($var,0, strlen($var)-1); // tout sauf la lettre ou aurais utiliser un str_replace.
    list($degres, $rest) = explode(' ',$var);
    list($minute, $seconde) = explode('.',$rest);

    $result = $degres + ($minute / 60) + ($seconde / 3600);
    if (strtoupper($sens) == 'S' || strtoupper($sens) == 'W' || strtoupper($sens) == 'O') {
        $result *= -1;
    }
    return $result;

}

$positions = file('position.txt');
echo '<table>
<thead><tr><th>Sexa latitude</th><th>deci latitude</th><th>Sexa longitude</th><th>deci longitude</th></tr></thead>';
echo '<tbody>';
foreach ($positions as $position) {
    xdebug_var_dump($position);
    list($latitude, $longitude) = explode(',', $position);
    $deci_latitude = convertDec(trim($latitude));
    $deci_longitude = convertDec(trim($longitude));
    echo '<tr>
    <td>' . $latitude . '</td>
    <td>' . $deci_latitude . '</td>
    <td>' . $longitude . '</td>
    <td>' . $deci_longitude . '</td>
    </tr>';
}

echo '</tbody></table>';
?>
</html>
a priori c'est bon.
J'ai simplifier la chose, mais c'est très dépendant du format que tu va utiliser pour les coordonnées.

@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

17 juin 2013, 11:05

Merci encore de ton aide

J'ai donc placer le script sur mon serveur mais je n 'ais q"une tableau vide

http://www.maritime-position.fr/MAIL2/XX.php

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 juin 2013, 13:09

Tu a une erreur.
Il est impératif d'activer l'affichage des erreurs lorsque l'on est en phase de développement.

Et la je suppose que l'erreur est du au xdebug_var_dump() vue que je pense que l'extension xdebug n'est pas installée ;)


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

17 juin 2013, 14:50

Fatal error: Call to undefined function xdebug_var_dump() in /home/f4unk/www/MAIL2/XX.php on line 62

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 juin 2013, 15:03

c'est ça donc tu as la solution ^^

ce qui implique de comprendre ce que fait un code que l'on te fournit et de chercher à quoi servent les fonctions que l'on ne connais pas.


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

17 juin 2013, 18:21

c 'est clair et je te remercie vivement pour ton aide ...