Skip to content

Instantly share code, notes, and snippets.

@radiosilence
Created September 11, 2012 12:18
Show Gist options
  • Save radiosilence/3698002 to your computer and use it in GitHub Desktop.
Save radiosilence/3698002 to your computer and use it in GitHub Desktop.
Get Lat Long
var search_for_address = function(element, o, e_lat, e_lon) {
var address = $('#id_address_1').val() + ', '
+ $('#id_city option:selected').text() + ', '
+ $('#id_postcode').val();
var gc = new google.maps.Geocoder();
var request = {
address: address
}
gc.geocode(request, function(result, status) {
if (status != 'OK') {
alert('Failed to find a match.');
return false;
}
result = result[0];
alert('Found match: Address "' + result.formatted_address
+ '", setting marker to location.');
o.marker.setPosition(result.geometry.location);
var lat = o.marker.getPosition().lat();
var lng = o.marker.getPosition().lng();
e_lat.val(lat);
e_lon.val(lng);
recenter_map(o.map, lat, lng);
});
}
var init_getlatlong = function(o, e_lat, e_lon) {
var map_row = $('<div/>', {
class: 'form-row',
style: 'height: 300px'
});
var map_container = map_row[0]
e_lon.closest('div.form-row').after(map_row);
var old_lat = e_lat.val() || false;
var old_lon = e_lon.val() || false;
var old_point = new google.maps.LatLng(0,0);
var map_options = {
scrollwheel: false,
center: old_point,
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 1,
};
o.map = new google.maps.Map(map_container, map_options);
recenter_map(o.map, old_lat, old_lon);
o.marker = new google.maps.Marker({
position: old_point,
map: o.map,
draggable: true,
});
google.maps.event.addListener(o.marker, 'dragend', function() {
e_lat.val(o.marker.getPosition().lat());
e_lon.val(o.marker.getPosition().lng());
});
};
var recenter_map = function(map, lat, lon) {
if (lat && lon) {
map.setZoom(14);
map.setCenter(new google.maps.LatLng(lat, lon))
} else {
map.setZoom(1);
map.setCenter(new google.maps.LatLng(0, 0));
}
}
$(function() {
var o = {};
var e_lat = $('input[name=latitude]');
var e_lon = e_lat.closest('div.form-row').next().find('input');
if (e_lat.length > 0) {
init_getlatlong(o, e_lat, e_lon);
}
$('#id_city').on('change', function(event) {
var lat = e_lat.val() || false;
var lon = e_lon.val() || false;
if (!lat || !lon) {
var gc = new google.maps.Geocoder();
gc.geocode({
address: $('#id_city option:selected').text(),
}, function(result, status) {
if (status != 'OK') {
return false;
}
result = result[0];
o.marker.setPosition(result.geometry.location);
recenter_map(
o.map,
o.marker.getPosition().lat(),
o.marker.getPosition().lng()
);
});
}
});
if ($('#id_address_1').length > 0) {
var search_button = $('<a/>', {
text: 'Search for accommodation address...',
href: 'javascript:void(0)'
});
var button_row = $('<div/>', {
class: 'form-row',
});
button_row.prepend(search_button);
search_button.on('click', function(event) {
event.preventDefault();
search_for_address($(this), o, e_lat, e_lon);
});
e_lon.closest('div.form-row').after(button_row);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment