63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
!function($) {
|
|
|
|
$.fn.geocode = geocode;
|
|
|
|
function geocode(e) {
|
|
|
|
e.preventDefault();
|
|
var $this = $(this),
|
|
map = $('#' + $this.parents('[data-map]').data('map')).data('map'),
|
|
query = encodeURIComponent($this.find('input[type=text]').val());
|
|
|
|
$this.addClass('loading');
|
|
|
|
reqwest({
|
|
url: 'http://open.mapquestapi.com/nominatim/v1/search?format=json&json_callback=callback&&limit=1&q=' + query,
|
|
type: 'jsonp',
|
|
jsonpCallback: 'callback',
|
|
jsonpCallbackName: 'callback',
|
|
success: success
|
|
});
|
|
|
|
function success(resp) {
|
|
resp = resp[0];
|
|
$this.removeClass('loading');
|
|
|
|
if (!resp) {
|
|
$this.find('#geocode-error').text('This address cannot be found.').fadeIn('fast');
|
|
console.log(resp);
|
|
return;
|
|
}
|
|
|
|
$this.find('#geocode-error').hide();
|
|
|
|
map.setExtent([
|
|
{ lat: resp.boundingbox[1], lon: resp.boundingbox[2] },
|
|
{ lat: resp.boundingbox[0], lon: resp.boundingbox[3] }
|
|
]);
|
|
|
|
if (!map.getLayer('geocode')) {
|
|
var layer = mapbox.markers.layer().named('geocode');
|
|
map.addLayer(layer);
|
|
layer.tilejson = function() { return {
|
|
attribution: 'Search by <a href="http://developer.mapquest.com/web/products/open">MapQuest Open</a>'
|
|
}};
|
|
}
|
|
|
|
map.getLayer('geocode').features([]).add_feature({
|
|
'type': 'Feature',
|
|
'geometry': { 'type': 'Point', 'coordinates': [resp.lon, resp.lat] },
|
|
'properties': {}
|
|
});
|
|
|
|
map.ui.refresh(); // Update attribution
|
|
}
|
|
}
|
|
|
|
|
|
$(function() {
|
|
$('[data-control="geocode"] form').submit(geocode);
|
|
});
|
|
|
|
}(window.jQuery);
|