Google API

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

N K

N K

26/04/2012 15:26:34
Quote Anchor link
Oke, ik blij dat ik eindelijk een begin gemaakt heb met PHP proberen onder de knie krijgen. Kom ik nu er toch niet onderuit om ook dieper in javascript te duiken.

Ik wil graag onderstaande op mijn site implementeren
http://gmaps-samples-v3.googlecode.com/svn/trunk/draggable-markers/draggable-markers.html

Nu wil ik dat de output na het slepen van een marker de postcode is en dat deze waarde dan in een hidden text field in mijn html formulier erbij komt te staan.

Heeft iemand een idee hoe dit te bereiken?

Hier staan de files
http://gmaps-samples-v3.googlecode.com/svn/trunk/draggable-markers/

Dank alvast..
 
PHP hulp

PHP hulp

28/11/2024 21:42:10
 
Erwin H

Erwin H

26/04/2012 15:36:05
Quote Anchor link
Wat lukt er niet, laten we daar mee beginnen.
 
Wouter J

Wouter J

26/04/2012 15:45:36
Quote Anchor link
Ik heb een keer een grote tutorial reeks over de Google Maps API gemaakt, misschien eens handig om door te lezen: http://www.html-site.nl/google-maps-api-v3-de-kaart-krijgen
 
N K

N K

26/04/2012 16:06:33
Quote Anchor link
Ik zal er vast niet onderuit komen om me ook in javascript te verdiepen maar eerlijk gezegd heb ik nu even mijn handen vol aan PHP.

Wat lukt er niet: Ik weet niet waar ik moet beginnen..
Ik heb de documentatie van google doorgelezen maar ik kom hier niet echt wijs uit.

Deze functie zorgt er volgens mij voor dat het adres wordt opgehaald.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function updateMarkerAddress(str) {
  document.getElementById('address').innerHTML = str;
}


De output hiervan is het volledige adres. Ik wil hier graag alleen de postcode van hebben maar vraag me echt af hoe ik dit moet doen zonder kennis van javascript.
Daarnaast, als hij de juiste output geeft, dan wil ik de waarde in een text field plaatsen om er vervolgens wat SQL queries mee uit te voeren. Het SQL stuk is al wel klaar.
Ik vraag niet of jullie het helemaal voor mij willen bouwen (zou wel fijn zijn ;) maar ik zie daarentegen ook heel weinig info op het net over reverse geocoding.
Gewijzigd op 26/04/2012 16:07:25 door N K
 
Kris Peeters

Kris Peeters

26/04/2012 16:38:15
Quote Anchor link
Je moet lijn 13 kapen / omzeilen.

Daar staat: updateMarkerAddress(responses[0].formatted_address);

responses[0] geeft je een object vol adres-gegevens.
Vlug even een functie geschreven die in dat object vist naar een gegeven met type = 'postal_code'; in plaats van .formatted_address te gebruiken

(voor het gemak copy/paste ik alles)
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder = new google.maps.Geocoder();

function geocodePosition(pos) {
  geocoder.geocode({
    latLng: pos
  }, function(responses) {
    if (responses && responses.length > 0) {
      var postal_code = addresComponent('postal_code', responses[0])
      if (postal_code) {
        updateMarkerAddress(postal_code);
      }
      else {
        updateMarkerAddress('Geen postcode gevonden');
      }
      
    }
    else {
      updateMarkerAddress('Cannot determine address at this location.');
    }
  });
}

/**
*   geocodeResponse is een object vol adres-gegevens.  
*   We gaan in die gegevens vissen naar een gegeven dat overeen komt met de parameter "type".
*  
*   bv. type = 'postal_code' =>
*   geocodeResponse.address_components[5].types[1] = 'postal_code'
*   geocodeResponse.address_components[5].long_name = '8310'
*/
function addresComponent(type, geocodeResponse) {
  for(var i=0; i < geocodeResponse.address_components.length; i++) {
    for (var j=0; j < geocodeResponse.address_components[i].types.length; j++) {
      if (geocodeResponse.address_components[i].types[j] == type) {
        return geocodeResponse.address_components[i].long_name;
      }
    }
  }
  return '';
}

