Google maps

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack of back-end PHP developer

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

.NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Front-end Developer

Dit ga je doen Doorontwikkelen van software; Ontwikkelen en testen van nieuwe functionaliteiten; Implementaties van nieuwe functionaliteiten en updates; Verzorgen van technische migraties naar nieuwe frameworks; Verwerken van incidenten. Hier ga je werken Onze klant, gevestigd in de regio Amsterdam, draagt bij aan het verbeteren van de veiligheid en efficiëntie van de Nederlandse infrastructuur door het ontwikkelen van afgemeten software oplossingen. Zo passen zij location intelligence toe om onderhoud en reparaties efficiënt te laten verlopen. Verder zorgen deze systemen dat incidenten zo snel mogelijk worden opgelost. Als Front-end Developer ben jij samen met je team betrokken met het (door)ontwikkelen van

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

Medior/senior Front-end developer

Functie Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

Bekijk vacature »

Back end developer Onderwijssoftware

Functie Als back end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van hoogwaardige

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

Bekijk vacature »

Fullstack JavaScript developer (ReactJS, NodeJS, T

Functie Het team bestaat momenteel uit ruim 15 collega’s, waarvan ruim de helft in het ontwikkelteam werkzaam is. Er zijn gave plannen om het platform ook te gaan toepassen op bijv. vliegvelden, maar ook internationale groei zit in het verschiet en daarom zijn ze op zoek naar versterking. Als Fullstack JavaScript developer werk je nauw samen met 9 fullstack (Python en .NET) developers. Binnen het team ga jij je toespitsen op het creeren van de optimale toegankelijkheid en user experience. Om dit voor elkaar te krijgen zul je ontwerpen, programmeren, testen en implementeren. Het hele proces dus! Maar ook bijvoorbeeld

Bekijk vacature »

Outsystems Developer Medior

Dit ga je doen Bouwen aan nieuwe en innovatieve applicaties; Maken van koppelingen tussen Outsystems en het bestaande applicatielandschap; Troubleshooting op bestaande software. Hier ga je werken De organisatie is internationale speler binnen de bouwbranche en richt zich op de infrastructuur, zowel boven als onder de grond. Ze zijn ruim 1100 man groot en maken op IT vlak een mooie groei door. Als ervaren Developer kom je te werken op een IT-afdeling van zo'n 25 man groot. Een aantal jaar geleden hebben ze de keuze gemaakt om zich meer te gaan richten op ontwikkeling en door de groei van de

Bekijk vacature »

Software ontwikkelaar ASP .Net / C#

Functie omschrijving Gezocht! Software ontwikkelaar. Ben jij bekend met termen als ASP .Net, C# en SQL? Ben jij op zoek naar een afwisselende en uitdagende IT-functie binnen de agrarische sector? En omschrijf jij jezelf als zelfstandig, enthousiast en proactief? Dan hebben wij de perfecte functie voor jou! Als Software ontwikkelaar binnen deze organisatie ben je samen met één andere collega verantwoordelijk voor de ontwikkeling en modificatie van het support en controle programma dat binnen dit bedrijf gebruikt wordt. Je gaat hierbij bijdragen aan de vertaling van klantwensen naar effectieve softwareoplossingen. Verder bestaan je werkzaamheden uit: Technische uitwerking van de business

Bekijk vacature »

Software Ontwikkelaar

Functie omschrijving Voor een echt familiebedrijf in de omgeving van 's-Hertogenbosch ben ik op zoek naar een Software Developer. Jij gaat in de functie van Software Developer werken met C# en .NET framework Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Deze organisatie is

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel binnen als

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

C# .NET Software Ontwikkelaar

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Arnhem gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Als C# .NET Developer binnen dit bedrijf houd je je niet alleen bezig met het verbeteren van

Bekijk vacature »

Java Developer

Functie Wat ga je doen als Java developer? Jij komt terecht binnen een informeel team waarin je verantwoordelijk bent voor de backend systemen voor grote klanten als Ziggo en KPN. Als Medior Java developer werk je in teamverband en soms individueel. Gedurende de werkweek zal je veelvuldig sparren met je collega’s voor een goede implementatie van de software. Ben jij een echte Java developer? Ben je geïnteresseerd in de nieuwste technieken en de laatste ontwikkelingen? Dan ben je hier aan het juiste adres! Eisen Wat wordt er van jou verwacht? • Minimaal HBO/WO denk- en werkniveau; • Analytisch sterk, open

Bekijk vacature »
E Ander

E Ander

27/02/2015 11:26:19
Quote Anchor link
Hallo,
Ik ben nieuw op dit forum en volgens de regels moet ik me voorstellen. Ik ben bijna 60 jaar oud. Ik speel met computers vanaf het CPM tijdperk. De voorloper van MSdos. Ik heb nooit een computer opleiding gehad en alles wat ik weet is uit boeken en tegenwoordig van het internet.

Mijn dochter gaat in 2015, vanuit scouting naar de world Jambouree in Japan. Daar gaat ze veel foto's nemen met een camera die ook GPS heeft. Ik wil nu een site maken waar ze die foto's in kan uploaden. Die site moet dan uit de EXIF data van die foto o.a. de GPS data halen. De foto wordt getoond met daarnaast een kaartje van de omgeving met een marker op de GPS plaats.

Op dit moment heb ik een deel wat de foto ophaalt, verkleind, een nieuwe naam geeft en opslaat. De nieuwe naam komt in de database met o.a. de exif data die nodig is.

Nu heeft Google een developerspage waar het deel beschreven staat hoe je database data kan koppelen aan maps. Ik heb daaruit begrepen dat ik die database niet dynamisch op google maps kan plaatsen.
Nu kwam ik ook https://developers.google.com/maps/documentation/javascript/examples/marker-simple tegen en dat is eigenlijk wat ik kan gebruiken.

En mijn struikelpunt hier is dat het script tussen <head> en </head> staat en mijn data in <body>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $GPSEn , $GPSe ?>
</body> staat.

''
function addMarker(positionMarker,titleMarker)
{
var positionMarker = new google.maps.Latlng(52.28958,5.39524);
var marker = new google.mapsMarker(
{
position: positionMarker,
map: map,
title: titleMarker
});
}
''
Ik zoek dus de manier om de $GPSn en $GPSe uit het <body> deel te plaatsen bij Latlng(52. etc.

Wie kan me hiermee helpen?

Toevoeging op 27/02/2015 11:31:59:

Ik merk dat de tekst tussen </body> staat en '' niet geplaatst is. Daar vraag ik hoe ik de data die ik heb kan plaatsen in het deel in <head>. Simpelweg die
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo "var positionMarker = new google etc ($GPSn etc maken werkte niet.
 
PHP hulp

PHP hulp

01/12/2024 02:07:11
 
- Ariën  -
Beheerder

- Ariën -

27/02/2015 11:33:03
Quote Anchor link
De PHP-script om de variabelen $GPSEn, $GPSe op te halen, die kan je prima voor je doctype plaatsen, als deze geen output geeft. Dan kan je in het script de variabelen gewoon echo'en.
 
Willem vp

Willem vp

27/02/2015 12:43:39
Quote Anchor link
Ten eerste hoeft dit script niet per se in je <head>-sectie te staan. Waarschijnlijk wil je het script (of in ieder geval een deel ervan) zelfs ergens onderaan in je <body> hebben om te voorkomen dat het verwijst naar een div die nog niet is aangemaakt.

Ten tweede: de eerste regel in je functie definieert een variabele positionMarker. Maar die geef je ook al door als parameter aan de functie. Het maakt dan niet meer uit wat je in je aanroep gebruikt, want dat wordt altijd onderdrukt door die harde definitie.

Om dit werkend te krijgen hoef je niet eens zo gek veel aan je code te veranderen. Je kan de functie gewoon in je <head> laten staan, maar dan zonder de definitie van positionMarker:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
function addMarker(positionMarker,titleMarker)
{
  var marker = new google.mapsMarker(
  {
    position: positionMarker,
    map: map,
    title: titleMarker
  });
}

En vervolgens kun je dan in je body iets doen als:
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
<script>
<?php
foreach ($fotos as $foto)
{

   $GPSn = $foto['lat'];
   $GPSe = $foto['lon'];
   $title = $foto['title'];
   echo "
     positionMarker = new google.maps.Latlng($GPSn,$GPSe);
     titleMarker = new google.maps.WatDanOok($title);
     addMarker(positionMarker, titleMarker);
   "
;
}

?>

</script>
Gewijzigd op 27/02/2015 12:52:32 door Willem vp
 
E Ander

E Ander

28/02/2015 15:36:35
Quote Anchor link
Willem vp,
hartelijk dank voor je reactie. Zoals ik al schreef ben ik nog steeds veel aan het leren en lukt het me niet om jouw uitleg in mijn script, werkend te krijgen. Ik heb mijn script bijgesloten omdat dit wellicht wat makkelijker te bekijken is.
Hulp in Jip en Janneke taal helpt me zeker om de juiste weg te vinden.
<html>
<head>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
function initialize()
{
var myLatlng = new google.maps.LatLng(52.524125,4.627794)
var mapOptions =
{
zoom: 16,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
/*
var marker = new google.maps.Marker(
{
position: myLatlng,
map: map,
title: 'Hello World!'
});
*/
}
// einde initialize
// markeer foto
function addMarker(positionMarker,titleMarker)
{
var marker = new google.mapsMarker(
{
position: positionMarker,
map: map,
title: titleMarker
});
}
google.maps.event.addDomListener(window, 'load', initialize);

</script>

</head>

<body bgcolor=#C0C0C0 >
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
<?php
echo "<h1>Gps exifdata</h1>";
echo "<FONT COLOR='#993300' SIZE='-2'>found on: http://curiositybeyondcontrol.blogspot.nl/2012/07/convert-latitude-and-longitude-from.html<br></FONT><br><br>";
echo "<IMG SRC='images/test2.JPG' WIDTH='600' ALIGN='left'>";

$image = "images/test2.JPG";
$exif = exif_read_data($image, 0, true);
//echo "Lees de GPS data van de foto.<br>";

foreach ($exif as $key => $section)
{

 foreach ($section as $name => $val)
 {

     if($key == "GPS")
     {
    
        if($name=="GPSLatitudeRef")
        {

            $GPSn=$val;            
        }

        if($name=="GPSLongitudeRef")
        {

            $GPSe=$val;            
        }

         if($name =="GPSLatitude")
        {

                //echo "Gevonden graden=".$val[0]." minuten=".$val[1]." seconden=".$val[2]."<br>";
                $deg=(substr($val[0], 0, -2));
                $min=(substr($val[1], 0, -2));
                $sec=(substr($val[2], 0, -4));
                $sec=round(($sec/100),2);
                //echo "We halen de breuken weg graden=".$deg." minuten=".$min." seconden=".$sec."<br>";
                $min=$min*60;
                //echo "Van de minuten maken we seconden =".$min."<br>";            
                $sec=$min+$sec;
                //echo "totaal minuten + seconden=".$sec."<br>";
                $sec=round(($sec/3600),6);
                //echo "Dat delen door 3600 wordt afgerond =".$sec."<br>";
                $deg=$deg+$sec;
                $GPSn = $deg;
                //echo "Optellen bij de graden maakt ".$GPSn."<br><br><br>";
        }else{
            if($name =="GPSLongitude")
            {

                //echo "Gevonden graden=".$val[0]." minuten=".$val[1]." seconden=".$val[2]."<br>";
                $deg=(substr($val[0], 0, -2));
                $min=(substr($val[1], 0, -2));
                $sec=(substr($val[2], 0, -5));
                $sec=round(($sec/1000),2);
                //echo "We halen de breuken weg graden=".$deg." minuten=".$min." seconden=".$sec."<br>";
                //echo "Zie je dat de seconden nu door 1000 gedeeld worden en bij latitude door 100?<br>";

                $min=$min*60;
                //echo "Van de minuten maken we seconden =".$min."<br>";    
                $sec=$min+$sec;
                //echo "totaal minuten + seconden=".$sec."<br>";
                $sec=round(($sec/3600),6);
                //echo "Dat delen door 3600 wordt afgerond =".$sec."<br>";
                $deg=$deg+$sec;
                $GPSe = $deg;
                //echo "Optellen bij de graden maakt ".$GPSe."<br><br><br>";
            }
         }
     }
  }
}

echo "<br>".$GPSn.",".$GPSe."<br>";
$title = $foto['title'];
echo "
     positionMarker = new google.maps.Latlng($GPSn,$GPSe);
     titleMarker = new google.maps.WatDanOok($title);
     addMarker(positionMarker, titleMarker);
   "
;

echo "<a href='http://www.gpscoordinaten.nl/bepaal-gps-coordinaten.php?latitude=$GPSn&longitude=$GPSe&zoom=15' target='new'>hier is het dus</a>";
//echo "<div id='map-canvas'></div>";
?>

</body>
</html>
 
Willem vp

Willem vp

01/03/2015 12:21:22
Quote Anchor link
Okay, je bent al een aardig eind op de goede weg. Er zijn nog wat dingetjes. Ik hoop dat Jip en Janneke mijn verhaal ook nog kunnen begrijpen. ;-)

1) De code op regel 68-70 is JavaScript-code en moet dus tussen <script>-tags staan. Merk op dat die in mijn eerste post buiten de foreach-loop stonden. Voorwaarde is dan wel dat de loop geen HTML-code genereert, dus regel 65 is dan uit den boze. Maar in dit geval wordt er uberhaupt maar 1 marker gegenereerd, dus kunnen de <script>-tags ook meteen om regel 68-70 komen te staan.

2) De "WatDanOok" in regel 69 moet uiteraard nog worden vervangen door de juiste API-functie. Omdat ik zelf meestal in OpenStreetMaps zit te prutsen en niet met Google Maps weet ik echter de juiste functienaam niet uit mijn hoofd. [even later] Het blijkt dat die parameter gewoon een string is. De hele regel kan er dus uit.

3) De belangrijkste regel van het programma staat in commentaar: regel 74. Zonder die div zal er geen kaart worden getoond.

4) Op regel 66 vraag je $foto['title'] op. Echter, nergens in je code wordt $foto geset. Het kan zijn dat je dat stuk niet hebt gepost, maar als dit de volledige code is, dan krijgt $title dus geen waarde.

En dan een dingetje wat eigenlijk niet fout is, maar in mijn ogen wat inefficiënt: de exif_read_data() geeft een array terug. Die loop je vervolgens in een geneste foreach-loop af. Wanneer je iets generieks met die array-elementen wilt doen is dat de beste manier, maar je zoekt in dit geval naar een paar specifieke elementen en negeert de rest. Ik zou zelf gewoon rechtstreeks de array-elementen opvragen.

Verder heb ik een probleem met regels 32 en 51. Daar reken je een minutenwaarde om naar seconden. Vervolgens hou je dus een variabele over waarvan de naam suggereert dat er minuten in staan, maar die eigenlijk seconden bevat. Ik zou dat heel erg willen afraden, want ooit schiet je daarmee jezelf in je voet. Hetzelfde doe je ook bij de graden in regels 38 en 57. En eigenlijk doe je het ook nog op regels 36 en 55, als je de seconden omrekent naar uren.

