Google maps

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack Software Developer

Bedrijfsomschrijving Functieomschrijving Java ontwerpen, bouwen en testen (T-shaped). Als senior ontwikkelaar ben je bekend in zowel de back-end als de frontend van een applicatie. Angular, Continious Delivery / Integration. Een ervaren iemand die de leiding kan nemen, een weg vindt in nieuwe situaties, en in oude applicaties. Initiatiefrijk, bekend met de (technische) omgevingen die we bij duo gebruiken, niet te beroerd om collega’s te helpen. Als senior programmeur in staat om op te treden als lead programmeur. Ondersteunt de testers bij de testautomatisering en minder ervaren programmeurs bij dagelijks werkzaamheden. Dit laatste met name op het gebied van Angular. Achtergrond

Bekijk vacature »

Medior/senior Back-end developer wanted!

Functie Because of the growth within the company, we are looking for reinforcement in the devlopmenttean. As a back-end developer you build the company software that helps us with the primary processes. A fun (internal) project in which you continuously develop the software! You will work in a small team, we have daily stand-ups and a scrum session every fortnight, led by our Scrum Master. During these sessions, you get the opportunity to present your ideas and discuss them with your fellow developers and the Product Owner. Within the development teams, we use Trello, Gitlab, Jiira, Confluence and Boockstack. They

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

Airport Developer / System engineer

De functie Als onze nieuwe Airport Developer / System Engineer is je doel om uit nieuwbouw- en onderhoudsprojecten maximale waarde te creëren voor Schiphol Group en haar stakeholders. Vanuit je visie en expertise, maar ook (technologische) ontwikkelingen, wetgeving en beleid vertaal je klantwensen naar een gedegen programma van eisen. In de planontwikkelingsfase werk je nauw samen met Plan Ontwikkelaars om je kennis in te brengen ten behoeve van de kwaliteit van het investeringsvoorstel. Je overlegt met diverse partijen, stelt de vraag achter de vraag en verbindt zo de belangen van de luchthaven, proceseigenaar en asseteigenaar om tot een gedragen ontwikkelopgave

Bekijk vacature »

Medior Front-end Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte websites die in eigen beheer zijn. In onze vestiging in Nederweert zit onze development afdeling en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé Medior Front-end Developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het uitwerken van designs tot functionele layouts Je

Bekijk vacature »

C# .NET Developer

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 Bennekom 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. Bedrijfsprofiel De organisatie waar je voor gaat werken heeft een onafhankelijk dataplatform ontwikkelt voor de agrarische sector.

Bekijk vacature »

Software ontwikkelaar

Ben jij graag bezig met verschillende projecten? Vind jij beleving van klanten én medewerkers ook belangrijk? Wij zijn vanwege de doorontwikkeling van het applicatielandschap van onze opdrachtgever op zoek naar een fulltime software ontwikkelaar. Omschrijving Jij en jouw collega’s zijn verantwoordelijk voor de continuïteit en waarborging van het applicatielandschap. Om de processen vloeiend te laten verlopen is software ontwikkeling daarom van essentieel belang. Onze opdrachtgever doet dit voornamelijk zelf, met door hun eigen ontwikkelde applicaties. Dit betekent dat jij: functionele eisen vertaalt naar gebruiksvriendelijke software; tijdens SCRUM sessies advies geeft over het te bouwen ontwerp; nieuwe software ontwikkelt en het

Bekijk vacature »

Front-end developer - working on software for arou

Functie They have recently started looking for an experienced Front-end (mobile/app) developer. Because of the short lines within the team, they are also looking for someone who can communicate with the service desk, sales and support for technical questions. You will join their IT team consisting of about 10 colleagues divided over two teams in rooms opposite each other. Half of these are involved in their front-end. You will work together with, among others, the Architect, 1 senior, 1 junior and there is a Team Leader. In terms of technology, they work with a unique tech-stack, particularly because of the

Bekijk vacature »

Medior PHP Developer

Functie omschrijving Ben jij een getalenteerde PHP Developer en aan de slag in een gemotiveerd team? Lees dan snel verder! Voor onze opdrachtgever in de omgeving van Valkenswaard zijn we op zoek naar een ervaren PHP developer. Jij gaat hier zorg dragen voor het optimaliseren en up-to-date houden van de bestaande applicaties. Je werkt verder aan de applicaties die jij verder ontwikkelt. Dit doe je voornamelijk met PHP en MySQL. Verder ga je je bezig houden met: Het uitbouwen van het E-commerce software platform. Deelnemen aan overleggen met het team. Het ondersteunen van jouw team developers (3 man) en helpen

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. Would you also like to become a Senior Front-End Developer at Coolblue?

Bekijk vacature »

SQL Developer

Functie omschrijving We are looking for a dutch native speaker Jij gaat in deze functie aan de slag met uitdagende projecten en het creëren van maatwerk software, vooral middels SQL. Iedere klant/project is weer anders, maar dat maakt dit bedrijf en de functie erg uniek & uitdagend. Verder heb je de volgende taken: Ontwikkelen en ontwerpen van SQL databases. T-SQL wordt hierbij gebruikt als programmeer laag; Optimalisatie van query's, voor een verbeterde efficiency; Begeleiden van junior developers, mits je dit leuk vindt; Heb je meer interesse in een rol als consultant, dan is dit ook mogelijk. Je heb hier meer

Bekijk vacature »

Low Code Developer - Consultant

Functie omschrijving Wil jij fungeren als een spin in het web en samenwerken met klanten? Voor een leuke en interessante opdrachtgever in omgeving Leiden zijn wij op zoek naar een Low Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten en het leiden van projecten. Ben jij toe aan een nieuwe uitdaging en heb jij verstand van datamodellering en NO CODE Platformen? Lees dan snel verder! Bij deze rol horen de volgende werkzaamheden: Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform,

Bekijk vacature »

Python developer Consultancy

Functie Als Python developer bij deze organisatie werk je voor verschillende klanten. Doordat de oprichter een groot netwerk heeft kun je zelf voorkeuren uitspreken in het type projecten dat je wilt gaan doen. Zo zijn er bijvoorbeeld langdurige of juist korte projecten, maar is ook het type klant, of project bespreekbaar. Werk jij bijvoorbeeld graag aan een nieuw, state-of-the-art web portaal of ben je liever betrokken bij een migratietraject van een bestaande applicatie? Wij gaan voor jou aan de slag! Eisen • Je bent een gedreven developer met sterke voorkeur voor Python • Je bent meer dan een codeklopper •

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

20/04/2024 07:57:45
 
- 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.