View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001740 | Доработка карты (ZMP) | Доработка файла карты | public | 25-12-2012 12:32 | 03-01-2013 09:52 |
| Reporter | TokarevVV | Assigned To | Tolik | ||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | resolved | Resolution | fixed | ||
| Summary | 0001740: Ошибка в Zoomify.zmp | ||||
| Description | Программа для скачивания Zoomify содержит ошибки. Так в функции получения количества тайлов на данном уровне TilesAtZoom округление Val в большую сторону выполнено как 1 + Trunc(Val), что при целых значениях Val даёт не правильный результат. Для такого округления нужно использовать функцию Ceil. Пример (гипотетический): картинка размером 76800 на 51200 имеет на максимальном уровне 60000 тайлов и последний тайл (299, 199) имет индекс 80045, что даёт 312 группу тайлов. Существующий скрипт даёт соответственно: 60501 тайлов, индекс 80659 и группу 315, что не верно. Изменённый скрипт прилагается. PS Кроме того, желательно ввести в Паскаль-сктипт функции Ceil, Floor, Max, Min. | ||||
| Tags | zmp, паскальскрипт | ||||
| Attached Files | GetUrlScript.txt (2,276 bytes)
{-----------------------------------------------
�� ����� ImageProperties.xml
------------------------------------------------}
const
m_nWidth = 76800;
m_nHeight = 51200;
var
i, zoom, nMaxZoom, nTileGroup :Longint;
{-----------------------------------------------
��������� floor �������
------------------------------------------------}
function Floor(v :Extended) :Extended;
begin
Result := Trunc(v);
if v < Result then Result := Result - 1.0;
end;
{-----------------------------------------------
��������� ceil �������
------------------------------------------------}
function Ceil(v :Extended) :Extended;
begin
Result := Trunc(v);
if v > Result then Result := Result + 1.0;
end;
{-----------------------------------------------
�������� ���������� ���������� Zoom'�
------------------------------------------------}
procedure GetMaxZoom();
var k, i :Longint;
begin
k := m_nWidth;
if m_nHeight > m_nWidth then k := m_nHeight;
i := 0;
while k > 256 do
begin
k := Trunc(k / 2);
Inc(i);
end;
nMaxZoom := i;
end;
{-----------------------------------------------
�������� ��������� ������ �� ������ Zoom'�
------------------------------------------------}
function GetTilesAtZoom(zoom: Longint) :Longint;
var k :Extended;
begin
k := 256.0 * IntPower(2, nMaxZoom - zoom);
Result := Trunc(Ceil(m_nWidth / k) * Ceil(m_nHeight / k));
end;
{-----------------------------------------------
��������� ������ ���������� ������� Zoom'�
------------------------------------------------}
function GetTilesCount(nZoom: Longint) :Longint;
var i: Longint;
begin
Result := 0;
for i := 0 to nZoom - 1 do Result := Result + GetTilesAtZoom(i);
end;
{-----------------------------------------------
�������� URL �����
------------------------------------------------}
begin
zoom := GetZ - 1;
GetMaxZoom();
nTileGroup := (GetX + GetY * Trunc(Ceil(m_nWidth / (256.0 * IntPower(2, nMaxZoom - zoom)))) + GetTilesCount(zoom)) div 256;
ResultURL := GetURLBase + IntToStr(nTileGroup) + '/' + IntToStr(zoom) + '-' + IntToStr(GetX) + '-' + IntToStr(GetY) + '.jpg';
{ RequestHead := 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' + #13#10; }
end.
| ||||
|
|
А существуют такие большие картинки? На реальных баг проявляется? Можете показать? |
|
|
Впрочем, добавил исправленный скрипт в репозиторий. Спасибо. А по поводу новых функций откройте хотелку в разделе SAS. |
|
|
Дополнения от TokarevVV: ------------------------ 1) Алгоритмы считывания Zoomify: А1 — округление Val в большую сторону выполнено как Ceil(Val) А2 — округление Val в большую сторону выполнено как 1 + Trunc(Val) 2) Для того, чтобы выявилось отличие алгоритма А1 от А2, линейные размеры картинки должны быть кратны размеру тайла. С помощью программы, реализующей оба алгоритма, было проверено формирование номера группы последнего тайла для всех картинок, линейные размеры которых (в тайлах) Width и Height принадлежат диапазону от 1 до 100. Параметры картинок, у которых наблюдалось отличие номера группы, были сведены в таблицу (файл Pictures.rar). Попытка найти в Интернете Zoomify-картинки необходимых размеров не увенчались успехом. Но, как говориться, «если гора не идёт к Магомету, то Магомет идёт к горе» — пришлось создать картинку размером 3584 на 3328 пиксель (первая картинка в таблице), всунуть в неё первое попавшееся фото (один из видов г. Сумы), затем Zoomify’цировать её и выложить в Интернет (http://williamtokarev.narod2.ru/TemplateWebPage.htm). 3) ZMP для считывания выложенной Zoomify-картинки: по алгоритму А1 — файл ZoomifyA1.zmp.rar по алгоритму А2 — файл ZoomifyA2.zmp.rar 4) По приведённым скриншотам (ScreenA1A2.jpg) видно, что: скачивание последнего тайла (13, 12), а так же тайла (12, 12) на максимальном увеличении при использовании алгоритма А1 прошло успешно (0-я группа определена правильно). При использовании алгоритма А2 тайл не читается, так как программа пытается скачать его из 1-й группы тайлов, папки для которой не существует. 5) В файле params.txt нужно вставить: TILERLEFT=0 TILERRIGHT=256 TILERTOP=0 TILERBOTTOM=256 для устранения растягивания нестандартных тайлов. PS. На счёт больших картинок — вот монстры: http://www.genomedu.net/escaners/kk/xaaa (56832 на 42112) http://ana1.hal.kagoshima-u.ac.jp/slide/tiles/18/1 (104462 на 62812) http://ana1.hal.kagoshima-u.ac.jp/slide/tiles/00/ips01 (125014 на 81314) |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 25-12-2012 12:32 | TokarevVV | New Issue | |
| 25-12-2012 12:32 | TokarevVV | File Added: GetUrlScript.txt | |
| 25-12-2012 12:39 | TokarevVV | Tag Attached: паскальскрипт | |
| 25-12-2012 12:40 | TokarevVV | Tag Attached: zmp | |
| 25-12-2012 13:10 | Tolik | Note Added: 0010222 | |
| 25-12-2012 13:10 | Tolik | Assigned To | => Tolik |
| 25-12-2012 13:10 | Tolik | Status | new => feedback |
| 25-12-2012 13:26 | Tolik | Note Added: 0010223 | |
| 25-12-2012 13:26 | Tolik | Status | feedback => resolved |
| 25-12-2012 13:26 | Tolik | Resolution | open => fixed |
| 25-12-2012 13:26 | Tolik | Note Edited: 0010223 | |
| 03-01-2013 08:45 | Tolik | Note Added: 0010310 | |
| 03-01-2013 09:52 | zed | Relationship added | related to 0001745 |