function updateMarkerStatus(str) {
  document.getElementById('markerStatus').innerHTML = str;
}

function updateMarkerPosition(latLng) {
  document.getElementById('info').innerHTML = [
    latLng.lat(),
    latLng.lng()
  ].join(', ');
}

function updateMarkerAddress(str) {
  document.getElementById('address').innerHTML = str;
}

function initialize() {
  var latLng = new google.maps.LatLng(53, 6);
  var map = new google.maps.Map(document.getElementById('mapCanvas'), {
    zoom: 8,
    center: latLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });
  var marker = new google.maps.Marker({
    position: latLng,
    title: 'Point A',
    map: map,
    draggable: true
  });
  
  // Update current position info.
  updateMarkerPosition(latLng);
  geocodePosition(latLng);
  
  // Add dragging event listeners.
  google.maps.event.addListener(marker, 'dragstart', function() {
    updateMarkerAddress('Dragging...');
  });
  
  google.maps.event.addListener(marker, 'drag', function() {
    updateMarkerStatus('Dragging...');
    updateMarkerPosition(marker.getPosition());
  });
  
  google.maps.event.addListener(marker, 'dragend', function() {
    updateMarkerStatus('Drag ended');
    geocodePosition(marker.getPosition());
  });
}

// Onload handler to fire off the app.
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
  <style>
  #mapCanvas {
    width: 500px;
    height: 400px;
    float: left;
  }
  #infoPanel {
    float: left;
    margin-left: 10px;
  }
  #infoPanel div {
    margin-bottom: 5px;
  }
  </style>
  
  <div id="mapCanvas"></div>
  <div id="infoPanel">
    <b>Marker status:</b>
    <div id="markerStatus"><i>Click and drag the marker.</i></div>
    <b>Current position:</b>
    <div id="info"></div>
    <b>Postcode:</b>
    <div id="address"></div>
  </div>
</body>
</html>
 
Q S

Q S

26/04/2012 16:43:43
Quote Anchor link
Naar mijn weten is postcode altijd de laatste dus het zou ook zo kunnen, maar die van Kris is wel robuuster in het geval Google iets aanpast

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function geocodePosition(pos) {
  geocoder.geocode({
    latLng: pos
  }, function(responses) {
    if (responses && responses.length > 0) {
      updateMarkerAddress(responses[0].address_components[responses[0].address_components.length-1].short_name);
    }
else {
      updateMarkerAddress('Cannot determine address at this location.');
    }
  });
}

?>
 
Kris Peeters

Kris Peeters

26/04/2012 16:51:27
Quote Anchor link
O ja, daar had ik nooit op gelet.

Wel ja, ik zag (in Firebug) dat het aantal compontnten verschilt per land (ik ben Belg).

Dan heb ik maar een generieke functie geschreven waarin je kan vissen naar componenten.

Dan kan je ook zoiets doen als:

(getest)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
      var address = addresComponent('route', responses[0]).toString()
        + ' ' + addresComponent('street_number', responses[0]).toString()
        + ', ' + addresComponent('postal_code', responses[0]).toString()
        + ' ' + addresComponent('administrative_area_level_1', responses[0]).toString();
Gewijzigd op 26/04/2012 17:01:36 door Kris Peeters
 
N K

N K

26/04/2012 17:36:37
Quote Anchor link
wow dat is snel....Dank allebei.
Dit is echt precies wat ik wilde.
Nu nog deze output in een input field weten te krijgen maar ik denk dat ik dat wel zelf voor elkaar krijg vanavond.
thanx!
 
Kris Peeters

Kris Peeters

26/04/2012 18:34:35
Quote Anchor link
N K op 26/04/2012 17:36:37:
...
Nu nog deze output in een input field weten te krijgen ...


