Hello everyone,

We have a system that allows you to add addresses by only using a postal
code and a house number in the Netherlands.

I got it working but it's not pretty and far from accurate because I'm using
3 geocode requests of which the first is impossible to do directly with the
number.

1: geolocate postal + country such as "3267LP, The Netherlands"
2: reverse geolocate the coords from step 1 for the extra information such
as street etc.
3: geolocate the extended address.

But if I use the postal code in the above example, I end up on the
'Gebrokendijk', I should be on 'Oude Nieuwlandsedijk'. This probably happens
because the first geolocation is done without a house number and the
'center' or 'start' of this postal zone is closer to that street instead of
the correct one? (no expert here). Is there any way to create a working
geolocation with all the information i have (postal+housenumber+country) ?

Can you please tell me if there's another way to achieve this? I can't
change the input, i only got postal + house number.

Here is my code, I've removed any code not related to the geolocation and
added comments. I've also saved this snippet to jsbin:
http://jsbin.com/ugota3/edit for some highlighting

try {
// test input:
var country = 'The Netherlands';
var postal = '3267LP';
var number = '7';

// 1: geocode postal and country:
var result = gc.geocode({address: postal+', '+country}, function(results,
status) {
    if(status == google.maps.GeocoderStatus.OK) {
        // 2: reverse geocode the coordinates:
        gc.geocode({latLng: results[0].geometry.location}, function(results,
status) {
            if(results[0]) {
                // get the correctly formatted address:
                var address = results[0].formatted_address;
                if(results[0].types[0] == 'street_address') {
                    address = results[0].address_components[1].long_name+'
'+number+', '+postal+' '
                       +results[0].address_components[2].long_name+'
'+results[0].address_components[5].long_name;
                } else if(results[0].types[0] == 'route') {
                    address = results[0].address_components[0].long_name+'
'+number+', '+postal+' '
                       +results[0].address_components[1].long_name+'
'+results[0].address_components[4].long_name;
                }
                // 3: geocode the exact address:
                gc.geocode({address: address}, function(results, status) {
                    if(results[0]) {
                        // create marker:
                        new google.maps.Marker({
                            map: map.map,
                            position: results[0].geometry.location,
                            icon: tinyIcon,
                            title: address
                        });
                        // show address
                        addressElement.update(address);
                    } else {
                        //alert("Geocode 3 was not successful for the
following reason: " + status);
                        return false;
                    }
                });
            } else {
                //alert("Geocode 2 was not successful for the following
reason: " + status);
                return false;
            }
        });
        map.setCenter(results[0].geometry.location);
        marker.setPosition(results[0].geometry.location);
    } else {
        //alert("Geocode was not successful for the following reason: " +
status);
        return false;
    }
});
} catch(e) {
    console.error(e);
}
// end

I really hope you can help me make this script more accurate.
Have i missed something? Am I thinking wrong? Or are these the limits of the
geocoder?

Greetings,
 Johan Arensman

-- 
You received this message because you are subscribed to the Google Groups 
"Google Maps JavaScript API v3" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-maps-js-api-v3?hl=en.

Reply via email to