Omrekenen coordinaten vice versa

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 5 volgende »

Berta Pappens

Berta Pappens

05/11/2023 18:02:21
Quote Anchor link
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
Gewijzigd op 17/11/2023 15:11:01 door - Ariën -
 
PHP hulp

PHP hulp

16/04/2024 23:36:10
 
Ivo P

Ivo P

06/11/2023 08:46:26
Quote Anchor link
via chat.openai.com

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
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";
 
Berta Pappens

Berta Pappens

06/11/2023 09:26:35
Quote Anchor link
Ivo,

Ik ga dit even uitproberen, maar alvast hartelijk dank.


Toevoeging op 06/11/2023 09:35:20:

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.
 
- Ariën  -
Beheerder

- Ariën -

06/11/2023 10:08:28
Quote Anchor link
Wat is de output nu?
 
Berta Pappens

Berta Pappens

06/11/2023 10:16:29
Quote Anchor link
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
 
Ivo P

Ivo P

06/11/2023 10:43:57
Quote Anchor link
nieuwe poging:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.";
}

?>
 
Berta Pappens

Berta Pappens

06/11/2023 10:55:08
Quote Anchor link
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.


Toevoeging op 06/11/2023 11:00:53:

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 .
 
Ivo P

Ivo P

06/11/2023 11:04:48
Quote Anchor link
on een 0 minderte krijgen moet je de %07 in %06 veranderen

Toevoeging op 06/11/2023 11:07:06:

als -401.806 kleiner is dan -180 dan wil je er kennelijk 360 bij optellen
 
Berta Pappens

Berta Pappens

06/11/2023 11:10:25
Quote Anchor link
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.


Toevoeging op 06/11/2023 11:17:24:

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

Dank bij voorbaat

Toevoeging op 06/11/2023 12:00:53:

ivo

zo is het denk ik :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>";
?>
 
Ozzie PHP

Ozzie PHP

06/11/2023 13:52:17
Quote Anchor link
Offtopic:

visa versa

Visa is een creditcard.

Het is vice versa.
 
Berta Pappens

Berta Pappens

06/11/2023 14:15:25
Quote Anchor link
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

Toevoeging op 06/11/2023 14:16:37:

ozzie,

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

Ozzie PHP

06/11/2023 14:30:41
Quote Anchor link
Berta Pappens op 06/11/2023 14:15:25:
ozzie,

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

Jammer dat je op deze manier reageert. Ik wijs je gewoon ergens op, zodat je daar in de toekomst je voordeel mee kunt doen. Er staat nota bene "offtopic" bij. Maar goed, sorry dat ik je een tip heb gegeven hoor. Ik zal het niet meer doen.
 
Ivo P

Ivo P

06/11/2023 15:01:35
Quote Anchor link
N045 of N45 lijkt me een weergave dingetje.

Die -131 en +11: is daar dan al een keer een correctie van 360 overheen gegaan?

Je mag zelf ook suggesties doen.

Het komt al een stuk vriendelijker over als je zegt dat je een geval hebt waarbij je een verschil van 150 graden hebt.
Dan heb je op z'n minst ook zelf even gerekend. (en misschien ook gekeken naar de formule)

Je bent nu een eind op weg.
Ja: "Jij" bent op weg.

"ik" niet. Ik vond het vooral leuk om je de goede kant op te duwen. Niet om hier "mijn" probleem van te maken.

Anders heb ik ook nog wel een paar woonhuisverzekeringsberekeningen die nog gedaan kunnen worden door jou misschien.
 
Berta Pappens

Berta Pappens

06/11/2023 15:09:46
Quote Anchor link
Ivo,

zoals je kan zien heb ik een if toegevoegd , maar blijkbaar is dit niet de goede oplossing omdat het verkeerd loop als het -1,546982 wordt dan krijg je -131 in het coordinaat.
Hier stopt het voor mij, omdat ik daar niet in thuis ben, maar er zijn hier wel meesters in deze materie.

bedankt voor alles, misschien is er nog iemand die wil helpen, ikzelf ben niet thuis in de omzetting van coordinaten.
Dus

Toevoeging op 06/11/2023 18:51:30:

IVO
Heb zelf iets gemaakt die perfect werkt maar is nogal lang.
Bekijk het even of het eenvoudiger kan.
Probeer het eens uit ....????
Wat is uw reactie als kenner ..??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php


$a
=".";
$b=0;
$c=0;
$d=0;
$e=0;
$f=0;
$g=0;
$h=0;
$i=0;
$lat=0;
$lon=0;
$Breedtegraad="45.886433";
$Lengtegraad ="-1.192866";
$len = strlen($Lengtegraad) ;

if (strstr($Lengtegraad,'-'))
{

    $code = "W" ;
$Lengtegraad = substr($Lengtegraad,1,$len-1);    

}

else
{
    $code = "E" ;

}


$lonpos = strripos($Lengtegraad, $a);
$latpos = strripos($Breedtegraad, $a);

//N
$lat=substr($Breedtegraad,0,$latpos);
$lon =substr($Lengtegraad,0,$lonpos);
//E
$posB=strripos($Breedtegraad, $a)+1;
$b=substr($Breedtegraad,$posB);
$bb="0.".$b ;
$d=round($bb*60,3) ;
$posx=strripos($d, $a);
if ($posx == 1)
{

$z="0".substr($d,0,1);
}