Dan moet je er op letten dat je .innerHTML moet vervangen door .value
 
N K

N K

26/04/2012 19:30:04
Quote Anchor link
Ik zit even te denken..
Ik maak ook gebruik van een andere API (pro6pp) om de omliggende postcodes te bepalen.
Nu ik zo deze oplossing bekijk van google lijkt het me natuurlijk het mooist om alleen deze API te gebruiken voor hetgeen wat ik wil. Scheelt me weer een afhankelijkheid..


Is het voor jullie ook makkelijk te maken om een range functie toe te voegen en de output (alle postcodes in die range) in een array te laten zien?
Ik besef me nu dat ik wel wat veel vraag maar jullie waren zo snel....
 
Q S

Q S

26/04/2012 20:22:05
Quote Anchor link
Wat bedoel je precies met alle postcodes in die range?
 
N K

N K

26/04/2012 20:34:10
Quote Anchor link
Ik zal het proberen uit te leggen. Ik heb het nu allemaal werkend, dank daarvoor!

Ik geef nu een postcode en een range op. (range kan een variabele straal zijn van 1 tot 100 km) Nu heb ik het zo dat PRO6PP voor mij de omliggende postcodes berekend aan de hand van mijn doorgestuurde postcode en op basis daarvan mij de omliggende postcodes hiervan teruggeeft (berekening is op basis van latitude en longitude coordinaten) . Deze plaats ik vervolgens in een array en stuur ze allemaal in een WHERE IN statement naar de database om vervolgens de resultaten in een tabel te plaatsen.

Google zou dit m.i. ook moeten kunnen, is het niet?
Gewijzigd op 26/04/2012 20:34:30 door N K
 
Q S

Q S

26/04/2012 20:40:32
Quote Anchor link
Oef dat durf ik je niet te zeggen.
 
Kris Peeters

Kris Peeters

26/04/2012 20:46:52
Quote Anchor link
Google Maps Api is is heel mooi uitgebreid.
Zeker als je zelf wiskundig aangelegd bent, kan je heel mooie dingen realiseren.


bv. om een perimeter te berekenen rond een punt ... basically kan je de stelling van Pytagoras in je WHERE clausule zetten.

Google Maps api kan ook de exacte afstand meten tussen twee punten, rekening houdend met de kromming van de aarde (dat bespaart je berekeningen).

Je kan echt van alles.

Er is wel een voorwaarde: je moet de map gebruiken; je kan/mag niet zomaar hun api gebruiken zonder de map er bij te betrekken

Als er iets specifiek is, laat maar weten.
Gewijzigd op 26/04/2012 20:48:09 door Kris Peeters
 
N K

N K

27/04/2012 10:18:54
Quote Anchor link
Nou, eigenlijk heb ik nog iets..
Onderstaand lijkt me een copy-paste verhaal maar na gisteravond tot in de vroege uurtjes te zijn bezig geweest: Ik krijg het niet voor elkaar.. Ik heb een html slider gemaakt die nu hetzelfde doet maar onderstaande lijkt me veel intuitiever.

https://developers.google.com/maps/articles/mvcfun?hl=nl-NL

Ik zou dit willen integreren in bovenstaande code van Kris. Het zou er dan zo uit komen te zien en een max. straal van 100 km. moeten hebben:
https://google-developers.appspot.com/maps/articles/mvcfun/step6?hl=nl-NL

Ik heb als output de distance waarde nodig in meters van de range en 1 postcode waar de marker op staat (zie bovenstaande code, deze is er al).

Ik kan echt niet inschatten hoeveel tijd dit kost voor iemand met javascript kennis maar ben wel bereid om een vergoeding ervoor te geven.
Ik hoor het graag.
 
Kris Peeters

Kris Peeters

27/04/2012 15:30:10
Quote Anchor link
Ja, ik wil dit wel doen.

Ik PM je verder.
 



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.