nyc-bookstores/node_modules/mapbox.js/extensions/mapbox.jquery.geocoder.js
2013-05-27 13:45:59 -07:00

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);