"Листание" карт с пощью стрелок
"Листание" карт с пощью стрелок
Думаю, что у всех возникает иногда потребность посмотреть, как выглядела та или иная местность в прошлом. Но для отдаленных от центра районов Москвы тут возникает некоторая проблема: большинство карт не охватывает их. Приходится просматривать множество карт до нахождения тех, в которых есть искомое место. Хорошо было бы сделать так, чтобы "пролистывая" карты с помощью стрелок (около Выбора карты), неинформативные в выбранном районе автоматически пропускались.
-
Лемур
Re: "Листание" карт с пощью стрелок
Совершенно верно отмечено, давно собирался об этом написать. Нужно пропускать карты, на которых нет выбранной точки, равно как и те, масштаб которых явно не позволяет ничего увидеть в этом месте. Более того, как мне кажется, было бы неплохо выдавать что-нибудь типа "рекомендуемые карты" для тех точек, которые находятся на окраинах города или за его пределами.
Re: "Листание" карт с пощью стрелок
Совершенно с Вами согласен, спасибо за пожелание. Сейчас это сделано простейшим образом: например, если вначале была выбрана карта Московской области, то при "пролистывании" карт будут появляться только карты области. Если была вначале выбрана карта города, то, например, карты Московской области или Кремля появляться не будут. Причина довольно банальна: в описании карты нет точного указания на охватываемую ей территорию.Bellevue писал(а):...Хорошо было бы сделать так, чтобы "пролистывая" карты с помощью стрелок (около Выбора карты), неинформативные в выбранном районе автоматически пропускались.
Нужно будет сделать небольшую программу, которая будет анализировать имеющиеся фрагменты карты в базе данных, чтобы определить область покрытия карты. Тогда при пролистывании карт можно будет пропускать карты, не покрывающие выбранную территорию. Однако 100% точности здесь все равно не достигнешь: у некоторых карт широкие поля и рамки, некоторые карты, например, Хотевский план, имеют сложную форму, некоторые имеют врезки и легенды, а программа не может выявлять такие места. Но приближенный анализ покрытия можно сделать.
Re: "Листание" карт с пощью стрелок
Понятно, что 100% точности не будет. Это не страшно.
Re: "Листание" карт с пощью стрелок
Ну уж точно нужно обходить карты с несуразным по отношению к первоначально выбранной карте масштабом, явно превосходящим максимальное разрешение загружаемой карты. Или просто уменьшать масштаб.
Re: "Листание" карт с пощью стрелок
Алгоритм "листания" карт изменен:
Будем признательны, если сообщите о замеченных ошибках и нелогичностях.
- При листании загружаются только те карты, которые захватывают установленную центральную точку.
- Пропускаются карты, максимальный масштаб которых ниже выбранного.
Будем признательны, если сообщите о замеченных ошибках и нелогичностях.
Re: "Листание" карт с пощью стрелок
Спасибо!
В очередной раз восхищаюсь оперативностью работы команды retromap!
В очередной раз восхищаюсь оперативностью работы команды retromap!
Re: "Листание" карт с пощью стрелок
Отмечу, что листание с определением тех карт, которые захватывают нужную точку, оказалось не самой простой задачей. Только третий из испытанных алгоритмов оказался достаточно простым и работоспособным.Bellevue писал(а):Спасибо!
В очередной раз восхищаюсь оперативностью работы команды retromap!
Re: "Листание" карт с пощью стрелок
А в чем оказалась основная сложность, если не секрет?retromap писал(а): листание с определением тех карт, которые захватывают нужную точку, оказалось не самой простой задачей
Re: "Листание" карт с пощью стрелок
Вначале было естественное желание сразу при вводе карты на сайт оценить область ее покрытия, записать в базу данных и при пролистывании читать эти параметры у последующих и предыдущих карт. В итоге пролистывание должно выполняться быстро и без лишних действий. На практике оказалось, что описать область покрытия карты не так то просто: некоторые карты имеют сложную форму. Были опробованы два варианта определения покрытия, но оба приводили к большому числу ошибок.Bellevue писал(а): А в чем оказалась основная сложность, если не секрет?
В итоге был выбран алгоритм оценки покрытия "on-line" - прямо при пролистывании делаются попытки считывания центральных тайлов последующих и предыдущих карт, и если сервер находит находит такие тайлы, то такие карты загружаются при пролистывании. В итоге пролистывание немного замедляется (особенно когда много очередных карт не подходят по покрытию), но зато абсолютно точно очередная карта содержит тайл для выбранной центральной точки. Программа пролистывания небольшая, но не самая очевидная. Для любителей погружаться в детали программирования представлю примерно ее половину - поиск следующей карты:
Код: Выделить всё
function load_next_map(side,map_code){
show_loading();
var current_map=false;
for (i=0; i<ordered_map_list.length; i++){
if (current_map){
var next = ordered_map_list[i].mcode;
if (ordered_map_list[i].mclass < 5){
load_map(side,next,1);
return;
}
else {
var tile = new Image();
tile.src = central_tile_url(next);
tile.side = side;
tile.next = next;
tile.onerror = function(){load_next_map(this.side,this.next)};
tile.onload = function(){load_map(this.side,this.next,1);};
return;
}
}
if (ordered_map_list[i].mcode==map_code)
current_map=true;
}
load_map(side,"0020090",1)
}Re: "Листание" карт с пощью стрелок
Спасибо, очень интересно посмотреть код.
Re: "Листание" карт с пощью стрелок
Спасисбо, никак не думала, что все так сложно организовано для простого перебора карт.