Batch geocoding met Google Maps

Pagina: 1
Acties:
  • 191 views sinds 30-01-2008
  • Reageer

  • Wortelsoep
  • Registratie: Juni 2001
  • Niet online
Ik heb een database met adressen. Nu wil ik bij elk adres de coördinaten erbij zoeken. Dat kan heel leuk met de Google Maps API en ik heb dus al het een en ander geprutst en heb het ook half werkend, maar nu ben ik nogal vastgelopen :/

Wat heb ik:
HTML:
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>hoihoi</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=mijnkey"
      type="text/javascript"></script>
    <script type="text/javascript">

    //<![CDATA[

   var geocoder;
   var map;
   var x;
   var y;


   // On page load, call this function


   function zoekop(address)
   {

  geocoder = new GClientGeocoder();

      // Retrieve location information, pass it to addToMap()
      geocoder.getLocations(address, addToMap);
   }

   // This function adds the point to the map

   function addToMap(response)
   {
      // Retrieve the object
      place = response.Placemark[0];

        x = place.Point.coordinates[1];
        y = place.Point.coordinates[0];

      document.write(x + "<br>");
      document.write(y);
      
   }

    //]]>
    </script>
  </head>
  <body onunload="GUnload()">
  
  <script type="text/javascript">
  
  zoekop('Leidseplein, Amsterdam, the Netherlands');
  zoekop('Coolsingel, Rotterdam, the Netherlands');
  
  </script>
  
  </body>
</html>


Het grootste deel van de code heb ik gepikt van hier dus misschien zitten er niet helemaal logische dingen in. Ik ben geen JavaScript-held dus vandaar ;)

Maargoed: ik heb dus een functie zoekop gemaakt die de coordinaten bij een adres moet zoeken. Op zich werkt dit. Het probleem is alleen: het werkt alleen voor het eerste adres. In dit bestand zoekt hij dus de coördinaten van het Leidseplein op (werkt goed, gecontroleerd) maar de Coolsingel doet hij domweg niet. Het lijkt er dus op dat er iets afgesloten moet worden o.i.d. na elke request, maar wat? Wie kan mij helpen?

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Ik heb een soortgelijk probleem gehad. Kwam er uiteindelijk achter dat het niet mogelijk is om binnen een korte tijd (lees milliseconden) meerdere locaties op te vragen.

Het beste kun je veelgebruikte adressen opslaan in de database als lengte- en breedtegraad en deze waarden vervolgens gebruiken i.c.m. de GLatLng class.
Voorbeeld GLatLng class.

Om de lengte- en breedtegraad voor ieder adres te krijgen kun je een Geocoding HTTP-request gebruiken waarbij je de lengte/breedtegraad en accuratie voor het adres terugkrijgt.

Developer Accused Of Unreadable Code Refuses To Comment


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Je kunt alleen document.write() gebruiken terwijl een document geladen wordt. De Google API is asynchroon, waardoor addToMap() de tweede keer pas wordt aangeroepen nadat het document geladen is. De look-up werkt dus wel, maar het schrijven naar het document niet. Gebruik dan ook liever de HTML DOM-tree dan document.write() om je pagina dynamisch op te bouwen.

Ik wil je verzoeken om in het vervolg zelf te debuggen; als je een alert in addToMap() had gezet had je makkelijk kunnen zien dat die wel degelijk twee aangeroepen wordt met de juiste coördinaten. Een topic maken met als probleembeschrijving hij doet het domweg niet is onacceptabel; zet er dan bij wat 'ie precies wel en niet doet, en wat je gedaan hebt om dat te verifiëren.

Verder kun je sowieso beter de officïele API documentatie gebruiken:
http://www.google.com/api...ation/#Geocoding_Examples
Waarschijnlijk heb je aan de informatie die getLatLng() retourneert al genoeg.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:58
Icelus schreef op dinsdag 16 januari 2007 @ 16:25:
Ik heb een soortgelijk probleem gehad. Kwam er uiteindelijk achter dat het niet mogelijk is om binnen een korte tijd (lees milliseconden) meerdere locaties op te vragen.
Lijkt me sterk. Dit werkt prima:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script type="text/javascript">
//<![CDATA[ 
    function zoekop(address, display) 
    {
        var geocoder = new GClientGeocoder(); 
        geocoder.getLocations(address, function(response) {
            var place = response.Placemark[0]; 
            var x = place.Point.coordinates[1]; 
            var y = place.Point.coordinates[0]; 
            display.appendChild(document.createTextNode(" ("+x+","+y+") "));
        } );
    }
//]]> 
</script> 

[..]

<div id="display"></div>
<script type="text/javascript"> 
    var display = document.getElementById('display');
    zoekop('Leidseplein, Amsterdam, the Netherlands', display); 
    zoekop('Coolsingel, Rotterdam, the Netherlands', display); 
</script>

  • Wortelsoep
  • Registratie: Juni 2001
  • Niet online
Soultaker, je moest eens weten hoe dankbaar ik je ben. Mijn kennis van JS is te beperkt om te weten dat document.write() niet werkt in combinatie met de Google API. Sorry voor het noob-uithangen.