Je HTML-body zou er dan dus als volgt uit komen te zien. Voor het overzicht heb ik de echo-regels verwijderd.
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
<body>
<?php
echo "<h1>Gps exifdata</h1>";
echo "<FONT COLOR='#993300' SIZE='-2'>found on: http://curiositybeyondcontrol.blogspot.nl/2012/07/convert-latitude-and-longitude-from.html<br></FONT><br><br>";
echo "<IMG SRC='images/test2.JPG' WIDTH='600' ALIGN='left'>";

$image = "images/test2.JPG";
$exif = exif_read_data($image, 0, true);

if (isset($exif['GPS']['GPSLatitudeRef']))
{

   $GPSn = $exif['GPS']['GPSLatitudeRef'];
}

elseif (isset($exif['GPS']['GPSLatitude']))
{

   $val = $exif['GPS']['GPSLatitude'];
   $deg = substr($val[0], 0, -2);
   $min = substr($val[1], 0, -2);
   $sec = substr($val[2], 0, -4);
   $sec = round(($sec/100),2);
   $sec = (60 * $min) + $sec;
   $GPSn = $deg + round(($sec/3600),6);
}


if (isset($exif['GPS']['GPSLongitudeRef']))
{

   $GPSe = $exif['GPS']['GPSLongitudeRef'];
}

elseif (isset($exif['GPS']['GPSLongitude']))
{

   $val = $exif['GPS']['GPSLongitude'];
   $deg = substr($val[0], 0, -2);
   $min = substr($val[1], 0, -2);
   $sec = substr($val[2], 0, -5);
   $sec = round(($sec/1000),2);
   $sec = (60 * $min) + $sec;
   $GPSe = $deg + round(($sec/3600),6);
}


if (!isset($GPSn) or !isset($GPSe))
{

   echo "De foto bevat geen GPS-coördinaten";
}

echo "<br>".$GPSn.",".$GPSe."<br>";
$title = $foto['title'];
echo "
<script>
   positionMarker = new google.maps.Latlng($GPSn,$GPSe);
   addMarker(positionMarker, $title);
</script>
   "
;

echo "<a href='http://www.gpscoordinaten.nl/bepaal-gps-coordinaten.php?latitude=$GPSn&longitude=$GPSe&zoom=15' target='new'>hier is het dus</a>";
echo "<div id='map-canvas'></div>";
?>

</body>
 
E Ander

E Ander

01/03/2015 19:54:28
Quote Anchor link
Willem vp,
Bedankt dat je moeite wil doen om te reageren. Ik stel dat erg op prijs. Jou opmerkingen 1 en 2 wist ik niet en bedankt voor de opmerking. Je opmerking 3 wil ik koppelen aan het deel bij 4. Ik ben aan het spelen geweest met zowel die regel als met de initialize in het deel <head></head>. Als ik het <dif> deel weg haalde had ik een kaart en als ik de function initialize() weg haalde had ik geen map. Die function initialize() is dus blijkbaar belangrijk.

Ik ben van plan om meer van die exif data te gaan gebruiken, zoals de naam, de kompasstand, datum en tijd. Die ga ik aanvullen als ik eerst de locatie maar werkend krijg.

Dat van die seconden vond ik zelf ook niet mooi maar ik heb gekozen om de eerste data naam te houden. Graden minuten en seconden tot alles klaar was. Dat de minuten inmiddels seconden als waarde hebben is in mijn ogen, minder belangrijk dan de mogelijkheid te hebben verkeerde seconden op te tellen.

Als ik jouw voorbeeld pak, (ik dacht dat er het deel tussen <head> en </head> bij moest.) Dan krijg ik geen GPSn en GPSe. Alleen een N en E zonder de GPSLatitude data.

Mocht het je nog uit komen om eens te kijken wat er fout gaat, dan graag.

Ik dacht dat jou voorbeeld dan zo zou moeten werken:
<html>
<head>
<style>
html, body, #map-canvas {
height: 100%;
margin: 0px;
padding: 0px
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
function initialize()
{
var myLatlng = new google.maps.LatLng(52.524125,4.627794)
var mapOptions =
{
zoom: 16,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
/*
var marker = new google.maps.Marker(
{
position: myLatlng,
map: map,
title: 'Hello World!'
});
*/
}
// einde initialize
// markeer foto
function addMarker(positionMarker,titleMarker)
{
var marker = new google.mapsMarker(
{
position: positionMarker,
map: map,
title: titleMarker
});
}
google.maps.event.addDomListener(window, 'load', initialize);

</script>

</head>

<body bgcolor=#C0C0C0 >
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
<?php
echo "<h1>Gps exifdata</h1>";
echo "<FONT COLOR='#993300' SIZE='-2'>found on: http://curiositybeyondcontrol.blogspot.nl/2012/07/convert-latitude-and-longitude-from.html<br>";
echo "And a lot of hulp from http://www.phphulp.nl/php/forum/topic/google-maps/97335/ in the person Willemvp.</FONT><br><br>";
echo "<IMG SRC='images/test3.JPG' WIDTH='600' ALIGN='left'>";

$image = "images/test3.JPG";
$exif = exif_read_data($image, 0, true);

if (isset($exif['GPS']['GPSLatitudeRef']))
{

   $GPSn = $exif['GPS']['GPSLatitudeRef'];
}

elseif (isset($exif['GPS']['GPSLatitude']))
{

   $val = $exif['GPS']['GPSLatitude'];
   $deg = substr($val[0], 0, -2);
   $min = substr($val[1], 0, -2);
   $sec = substr($val[2], 0, -4);
   $sec = round(($sec/100),2);
   $sec = (60 * $min) + $sec;
   $GPSn = $deg + round(($sec/3600),6);
}

echo "1".$GPSn.$deg.$min.$sec."<br>";
if (isset($exif['GPS']['GPSLongitudeRef']))
{

   $GPSe = $exif['GPS']['GPSLongitudeRef'];
}

elseif (isset($exif['GPS']['GPSLongitude']))
{

   $val = $exif['GPS']['GPSLongitude'];
   $deg = substr($val[0], 0, -2);
   $min = substr($val[1], 0, -2);
   $sec = substr($val[2], 0, -5);
   $sec = round(($sec/1000),2);
   $sec = (60 * $min) + $sec;
   $GPSe = $deg + round(($sec/3600),6);
}

echo $GPSn.",".$GPSe."<br>";
if (!isset($GPSn) or !isset($GPSe))
{

   echo "De foto bevat geen GPS-coördinaten";
}

echo "<br>".$GPSn.",".$GPSe."<br>";
$title = $foto['title'];
echo "
<script>
   positionMarker = new google.maps.Latlng($GPSn,$GPSe);
   addMarker(positionMarker, $title);
</script>
   "
;

echo "<a href='http://www.gpscoordinaten.nl/bepaal-gps-coordinaten.php?latitude=$GPSn&longitude=$GPSe&zoom=15' target='new'>hier is het dus</a>";
echo "<div id='map-canvas'></div>";
?>

</body>
</html>
 
Willem vp

Willem vp

01/03/2015 22:59:47
Quote Anchor link
De functie initialize() is inderdaad belangrijk, want die maakt een kaartobject aan en zorgt ervoor dat de <div> met id 'map-canvas' die kaart toont. En het klopte dat je het <head>-gedeelte nog zelf moest toevoegen. Aangezien ik er echter niets aan had veranderd, vond ik het nutteloos dat er ook bij te posten.

Verder klopt het dat de code uit mijn vorige post niet werkt. Het had geholpen als ik eens zelf had gekeken wat er precies in die exif-informatie staat. ;-) Wanneer je die twee elseif-commando's die ik had toegevoegd verandert in een gewone if dan werkt het al een stuk beter.

