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
via chat.openai.com


function decimalToDMS($decimal) {
    $degrees = floor($decimal);
    $minutes = floor(($decimal - $degrees) * 60);
    $seconds = ($decimal - $degrees - ($minutes / 60)) * 3600;
    
    return "$degrees° $minutes' $seconds\"";
}

$latitude = 40.7128; // Voorbeeldbreedtegraad in decimale graden
$longitude = -74.0060; // Voorbeeldlengtegraad in decimale graden

$dmsLatitude = decimalToDMS($latitude);
$dmsLongitude = decimalToDMS($longitude);

echo "Breedtegraad: $dmsLatitude<br>";
echo "Lengtegraad: $dmsLongitude<br>";


en


function DMSToDecimal($degrees, $minutes, $seconds) {
    $decimal = $degrees + ($minutes / 60) + ($seconds / 3600);
    return $decimal;
}

$degrees = 40; // Voorbeeldgraden
$minutes = 42; // Voorbeeldminuten
$seconds = 45; // Voorbeeldseconden

$decimalLatitude = DMSToDecimal($degrees, $minutes, $seconds);

echo "Breedtegraad (decimaal): $decimalLatitude";
Ivo,

Ik ga dit even uitproberen, maar alvast hartelijk dank.


[size=xsmall]Toevoeging op 06/11/2023 09:35:20:[/size]

Ivo,

In decimalToDMS is het de bedoeling dat ik dit krijg breedtegraad : Nxx° xx.xxx lengtegraad : E/Sxxx° xx.xxx

In dmstodecimal is het de bedoeling dat ik vanuit Nxx° xx.xxx E/Sxxx° xx.xxx dit krijg xx.xxxxxx -/xx.xxxxxx

Toch bedankt maar de functies zijn niet volledig.
Wat is de output nu?
De output voor dmstodecimal = Breedtegraad (decimaal): 40.7125 maar verkregen door
$degrees = 40; // Voorbeeldgraden
$minutes = 42; // Voorbeeldminuten
$seconds = 45; // Voorbeeldseconden
terwijl de vraag was van :N/S52° 05.439 lengetgraad :E/W005° 07.279

De output voor decimaltodms = Breedtegraad: 40 42' 46.080000000005" Lengtegraad: -75 59' 38.399999999999" verkregen door $latitude = 40.7128; $longitude = -74.0060;
terwijl de vraag was van breedtegraad :52.09065 lengtegraad :5.12132)

Denk niet dat AI het hier gaat kunnen
nieuwe poging:
<?php
function decimalToDMS($decimal, $isLatitude) {
$degrees = abs(intval($decimal));
$minutes = ($decimal - $degrees) * 60;
$formatted = sprintf('%02d° %07.3f', $degrees, $minutes);

if ($isLatitude) {
$direction = ($decimal >= 0) ? 'N' : 'S';
} else {
$direction = ($decimal >= 0) ? 'E' : 'W';
}

return $direction . $formatted;
}

$latitude = 52.09065;
$longitude = 5.12132;

$dmsLatitude = decimalToDMS($latitude, true);
$dmsLongitude = decimalToDMS($longitude, false);

echo "Breedtegraad: $dmsLatitude<br>";
echo "Lengtegraad: $dmsLongitude<br>";
?>

en
<?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 = "N52° 05.439";
$dmsLongitude = "E005° 07.279";

$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.";
}
?>
Ivo,

Je bent er bijna
Bij decimaltodms krijg ik Breedtegraad: N52° 005.439 Lengtegraad: E05° 007.279
Dit is niet helemaal correct moet zijn Breedtegraad: N52° 05.439 Lengtegraad: E005° 07.279
een nul te veel bij breedtegraad 005 moet 05 zijn en ook bij lengtegraad nul te wijnig bij E05 moet E005 zijn en nul te veel bij 007 moet 07 zijn.

bij dmstodecimal is het juist
dank bij voorbaat.


[size=xsmall]Toevoeging op 06/11/2023 11:00:53:[/size]

Als de cords dit zijn latitude = 47.8297; $longitude = -3.696766;
dan krijg je dit
Breedtegraad: N47° 049.782
Lengtegraad: W03° -401.806

dit klopt totaal niet moet zijn N47° 49.782 W003° 41.806

Je bent er bijna .
on een 0 minderte krijgen moet je de %07 in %06 veranderen

[size=xsmall]Toevoeging op 06/11/2023 11:07:06:[/size]

als -401.806 kleiner is dan -180 dan wil je er kennelijk 360 bij optellen
Dan nog is het verkeerd ik krijg dit bij ingave $latitude = 47.8297; $longitude = -3.696766;

Breedtegraad: N47° 49.782
Lengtegraad: W03° -401.806

er is nog iets dat niet klopt.


[size=xsmall]Toevoeging op 06/11/2023 11:17:24:[/size]

Is het mogelijk om mij de juiste script te geven AUB
Alvast veel dank voor alles

Dank bij voorbaat

[size=xsmall]Toevoeging op 06/11/2023 12:00:53:[/size]

ivo

zo is het denk ik :

<?php
function decimalToDMS($decimal, $isLatitude) {
    $degrees = abs(intval($decimal));
    $minutes = ($decimal - $degrees) * 60;
	if($minutes < -180)
	{
		$minutes = abs($minutes + 360) ;
	}
	
    $formatted = sprintf('%03d° %02.3f', $degrees, $minutes);

    if ($isLatitude) {
        $direction = ($decimal >= 0) ? 'N' : 'S';
    } else {
        $direction = ($decimal >= 0) ? 'E' : 'W';
    }

    return $direction . $formatted;
}

$latitude = 47.8297;
$longitude = -3.696766;

$dmsLatitude = decimalToDMS($latitude, true);
$dmsLongitude = decimalToDMS($longitude, false);

echo "Breedtegraad: $dmsLatitude<br>";
echo "Lengtegraad: $dmsLongitude<br>";
?>

[offtopic]
visa versa

Visa is een creditcard.

Het is vice versa.
[/offtopic]
ivo,

blijkbaar is bovenstaande die ik aangepast heb ook nog niet in orde
als de ingave dit is $latitude = 45.886433; $longitude = -1.192866;
dan is het resultaat dit
Breedtegraad: N045° 53.186
Lengtegraad: W001° -131.572

moet zijn : N45° 53.186 W001° 11.572

[size=xsmall]Toevoeging op 06/11/2023 14:16:37:[/size]

ozzie,

ipv te muggenziften is het misschien iets om op te lossen ???

Reageren