SASGIS

Веб-картография и навигация

Вопросы по исходному коду

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Re: Вопросы по исходному коду

Сообщение vdemidov » 02 мар 2018, 16:51

garl писал(а):TDownloadRequest.Create(
VLink,
VHeader,
AInetConfig.GetStatic
);

имеем VHeader - AnsiString
есть необходимость передавать куки больше 255 символов.
на сколько трудно и где рыть? или есть другие варианты в запрос передать отдельно куки большого размера?

Передвай. Там до 2 гигабайт можно. Это обычная строка однобайтовых символов с терминальным нулем.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Вопросы по исходному коду

Сообщение Dopect » 01 июн 2018, 00:05

Как уже не раз говорили проект огромный, нету комментов(минимум), много интерфейсов... и прочее, сложно понять общую картину проекта. Искал класс или метод который конвертирует [lat,lng] в [z,x,y], во время скачки и/или после для чтения из кеша. Сам кроме LatLng2RelativeInternal ничего не нашел, да и тот что "внутреннее выдает" в пределах [0-1]. Сперва хотел исользовать код от гугла, потом нашел и другие, но все дают неправильные координаты тайла для заданного [lat,lng]. Точнее такой результат:
cache\map\z19\173\x177383\97\y100095.png // правильный
cache\map\z19\173\x177206\97\y100134.png

Вопрос: Какой класс или метод который конвертирует [lat,lng] в [z,x,y], во время скачки и/или после для чтения из кеша?
В частности интересует EPSG=3785.

скрытый текст: показать
Что? Зачем? Для чего? Хочу написать свой mapControl на WPF который будет использовать существующий кеш. Застрял на этом месте. Создал тему с описанием этой же проблемы в этой ветке форума, на след. день "кто-то" удалил. Сейчас вижу "кто-то" обратно вернул, спасибо.


Upd. Хорошо, вопрос с приведением кода.
Входные [lon = 63.355570, lat = 39.054670] подаю на следующую функцию:
Код: Выделить всё
function TProjectionTypeMercatorOnSphere.LonLat2RelativeInternal(
  const APoint: TDoublePoint
): TDoublePoint;
var
  z, c: Extended; { Extended is a Pascal type that will hold an extended floating point value.}
begin
  Result.x := 0.5 + APoint.x / 360;
  z := Sin(APoint.y * Pi / 180);
  c := 1 / (2 * Pi);
  Result.y := 0.5 - 0.5 * Ln((1 + z) / (1 - z)) * c;
end;


результат подаю на эту:
Код: Выделить всё
function TProjectionBasic256x256.InternalRelative2TilePosFloat(
  const APoint: TDoublePoint
): TDoublePoint;
begin
  Result := DoublePoint(APoint.X * FTilesFloat, APoint.Y * FTilesFloat);
end;

на выходе одно и тоже по X RelInt2TilePos Coords X:177206,118172444
по Y: 117636,115362263 съезжает еще дальше.
Переформулирую вопрос:
Где или как программа сглаживает эту неточность/погрешность расчета координат тайла?
Dopect
Новичок
 
Сообщения: 5
Зарегистрирован: 01 фев 2018, 19:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 01 июн 2018, 13:11

Читаем внимательно название класса TProjectionTypeMercatorOnSphere - Меркатор на СФЕРЕ
А если вас интересует EPSG=3785, то это Меркатор на Эллипсоиде - TProjectionTypeMercatorOnEllipsoid совсем другой класс, совсем другой алгоритм пересчета
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Вопросы по исходному коду

Сообщение Dopect » 01 июн 2018, 15:41

Верно, код EPSG неправильный. В коде что копипастил есть такой коммент:
Код: Выделить всё
//Converts XY point from (Spherical) Web Mercator EPSG:3785 (unofficially EPSG:900913) to lat/lon in WGS84 Datum
        public static Point MetersToLatLon(Point m)
        {
            var ll = new Point();
            ll.X = (m.X / OriginShift) * 180.0;
            ll.Y = (m.Y / OriginShift) * 180.0;
            ll.Y = 180.0 / Math.PI * (2 * Math.Atan(Math.Exp(ll.Y * Math.PI / 180.0)) - Math.PI / 2.0);
            return ll;
        }

С этого (от gdal) коммента запомнил код и в других местах не обращал вниамание.
До того как начать новую тему пробовал и эллиптический, у него результат еще больше далек от правильного:
RelInt2TilePos Coords X:177206,306042311 Y: NaN
Только по Y разница пересчета, точнее функции обеих классов отличаются одной строкой:
Код: Выделить всё
Result.y := (0.5 - c * (ArcTanh(z) - FExct * ArcTanh(FExct * z))); [i]        // эллиптический[/i]
Result.y := 0.5 - 0.5 * Ln((1 + z) / (1 - z)) * c;  [i]                                  // сферический[/i]

При sradiusa = sradiusb результат вычисления по эллиптическому одинаковый со сферическим, но стоит задать sradiusb=6356752.3142 и Y получается NaN для эллиптического.

Может Params.txt неверный?
Код: Выделить всё
[PARAMS]
pnum=2
GUID={CBA03063-23D9-4FA4-931A-9182B98644B1}
name_ru=Карта (Google)
name=Map (Google)
name_uk=Карта (Google)
ParentSubMenu=Google
DefURLBase=http://mt.google.com/vt/lyrs=m@169000000&hl=ru
projection=1
sradiusa=6378137
sradiusb=6378137
NameInCache=map
Ext=.png
DefHotKey=77
ContentType=image/png
[ViewInfo]
EPSG=3785
Dopect
Новичок
 
Сообщения: 5
Зарегистрирован: 01 фев 2018, 19:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 01 июн 2018, 16:34

Конкретно какой вопрос по коду САС.Планеты? То что у вас где-то ошибка мы уже поняли, но это форум посвящен разработке САС.Планеты, поэтому ваш вопрос оффтопик.
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Вопросы по исходному коду

Сообщение Dopect » 01 июн 2018, 17:09

Конкретный вопрос на первом посте задавал, но для вас это оффтоп потому просто указали на ошибку кода EPSG и отвернулись.
На втором посте показал что не до конца знаю весь проект, ибо по коду с инета и по коду самого проекта координаты тайлов не совпадают, одинаково неверные. Потому подумал может я что-то упустил в проекте, ту часть где происходит "финальный пересчет". Написал вопрос в эту тему в надежде что кто нибудь укажет на то что я упускаю. Зная проблему указать на него парами строк ничего не стоит. Разрабы поднявшие сей проект(включая вас?) знают кодовую часть лучше всех.
Нуда лады, сам как нидь разберусь.
Dopect
Новичок
 
Сообщения: 5
Зарегистрирован: 01 фев 2018, 19:35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 01 июн 2018, 17:23

Dopect писал(а): часть где происходит "финальный пересчет"

Нет никакого финального пересчета.
Dopect писал(а):Нуда лады, сам как нидь разберусь.

Будут конкретные вопросы по коду САСа - задавайте
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Вопросы по исходному коду

Сообщение lambda88 » 15 июн 2018, 12:56

Добрый день. Подскажите, пожалуйста, какой файл в исходном коде отвечает за прорисовку полигонов на карте. Потихоньку пытаюсь разобраться в программе и решил начать с полигонов.
lambda88
Новичок
 
Сообщения: 6
Зарегистрирован: 18 окт 2017, 08:08
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Re: Вопросы по исходному коду

Сообщение vdemidov » 15 июн 2018, 13:14

lambda88 писал(а):Добрый день. Подскажите, пожалуйста, какой файл в исходном коде отвечает за прорисовку полигонов на карте.

Векторные данные меток рендерятся в растр в модуле u_VectorTileRendererForMarks.pas
А векторыне тайлы типа викимапии в модуле u_VectorTileRenderer.pas

lambda88 писал(а):Потихоньку пытаюсь разобраться в программе и решил начать с полигонов.

Не самая простая часть программы :)
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.

За это сообщение автора vdemidov поблагодарил:
lambda88 (15 июн 2018, 14:47)
Рейтинг: 5.26%
 
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: Вопросы по исходному коду

Сообщение lambda88 » 15 июн 2018, 14:49

Спасибо!

vdemidov писал(а):Не самая простая часть программы :)


Не самая простая, но для проекта нужная)))
lambda88
Новичок
 
Сообщения: 6
Зарегистрирован: 18 окт 2017, 08:08
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.

Пред.След.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

cron