Maar nu komen we bij de kern van het probleem. Ik dacht in eerste instantie dat de exif-informatie óf een GPSLatitudeRef óf een GPSLatitude bevat en dat die dan een coördinaat in een bepaald formaat bevatte, waarbij de Ref-variant wat extra nabewerking nodig had. Dat blijkt dus niet zo te zijn.

De GPSLatitude bevat alleen maar een indicatie voor het gebruikte halfrond: N of S. De GPSLatitudeRef bevat vervolgens de bijbehorende coördinaat. (Idem voor de Longitude.) Omdat je in beide gevallen de waarde toekent aan $GPSn wordt de informatie over het halfrond overschreven door de coördinaat. Als je dochter alleen maar naar Japan gaat, is er niets aan de hand, maar gaat ze een keer naar Australië of Amerika, dan zijn de gebakken peren aan het dansen. Of zoiets. ;-) Maar dat zet ik even aan de kant, want dat probleem is het eenvoudigst op te lossen.

Een groter probleem zit in de notatie van de coördinaten: dat is een ouderwetse breuk, met teller en noemer enzo. En dat kun je inderdaad niet zomaar aan PHP voeren. Nu snap ik ook die substr-commando's. Daarmee probeerde je de teller van de breuk te krijgen. Echter, de code doet een paar aannames die niet universeel zijn. De code voor GPSLongitude gaat bijvoorbeeld uit van een input in de trant van: 5/1 21/1 48960/1000. Echter, mijn nieuwe smartphone gebruikt 5/1 21/1 4896/100 en mijn oude smartphone (zelfde merk) maakt er iets van als 5/1 2258/100 0/1. Er moet dus iets universelers komen.

Ik heb voor de gelegenheid een functie breuk_naar_decimaal() gemaakt. Die heeft als input een string met het formaat "abc/def" (waarbij abc en def getallen zijn van 1 of meer cijfers). De functie splitst de string op de /, deelt vervolgens abc door def en geeft het resultaat terug. Om de code duidelijk te houden heb ik er vrijwel geen foutafhandeling in zitten; dat mag je zelf toevoegen. ;-) In alle regels waar substr() werd gebruikt, wordt nu breuk_naar_decimaal() aangeroepen.

Vervolgens moeten we de windrichtingen (NZ en EW) nog corrigeren. Omdat het niet gaat werken om die op te slaan in $GPSn en $GPSe heb ik daar $GPSnref en $GPSeref van gemaakt (analoog aan de EXIF-tag waaraan ze zijn ontleend). Met de waardes N, Z, E en W kunnen we niets; die moeten we numeriek maken. Nu is het zo dat coördinaten op het zuidelijk en westelijk halfrond negatief zijn, dus heb ik ervoor gekozen om de waardes N en E te vertalen naar 1 en Z en W naar -1. Zodra we de graden gaan berekenen, vermenigvuldigen we dan het eindresultaat met $GPSnref of $GPSeref en we zijn klaar.

Klaar? Nou, nog niet helemaal. Ik krijg nu een mooie kaart te zien, maar nog geen marker. En dat komt door wat ik al vreesde: de initialize() wordt pas aangeroepen als de hele pagina geladen is. Dat komt door de event handler die ergens in het <head>-script staat: "google.maps.event.addDomListener(window, 'load', initialize)". De javascriptcode die we genereren om de marker te maken wordt daardoor aangeroepen vóór de kaart is geïnitialiseerd. Dat heb ik verholpen door de event handler te verwijderen en initialize() zelf aan te roepen. Dat betekent ook dat de <div> waar de kaart in wordt getoond al moet bestaan voor initialize() wordt aangeroepen.

Het resultaat kun je zien op http://phphulp.willem.guru/exif.php en de code op http://phphulp.willem.guru/exif.phps. Omdat ik nog wat zit te spelen met de code zal ik hieronder een werkende snapshot zetten.

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
<html>
<head>
<style>
html, body { height: 100%; margin: 0px; padding: 0px; }
#map-canvas { height: 400px; width: 600px; }
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
var map;
function initialize()
{
   var myLatlng = new google.maps.LatLng(52.524125,4.627794);
   var mapOptions =
   {
      zoom: 4,
      center: myLatlng
   }
   map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
}
// einde initialize
// markeer foto
function addMarker(positionMarker,titleMarker)
{
   var marker = new google.maps.Marker(
   {
      position: positionMarker,
      map: map,
      title: titleMarker
   });
}
</script>
</head>

<body bgcolor="#C0C0C0" >
<?php
echo "<h1>GPS exifdata</h1>";
echo "<font color='#993300' size='-2'>found on: http://curiositybeyondcontrol.blogspot.nl/2012/07/convert-latitude-and-longitude-from.html<br>";
echo "And a lot of hulp from http://www.phphulp.nl/php/forum/topic/google-maps/97335/ in the person Willemvp.</font><br><br>";

$image='exif.jpg';
echo "<img src='$image' width='600'>";
$exif = exif_read_data($image, 0, true);

if (isset($exif['GPS']['GPSLatitudeRef']))
{

   $GPSnref = $exif['GPS']['GPSLatitudeRef'] == 'N' ? 1 : -1;
}

if (isset($exif['GPS']['GPSLatitude']))
{

   $val = $exif['GPS']['GPSLatitude'];
   $deg = breuk_naar_decimaal($val[0]);
   $min = breuk_naar_decimaal($val[1]);
   $sec = breuk_naar_decimaal($val[2]);
   $sec = (60 * $min) + $sec;
   $GPSn = $GPSnref * ($deg + round(($sec/3600),6));
}

if (isset($exif['GPS']['GPSLongitudeRef']))
{

   $GPSeref = $exif['GPS']['GPSLongitudeRef'] == 'E' ? 1 : -1;
}

if (isset($exif['GPS']['GPSLongitude']))
{

   $val = $exif['GPS']['GPSLongitude'];
   $deg = breuk_naar_decimaal($val[0]);
   $min = breuk_naar_decimaal($val[1]);
   $sec = breuk_naar_decimaal($val[2]);
   $sec = (60 * $min) + $sec;
   $GPSe = $GPSeref * ($deg + round(($sec/3600),6));
}

if (!isset($GPSn) or !isset($GPSe))
{

   echo "De foto bevat geen GPS-co&ouml;rdinaten";
}

echo "<br>".$GPSn.",".$GPSe."<br>";
$title = "Titel van de foto";

echo "<a href='http://www.gpscoordinaten.nl/bepaal-gps-coordinaten.php?latitude=$GPSn&longitude=$GPSe&zoom=15' target='new'>hier is het dus</a>";
echo "<div id='map-canvas'></div>";
echo "
<script>
   initialize();
   var positionMarker = new google.maps.LatLng($GPSn,$GPSe);
   addMarker(positionMarker, '$title');
</script>
   "
;
?>

</body>
</html>
<?php
function breuk_naar_decimaal ($str)
{

   $breuk = explode('/', $str);
   # $breuk[0] bevat nu de teller en $breuk[1] bevat de noemer.
   if (!isset($breuk[1]) or $breuk[1] == 0) return $breuk[0];
   return $breuk[0] / $breuk[1];
}

?>
Gewijzigd op 02/03/2015 01:23:49 door Willem vp
 
E Ander

E Ander

02/03/2015 12:05:34
Quote Anchor link
Willem vp,
Dat van die omrekening zat me ook als dwars. Mijn foto toestel met GPS geeft een breuk naar 1000 en mijn smartfone naar 100. Maar omdat mijn dochter het foto toestel meenam ging ik er vanuit dat ik dat met die berekening, later nog wel eens kon bekijken. Een telefoon heeft geen zin, verkeerde frequentie en andere netspanning.
Met visualbasic kon ik redelijk overweg en zocht ik aantal tekens in totaal, dan aantal tekens tot / dan kijken wat er overbleef. Dat moest ik voor PHP nog opzoeken. Jij heb me nu o.a. daarmee heel veel geholpen. Ik had inderdaad die explode voorbij zien komen maar het was me nog niet gelukt. Ik bleef een foutmelding krijgen. Ik werkte meteen met explode("/",val[0]) en dat ging dus niet. En dat deel erna was ik al helemaal niet op gekomen.

