toodego: reload around me markers when map center changes (#30159)
This commit is contained in:
parent
f28ddab475
commit
78e95f67eb
|
@ -247,6 +247,17 @@ $(function() {
|
||||||
var $map_widget = $('div.combo-cell-map');
|
var $map_widget = $('div.combo-cell-map');
|
||||||
var map = $map_widget[0].leaflet_map;
|
var map = $map_widget[0].leaflet_map;
|
||||||
var search_timeout_id = null;
|
var search_timeout_id = null;
|
||||||
|
map.q_center_lat = null;
|
||||||
|
map.q_center_lng = null;
|
||||||
|
|
||||||
|
function get_distance(lat1, lng1, lat2, lng2) {
|
||||||
|
// simplest distance approximation https://www.mkompf.com/gps/distcalc.html
|
||||||
|
deglen = 111300;
|
||||||
|
x = lat1 - lat2;
|
||||||
|
lat = (lat1 + lat2) / 2 * 0.01745;
|
||||||
|
y = (lng1 - lng2) * Math.cos(lat1);
|
||||||
|
return deglen * Math.sqrt(x * x + y * y);
|
||||||
|
}
|
||||||
|
|
||||||
function reset_map_query_string() {
|
function reset_map_query_string() {
|
||||||
map.query_string = "";
|
map.query_string = "";
|
||||||
|
@ -254,9 +265,47 @@ $(function() {
|
||||||
var center = map.getCenter();
|
var center = map.getCenter();
|
||||||
var distance_q = '&distance=1000';
|
var distance_q = '&distance=1000';
|
||||||
map.query_string += distance_q + '&lat=' + center.lat + '&lng=' + center.lng;
|
map.query_string += distance_q + '&lat=' + center.lat + '&lng=' + center.lng;
|
||||||
|
map.q_center_lat = center.lat;
|
||||||
|
map.q_center_lng = center.lng;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function get_mapsearch_query() {
|
||||||
|
var query = $('#mapsearch input').val();
|
||||||
|
query = query.toLowerCase();
|
||||||
|
query = query.replace(/^rue\s/i, '');
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
function refresh_around_me_query(map) {
|
||||||
|
var query = get_mapsearch_query();
|
||||||
|
if (query.length < 2) {
|
||||||
|
map.query_string = '';
|
||||||
|
} else {
|
||||||
|
map.query_string = 'q=' + query;
|
||||||
|
}
|
||||||
|
var center = map.getCenter();
|
||||||
|
var collectivity_slugs = JSON.parse(document.getElementById('collectivity-slugs').textContent);
|
||||||
|
var distance_q = '&distance=1000';
|
||||||
|
|
||||||
|
for (var i=0; i<collectivity_slugs.length; i++) {
|
||||||
|
if (downcode(query).indexOf(collectivity_slugs[i]) != -1) {
|
||||||
|
distance_q = '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (distance_q) {
|
||||||
|
map.q_center_lat = center.lat;
|
||||||
|
map.q_center_lng = center.lng;
|
||||||
|
map.query_string += distance_q + '&lat=' + center.lat + '&lng=' + center.lng;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function refresh_markers(map) {
|
||||||
|
$('.search-page div.cell.map').addClass('loading');
|
||||||
|
map.load_geojson_layers();
|
||||||
|
}
|
||||||
|
|
||||||
$map_search_input.on('change keyup paste search', function(e) {
|
$map_search_input.on('change keyup paste search', function(e) {
|
||||||
var keycode = e.which || e.keyCode;
|
var keycode = e.which || e.keyCode;
|
||||||
if (keycode == 13) { // enter
|
if (keycode == 13) { // enter
|
||||||
|
@ -269,10 +318,8 @@ $(function() {
|
||||||
$sidebar.empty();
|
$sidebar.empty();
|
||||||
clearTimeout(search_timeout_id);
|
clearTimeout(search_timeout_id);
|
||||||
search_timeout_id = setTimeout(function() {
|
search_timeout_id = setTimeout(function() {
|
||||||
var query = $('#mapsearch input').val();
|
var query = get_mapsearch_query();
|
||||||
var new_geojson_layers = null;
|
var new_geojson_layers = null;
|
||||||
query = query.toLowerCase();
|
|
||||||
query = query.replace(/^rue\s/i, '');
|
|
||||||
if (query.length == 0) { // reset view
|
if (query.length == 0) { // reset view
|
||||||
reset_map_query_string();
|
reset_map_query_string();
|
||||||
var initial_zoom = parseInt($map_widget.data('init-zoom'));
|
var initial_zoom = parseInt($map_widget.data('init-zoom'));
|
||||||
|
@ -282,23 +329,11 @@ $(function() {
|
||||||
} else {
|
} else {
|
||||||
map.query_string = 'q=' + query;
|
map.query_string = 'q=' + query;
|
||||||
if (is_autour_de_moi) {
|
if (is_autour_de_moi) {
|
||||||
var center = map.getCenter();
|
refresh_around_me_query(map);
|
||||||
var collectivity_slugs = JSON.parse(document.getElementById('collectivity-slugs').textContent);
|
|
||||||
var distance_q = '&distance=1000';
|
|
||||||
for (var i=0; i<collectivity_slugs.length; i++) {
|
|
||||||
if (downcode(query).indexOf(collectivity_slugs[i]) != -1) {
|
|
||||||
distance_q = '';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (distance_q) {
|
|
||||||
map.query_string += distance_q + '&lat=' + center.lat + '&lng=' + center.lng;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
search_timeout_id = null;
|
search_timeout_id = null;
|
||||||
$('.search-page div.cell.map').addClass('loading');
|
refresh_markers(map);
|
||||||
map.load_geojson_layers();
|
|
||||||
}, 300);
|
}, 300);
|
||||||
});
|
});
|
||||||
$('#mapsearch').on('submit', function() {
|
$('#mapsearch').on('submit', function() {
|
||||||
|
@ -313,7 +348,21 @@ $(function() {
|
||||||
$('#sidebar').css('min-height', 0);
|
$('#sidebar').css('min-height', 0);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
var map_move_timeout_id = null;
|
||||||
$(map).on('zoomend moveend', function() {
|
$(map).on('zoomend moveend', function() {
|
||||||
|
if (is_autour_de_moi) {
|
||||||
|
/* if map is moved enough, refresh */
|
||||||
|
var center = map.getCenter();
|
||||||
|
if (map_move_timeout_id) clearTimeout(map_move_timeout_id);
|
||||||
|
map_move_timeout_id = setTimeout(function() {
|
||||||
|
map_move_timeout_id = null;
|
||||||
|
var distance = get_distance(map.q_center_lat, map.q_center_lng, center.lat, center.lng);
|
||||||
|
if (distance > 250) {
|
||||||
|
refresh_around_me_query(map);
|
||||||
|
refresh_markers(map);
|
||||||
|
}
|
||||||
|
}, 300);
|
||||||
|
}
|
||||||
$(document).trigger('gnm:new-results');
|
$(document).trigger('gnm:new-results');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue