Notes |
|
(0006495)
|
Garl
|
28-04-2012 03:47
|
|
а ещё ватермарки есть у D1g1t@lGl0bе и тоже жаба душит качать кучу лишней информации. |
|
|
|
Предвкушаю, как будет плющить закачивалку отображаемых тайлов. Оно будет по многу раз одно и то же качать :) ибо запускает закачку нескольких тайлов в паралельных потоках. |
|
|
|
>по многу раз одно и то же качать
Ну по идее это делается прежде всего не закачивалки отображаемого, а по выделенной области. Ну и конечно надо строить мегатайл так, чтобы дополнительные тайлы были справа и снизу, чтобы при дальнейшей скачке только что закаченные тайлы уже не перекачивались.
Кстати и росреестр тоже можно облагородить. Были жалобы что на каждом тайле кадастровые номера дублируются. Сейчас можно сделать чтобы кадастровый номер был не на каждом тайле. |
|
|
(0008907)
|
Tolik
|
14-09-2012 09:12
(edited on: 14-09-2012 09:14) |
|
Решил попробовать на слое кадастр, скачивать кусками 512х512 и резать на 4 тайла.
Получается, но есть вопросы:
1. САС вычисляет URL для каждого тайла, получается, что одни и те же тайлы скачиваются по 4 раза.
2. поэтому добавил в скрипт, чтобы URL генерился только на чётные X и Y, но тогда бегают ошибки Tile not exists, а по краям иногда остаётся непрорисованный ряд тайлов (по понятной причине).
3. Не совсем понятно описание параметров, что там обязательно, а что нет. Можно ли выкинуть в данном сл. CutCountX=2 CutCountY=2 CutSizeX=256 CutSizeY=256?
Как сделать всё красиво?
[PARAMS]
pnum=6
GUID={87428D7B-7DFA-4C98-9993-A8F3AA456608}
asLayer=1
ParentSubMenu=Росреестр
ParentSubMenu_en=Rosreestr
ParentSubMenu_uk=Росреестр
name=Кадастровые границы 4 (rosreestr.ru)
name_en=Cadastre map 4 (rosreestr.ru)
NameInCache=rosreestr_cadastr4
DefURLBase=http://maps.rosreestr.ru/ArcGIS/rest/services/CadastreNew/Cadastre/MapServer//export?dpi=96&transparent=true&format=png&bboxSR=102113&imageSR=102113&size=512,512&f=image
ContentType="image/png"
Ext=.png
projection=1
sradiusa=6378137
sradiusb=6378137
separator=0
UseDwn=1
Sleep=0
DefHotKey=0
CutCountX=2
CutCountY=2
CutSizeX=256
CutSizeY=256
CutTileX=0
CutTileY=0
var i:integer;
xy:TPoint;
topLeftM,bottomrightM,LL:TDoublePoint;
begin
if (GetX mod 2 = 0) and (GetY mod 2 = 0) then
begin
xy.x:=GetX*256;
xy.y:=GetY*256;
LL:=Converter.Pos2LonLat(XY,GetZ+7);
topLeftM:=Converter.LonLat2Metr(LL);
xy.x:=(GetX+2)*256;
xy.y:=(GetY+2)*256;
LL:=Converter.Pos2LonLat(XY,GetZ+7);
bottomrightM:=Converter.LonLat2Metr(LL);
ResultURL:=GetURLBase+'&bbox='+RoundEx(topLeftM.x,8)+','+RoundEx(topLeftM.y,8)+','+RoundEx(bottomrightM.x,8)+','+RoundEx(bottomrightM.y,8);
end
end.
|
|
|
(0008908)
|
Garl
|
14-09-2012 09:14
|
|
так 2,3,4 тайлы не качаются ибо они уже есть в кэше. |
|
|
(0008909)
|
Tolik
|
14-09-2012 09:16
(edited on: 14-09-2012 09:18) |
|
Качаются, наверно, сас не знает, что они есть.
А может, потому, что качает не сверху вниз и слева направо, а как попало (точнее, по спирали) (при просмотре)
|
|
|
(0008910)
|
Garl
|
14-09-2012 09:18
|
|
у меня пропускает.
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47583.jpg ...
Скачивание...
(Ok!)
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47584.jpg ...
Данный файл уже имеется в кэше
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47585.jpg ...
Данный файл уже имеется в кэше
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47586.jpg ...
Данный файл уже имеется в кэше
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47587.jpg ...
Данный файл уже имеется в кэше
Обработка файла: T:\GoogleMV\cache\lgbm\z18\78\x80174\46\y47588.jpg ...
Скачивание... |
|
|
(0008911)
|
Tolik
|
14-09-2012 09:19
|
|
А я про брожение по карте. |
|
|
(0008912)
|
Garl
|
14-09-2012 09:20
|
|
MaxConnectToServerCount=1 спасёт всех |
|
|
(0008913)
|
Tolik
|
14-09-2012 09:24
|
|
Да, кстати, для закачки это надо (наверно).
Но для просмотра не помогает.
Если выкинуть if (GetX mod 2 = 0) and (GetY mod 2 = 0)
то вообще мусор получается. |
|
|
(0008914)
|
Tolik
|
14-09-2012 09:30
|
|
> по краям иногда остаётся непрорисованный ряд тайлов
Это решается настройкой программы: Download tile off-screen=1
Но это некрасиво. |
|
|
(0008915)
|
Garl
|
14-09-2012 09:30
|
|
ну да он берёт левый пустой тайл и перетирает несколько правых.
по логике всё правильно, а по юзабилити не айс.
надо бы как то проверять на tileexist |
|
|
|
Tolik, надо строить мегатайл так, чтобы дополнительные тайлы были справа и снизу, чтобы при дальнейшей скачке только что закаченные тайлы уже не перекачивались.
Это прежде всего для качалки по выделенной области в один поток. Чтобы корректно работало для многопоточной качалки на экран - надо допиливать проверку перезаписи существующих тайлов для каждого вырезанного кусочка. Ну или очередь на скачку строить с учётом формы таких "мегатайлов". Что не то чтобы даже лениво, а вообще неправильно и некрасиво. Потому что через CutToSkip можно брать вообще из "мегатайла" только отдельные нужные куски, даже не являющиеся связной областью.
Это некий такой грязный хак. Работающий не во всех случаях жизни. Иногда гадящий сбоку на существующие тайлы. Но просто реализуемый и иногда крайне полезный ввиду неидеальности работы сервисов. Но исключительно под присмотром. В официальных zmp публиковать его не надо.
>САС вычисляет URL для каждого тайла
Да. Из всех тайлов, подлежащих скачке, будет построена очередь из урлов, и вся она будет пробовать скачаться, так как качать или нет отсутствующие - определяется по одному каждому тайлу.
>получается, что одни и те же тайлы скачиваются по 4 раза
Нет. Скачиваются не тайлы, а их "полуфабрикаты", этакие "мегатайлы". Тайлы (порезанные) только записываются в кэш. Один тайл может быть записан в кэш 4 раза, это верно.
>Можно ли выкинуть в данном сл. CutCountX=2 CutCountY=2 CutSizeX=256 CutSizeY=256
Нельзя. То что там в запросе 512 - резалке тайлов по барабану. Оно не обязано быть кратным размеру тайла. |
|
|
(0008917)
|
Tolik
|
14-09-2012 09:33
|
|
Качалка, кстати, работает хорошо, тайлы появляются квадратиками по 4. Но верхний ряд и левый столбец не выкачиваются, если у них нечётный номер. |
|
|
|
>надо бы как то проверять на tileexist
При сохранении каждого уже нарезанного кусочка проверять, что если тайл уже такой есть - ни при каких условиях его не перезаписывать что ли? Но тогда перекачка кэша с этими настройками не будет работать никогда. |
|
|
(0008919)
|
Garl
|
14-09-2012 09:40
(edited on: 14-09-2012 09:41) |
|
так есть режим только "интернет"(переписываем) и "интернет+кэш"(не переписываем)
и ctrl-ins == переписываем все
з.ы.
с другой стороны этой плюшкой(МегаТайлами) пользуется пока всего 3 человека :)
|
|
|
(0008920)
|
Tolik
|
14-09-2012 09:46
(edited on: 14-09-2012 09:52) |
|
Опять же, если выкинуть if (GetX mod 2 = 0) and (GetY mod 2 = 0) , САС будет на каждый тайл скачивать большой квадрат, что не имеет смысла. Так что надо контролировать не запись в кэш скачанных кусочков, а само скачивание. То есть заставить САС генерить запросы не на каждый тайл, а только 1 раз на весь объединённый квадрат. И не таким убогим способом (как мой if), а на уровне кода.
P.S. Мегатайлами будут пользоваться миллионы :) , если сделать нормальный кадастр, т.к. уже сейчас он выглядит гораздо лучше, чем обычно. Только "Tile not exists" бегают.
Кстати, исправьте, пожалуйста, на "Tile does not exist".
|
|
|
(0008921)
|
Tolik
|
14-09-2012 10:09
|
|
Ещё один вопрос:
4. Нарезка происходит с потерей качества? |
|
|
|
Естественно с потерей. Все обрезки выполняются с полной перепаковкой. |
|
|
(0008923)
|
Tolik
|
14-09-2012 10:28
|
|
Ну если использовать только для скачки (без перезаписи!), то работает хорошо (и if не нужен, т.к. на имеющийся в кэше тайл запрос не генерится).
Мегатайлы 3х3 даже лучше, чем 2х2.
Но для бродилки в таком виде не годится. |
|
|
|
>То есть заставить САС генерить запросы не на каждый тайл, а только 1 раз на весь объединённый квадрат
Ума не приложу как это идеально обеспечить. Говорю ж, там можно из мегатайла писать тайлы в кэш совершенно произольные, хоть буквой Г. Даже если просто большие квадратики писать целиком (без CutToSkip) - всё равно будет криво, например, на стыке соседних областей, закачиваемых по отдельности.
Хотя конечно для простых случаев алгоритмически это не сложно. Достаточно генерить к закачке только урлы по координатам, сравнимым по модулю CutCountX и CutCountY с угловой координатой (MinX,MinY для простоты), тогда если без извращений - оно и получится. Но тут я пас, я итератор в глаза не видел.
Или в скрипте как-то понимать и разруливать, это для бродилки генерится урл, или для скачки по области, но исключительно на уровне самодеятельности и вообще не факт что это корректная процедура, и непонятно что показать по "ПКМ - скопировать адрес тайла", да и одиночные тайлы среди двушек и трёшек будут выглядеть совсем уж неуместно ((. |
|