else
{
$z=substr($d,0,2);
}

$posD=strripos($d, $a)+1;
$f=substr($d,$posD);
if (strlen($f)== 2)
{

$f=$f."0" ;
}

if (strlen($f)== 1)
{

$f=$f."00" ;
}

$ff="0.".$f ;

$h=round($ff*60,1) ;
$posL=strripos($Lengtegraad, $a)+1;
$c=substr($Lengtegraad,$posL);
$cc="0.".$c ;
$e=round($cc*60,3);
$posy=strripos($e, $a);
if ($posy == 1)
{

$q="0".substr($e,0,1);
}

else
{
$q=substr($e,0,2);
}

$posE=strripos($e, $a)+1;
$g=substr($e,$posE);
if (strlen($g)== 2)
{

$g=$g."0" ;
}

if (strlen($g)== 1)
{

$g=$g."00" ;
}

$gg="0.".$g ;
$i=round($gg*60,1) ;
$endlat = "N".$lat."° ".$z."' ".$h.'"' ;
$endlatq = "N".$lat."° ".$z.".".$f ;
echo $endlatq ;
echo "<br>";

if (strlen($lon) == 1 )
{

$endlon = $code."00".$lon."° ".$q."' ".$i.'"' ;
$endlonq = $code."00".$lon."° ".$q.".".$g ;
}

else
{
$endlon = $code."0".$lon."° ".$q."' ".$i.'"' ;
$endlonq = $code."0".$lon."° ".$q.".".$g ;
}


echo $endlonq ;
echo "<br>";


?>
 
Ivo P

Ivo P

06/11/2023 20:09:27
Quote Anchor link
paar tips:

1) spring je code in bij if/else blokken. Dat verbetert te deelbaarheid.
2) geef je variabelen zinnige namen: $a = "."; noem $a dan $punt.
idem voor $b t/m $z; Daar bak je volgende week al niets meer mee.

3) je werkt met getallen. Om te kijken of dat met - begint, controleer je dan doorgaans of $Lengtegraad < 0;
En dat maak je dan weer positief door abs($Lengtegraad) te gebruiken. Dat is begrijpelijker dan gehannes met substr()

(Enne substr($string, 4, $lengteString - 4) is het zelfde als substr($string, 4))
 
E vH

E vH

07/11/2023 10:35:24
Quote Anchor link
Niet de schoonheidsprijs, maar volgens mij krijg je nu de gewenste output:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

# referentiepunt: https://www.javawa.nl/coords.html

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

    
    $decimaal = round($decimal,5);
    $graden_explode = explode(".", $decimaal);
    $graden = abs(intval($graden_explode[0]));
    $uren = $graden_explode[1];
    $minuten = round($uren*60/100000,3);
    
    if ($isLatitude) {
        $graden = $graden;
    }
else {
        $graden = sprintf("%'.03d", $graden);
    }

    
    //cho 'Decimaal: '.$decimaal.'<br/>';
    //echo 'Graden: '.$graden.'<br/>';
    //echo 'Graden: '.$graden_explode[1].'<br/>';
    //echo 'h ddd.ddddd° (graden): '.$h.' '.$graden.'.'.$uren.'°<br/>';
    //echo 'h ddd° mm.mmm\' (graden en minuten): '.$h.' '.$graden.'° '.$minuten.'\'<br/>';

    $full_format = ''.$h.' '.$graden.'° '.$minuten.'\'';
    
    return $full_format;
}


$latitude = 45.886433;
$longitude =  -1.192866;

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

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

?>
 
Berta Pappens

Berta Pappens

07/11/2023 11:44:45
Quote Anchor link
E vH,

Bedankt voor het resultaat nog een klein foutje .
Bij ingave
$latitude = 47.8297;
$longitude = -3.696766;

output :
Breedtegraad: N47° 4.978
Lengtegraad: W003° 41.806

breedtegraad is niet juist moet zijn N47° 04.978 de nul voor de vier is te weinig.
Is het mogelijk dit even na te kijken AUB anders ziet het er perfect uit
 
E vH

E vH

07/11/2023 11:57:38
Quote Anchor link
Hi Berta,

kan het zijn dat het N 47° 49.782' moet zijn, ipv N47° 04.978? ( als ik javawa volg )

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$minuten = round($uren*60/100000,3);

heb ik namelijk snel afgeraffeld..en niet verder doorgetest.
 
Berta Pappens

Berta Pappens

07/11/2023 12:05:06
Quote Anchor link
EvH,

De juist cords zijn N47° 49.782 W003° 41.806

$minuten = round($uren*60/100000,3); dit staat in uw code en toch is het mis ?
 
E vH

E vH

07/11/2023 12:11:44
Quote Anchor link
verander die regel $minuten is naar dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$minuten = round((('0.'.$uren)*60),3);
Gewijzigd op 07/11/2023 12:13:12 door E vH
 
Berta Pappens

Berta Pappens

07/11/2023 12:15:12
Quote Anchor link
E vH,

Dan krijg ik dit
Breedtegraad: N47° 49.782
Lengtegraad: W003° 41.8062

de lengtegraad achteraan is dan te groot.
 

Pagina: 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.