Hallo,

heeft er iemand een script of functie om decimale coordinaten ( breedtegraad :52.09065 lengtegraad :5.12132) om te zetten naar h ddd° mm.mmm' (graden en minuten) breedtegraad :N52° 05.439 lengetgraad :E005° 07.279 en omgekeerd.

Dank bij voorbaat
je hebt mijn edit niet gezien.

ik krijg als output:
Breedtegraad: N 47° 49.782'
Lengtegraad: W 003° 41.806'
EvH,

Prachtig van U, blijkbaar klopt het nu helemaal
heb ook andere ingaves gedaan en ze kloppen ook .

Nogmaals heel vriendelijk bedankt voor deze hulp.
Ben je toevallig een geocacher ?
Ik wel in ieder geval! :-)
In mijn buurt heb ik er zelf vier neergelegd.
Geen geocacher, maar heb wel eens meegewerkt aan een project door een fanatieke geocacher.

Fijn dat het nu werkt :)
ariën,

Dan ken jij het programma Gsak.
Gsak zal verdwijnen en geen toegang meer krijgen bij geocaching door de aanpassing van de API's
Misschien is het een doel om er eentje te maken zoals gsak maar dan in php.


[size=xsmall]Toevoeging op 07/11/2023 13:05:46:[/size]

EvH,

Nogmaals bedankt voor alles, en als je nog een project wil geen probleem, het programma Gsak dat zal verdwijnen namaken in php.


[size=xsmall]Toevoeging op 07/11/2023 17:05:22:[/size]

E vH ,

Is het mogelijk om het script ook te wijzigen zonder dat het een functie is AUB.
Dank bij voorbaat.



<?php
function DMSToDecimal($dms) {
    preg_match('/([NS])(\d+)° (\d+\.\d+)/', $dms, $latMatches);
    preg_match('/([EW])(\d+)° (\d+\.\d+)/', $dms, $lonMatches);

    if (!empty($latMatches)) {
        $latDirection = $latMatches[1];
        $latDegrees = (float)$latMatches[2];
        $latMinutes = (float)$latMatches[3];

        $latitude = ($latDirection === 'N') ? ($latDegrees + ($latMinutes / 60)) : -($latDegrees + ($latMinutes / 60));
    } else {
        return false; // Invalid latitude format
    }

    if (!empty($lonMatches)) {
        $lonDirection = $lonMatches[1];
        $lonDegrees = (float)$lonMatches[2];
        $lonMinutes = (float)$lonMatches[3];

        $longitude = ($lonDirection === 'E') ? ($lonDegrees + ($lonMinutes / 60)) : -($lonDegrees + ($lonMinutes / 60));
    } else {
        return false; // Invalid longitude format
    }

    return ['latitude' => $latitude, 'longitude' => $longitude];
}

$dmsLatitude = "N53° 34.127";
$dmsLongitude = "E006° 44.986";

$coordinates = DMSToDecimal($dmsLatitude . " " . $dmsLongitude);

if ($coordinates) {
    $latitude = $coordinates['latitude'];
    $longitude = $coordinates['longitude'];
    
    echo "Breedtegraad (decimaal): $latitude<br>";
    echo "Lengtegraad (decimaal): $longitude<br>";
} else {
    echo "Ongeldige DMS-coördinaten.";
}
?>
 

Hoi Berta,

Waarom zou je dat willen? Iets meer toelichting zou wenselijk zijn als je het mij vraagt.

Een functie gebruik je namelijk om een bepaald doel te behalen... en deze specifieke functie doet precies dat toch?
Omdat deze functie niet werkt binnen een andere functie

de code ziet er dan zo uit, maar blijkbaar werkt dit niet

de foutmelding is :
Fatal error: Cannot redeclare DMSToDecimal() (previously declared


function BeforeProcessRowList(&$data, $pageObject)
{


function DMSToDecimal($dms) {
    echo $dms ;
    preg_match('/([NS])(\d+) (\d+\.\d+)/', $dms, $latMatches);
    preg_match('/([EW])(\d+) (\d+\.\d+)/', $dms, $lonMatches);

    if (!empty($latMatches)) {
        $latDirection = $latMatches[1];
        $latDegrees = (float)$latMatches[2];
        $latMinutes = (float)$latMatches[3];

        $latitude = ($latDirection === 'N') ? ($latDegrees + ($latMinutes / 60)) : -($latDegrees + ($latMinutes / 60));
    } else {
        return false; // Invalid latitude format
    }

    if (!empty($lonMatches)) {
        $lonDirection = $lonMatches[1];
        $lonDegrees = (float)$lonMatches[2];
        $lonMinutes = (float)$lonMatches[3];

        $longitude = ($lonDirection === 'E') ? ($lonDegrees + ($lonMinutes / 60)) : -($lonDegrees + ($lonMinutes / 60));
    } else {
        return false; // Invalid longitude format
    }

    return ['latitude' => $latitude, 'longitude' => $longitude];
}

$dmsLatitude=$data["Breedtegraad"];
$dmsLongitude=$data["Lengtegraad"];


$coordinates = DMSToDecimal($dmsLatitude . " " . $dmsLongitude);

if ($coordinates) {
    $latitude = $coordinates['latitude'];
    $longitude = $coordinates['longitude'];
    
    echo "Breedtegraad (decimaal): $latitude<br>";
    echo "Lengtegraad (decimaal): $longitude<br>";
} else {
    echo "Ongeldige DMS-cordinaten.";
}

return true;
;
}

Je kan prima een functie aanroepen in een andere functie.

Die foutmelding die jij krijgt betekent dat jij een functie aanmaakt met dezelfde naam, en dat kan niet. In jouw code gaat daar niks fout.
Ariën,

Er is geen functie met dezelfde naam aanwezig function DMSToDecimal()
 Fatal error: Cannot redeclare DMSToDecimal() (previously declared


Dit is niet de gehele foutmelding. Er hoort namelijk een verwijzing te zijn naar een bepaalde regel.

Wat Ariën zegt klopt, je hebt nu 2 dezelfde functienamen, waarschijnlijk door een loop?

Zet die functie DMSToDecimal() eens buiten de functie BeforeProcessRowList()

Reageren