Jou opmerking dat het fout gaat als de foto's ergens anders genomen zijn, had ik ook al bedacht. Momenteel wordt dat dan try and error. De kaart laten centreren op de marker positie moet lukken lijkt me.
Verder bracht je me op een idee, waarom 1 marker waarom boven aan de pagina geen kaart van Japan met de route van de genomen foto's? Volgend project dan maar weer. ;-)

Ik heb het voorbeeld script meteen gedownload en op mijn home server werkt het schitterend.

Heel erg bedankt dat je een hoop tijd heb willen steken in mijn 'uitdaging' zoals dat heet.




Toevoeging op 02/03/2015 12:19:54:

Willem vp,
Inmiddels vraag ik me af of ik de data van de GPSLatitudeRef en de GPSLongitudeRef in de berekening nodig heb.

Voorheen had ik ook al eens gebruik gemaakt van een link naar een nieuwe pagina. Hierdoor wordt Googlemap locatie ook getoond. Dan is GPSn - gpsNB en GPSe - gpsOL. Nadeel hiervan was dat ik altijd op de link moest drukken om een nieuwe pagina te openen. Ook hier heb ik mee lopen spelen, probleem werd dat de foto data ingelezen werd, een pagina gemaakt en dan om het kaartje te zien weer een andere pagina geopend moest worden. Ik post de link hier, wellicht is er iemand die het kan gebruiken.

https://maps.google.nl/maps/ms?msid=210870742336751719012.0004b825476f7e2ea0aa9&amp;msa=0&amp;hl=nl&center='.$gpsNB.','.$gpsOL.'&amp;ie=UTF8&amp;ll='.$gpsNB.','.$gpsOL.'&amp;spn=0.005000,0.010006&amp;t=h&amp;output=embed"></iframe><br /><small><a href="https://maps.google.nl/maps/ms?msid=210870742336751719012.0004b825476f7e2ea0aa9&amp;msa=0&amp;hl=nl&amp;ie=UTF8&amp;ll=51.798226,4.660714&amp;spn=1.161662,0.478892&amp;t=h&amp;source=embed" style="color:#0000FF;text-align:left">HSL_zuid_2</a> weergeven op een grotere kaart</small></td>'
 
Willem vp

Willem vp

03/03/2015 00:41:40
Quote Anchor link
> Jou opmerking dat het fout gaat als de foto's ergens anders genomen zijn,
> had ik ook al bedacht. Momenteel wordt dat dan try and error.

Nee hoor, want dat zit al in het script verwerkt. De vermenigvuldiging met $GPSnref of $GPSeref zorgt daarvoor.

> De kaart laten centreren op de marker positie moet lukken lijkt me.

Daar zijn twee manieren voor. Omdat initialize() nu expliciet wordt aangeroepen, zou je de positionMarker-variabele daaraan kunnen meegeven; die dient dan als vervanging voor de myLatLng die in de eerste regel van initialize() wordt gedefinieerd.

De tweede manier is om nadat de kaart is aangemaakt de kaart opnieuw te centreren. In OpenStreetMap is daar de call Map.setCenter() voor. De call voor Google Maps ken ik niet uit mijn hoofd, maar dat zal ook wel zoiets zijn.

> Verder bracht je me op een idee, waarom 1 marker waarom boven aan de pagina
> geen kaart van Japan met de route van de genomen foto's?

Nou, in mijn eerste reactie was ik er zelfs al een beetje vanuit gegaan dat dat de bedoeling was. ;-) Maar goed, je moet ergens beginnen natuurlijk. Om het voor de eerste foto werkend te krijgen is vaak het moeilijkst.

> Inmiddels vraag ik me af of ik de data van de GPSLatitudeRef en de
> GPSLongitudeRef in de berekening nodig heb.

Als je alleen op het Noordelijk en Oostelijk halfrond blijft heb je die niet nodig. Wil je dat het script ook blijft werken bij het Zuidelijk of Westelijk halfrond, dan heb je die informatie nodig, want de GPSLongitude en/of GPSLatitude moeten dan negatief worden. Als je een foto hebt gemaakt in Dublin, zou die zonder die Ref-velden gepind worden in Lauwersoog of Kollumerpomp of zo. Daar is het ook wel mooi, maar toch is het anders. ;-)
 



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.