Ответ на ваше второе уточнение.
Вы используете hashchange. Как и Turbolinks, и другие подобные библиотеки, он при переходе от страницы к странице НЕ вызывает ready-событие на document. Поэтому код
$(document).ready(function(){
// function here
});
срабатывает единожды при загрузке. Как только вы переходите на другую страницу, затем идете назад, код в этом блоке не выполняется. Соответственно, карты не инициализируются и ничего не происходит.
Чтобы JS выполнялся при каждой смене страницы нужно использовать
$(window).hashchange(function () {
// function here
});
или что-то вроде этого.