SASGIS

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

Экспорт и импорт X Y Z

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

Re: Экспорт и импорт X Y Z

Сообщение zed » 02 дек 2008, 22:35

По-моему, размер тайла всё тот же: 256*256, т.е. bil описывает ту же область, что и тайл 256*256 (в соответствующей проекции), но у него всего 150*150 элементов/пикселей (распределённых равномерно по всей площади). В общем, можно считать bil - растянутым тайлом, но "растяжку" нужно делать "в уме" и на стороне клиента (интерент-трафик-то не резиновый :))
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Экспорт и импорт X Y Z

Сообщение svp » 02 дек 2008, 22:42

zed писал(а):По-моему, размер тайла всё тот же: 256*256, т.е. bil описывает ту же область, что и тайл 256*256 (в соответствующей проекции), но у него всего 150*150 элементов/пикселей (распределённых равномерно по всей площади). В общем, можно считать bil - растянутым тайлом, но "растяжку" нужно делать "в уме" и на стороне клиента (интерент-трафик-то не резиновый :))

Тогда первый вариант формулы будет правильным: viewtopic.php?f=2&t=51&st=0&sk=t&sd=a&start=40#p1923
А к чему тогда вот это:
zed писал(а):Проекция тайла карты и тайла bil - в общем случае не совпадают (у bil - широта/долгота, у тайлов - меркатор), поэтому их нельзя ставить в соответствие, либо должна быть "перепроецированная" матрица bil[0..n,0..m], соответствующая тайлу на конкретной широте

Короче надо проверять. Открыть какие-нибудь горы, имеющиеся на гугловских снимках в хорошей детализации и смотреть. А файл с высотами можно открыть в фотошопе: Open As.., указать тип файла "Photoshop Raw (*.RAW)". В параметрах указать размер 150x150, 1 канал, 16 бит, Byte Order = Mac, Header Size = 0.
И на картинке будет виден рельеф.Если он будет совпадать с тайлом по границам, то замечательно, если не будет, то надо разбираться.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

Re: Экспорт и импорт X Y Z

Сообщение zed » 02 дек 2008, 23:05

К тому, что даже если 2 тайла одинакового разрешения (256*256) - как в нашем случае, нужно учитывать проекцию этих тайлов, поскольку они могут описывать разную площадь, если их проекции не совпадают...
В общем, если делаете по первой формуле, то предполагаете, что и картинка и bil в одной проекции (соответственно и X,Y расчитываете для этой проекции). Стоит, наверное, реализовать этот вариант и посмотреть что выйдет...
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Экспорт и импорт X Y Z

Сообщение svp » 02 дек 2008, 23:09

Стоит проверить на паре тайлов сначала. Это мы можем сами, а, чтобы реализовать, надо Фея дёргать. Я ещё не откомпилил исходники. Некогда всё.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

Re: Экспорт и импорт X Y Z

Сообщение zed » 02 дек 2008, 23:36

Сделал в Фотошопе, для L=2 центральная европа, тайлы подписаны оригинальными именами.
Координаты углов:
Lon1=15 град; Lat1=60 град;
Lon2=40 град; Lat2=45 град;
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Экспорт и импорт X Y Z

Сообщение svp » 02 дек 2008, 23:45

Да.. проекция явно не та.. Найдутся Гисовцы, которые смогут опознать проекцию?
zed
Ещё бы координаты склееных тайлов привести в том посте. О и целиком бы склеить все тайлы для этого масштаба, а?
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

Re: Экспорт и импорт X Y Z

Сообщение zed » 02 дек 2008, 23:48

Найдутся Гисовцы, которые смогут опознать проекцию?

Проекция явно широта/долгота :)
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Экспорт и импорт X Y Z

Сообщение svp » 03 дек 2008, 00:00

Тогда вот формула: viewtopic.php?f=2&t=51&st=0&sk=t&sd=a&start=40#p1926
И надо сделать массив ширин тайлов для каждого левела.
Тогда координаты имя тайла будет вычисляться как-то так:
X = floor((Lat + 90) / bdx[L])
Y = floor((Lon + 90) / bdy[L])
bdx[L] и bdy[L] -- ширины тайлов в градусах для каждого зума.
Гисовцы, поправьте, если торможу.
Аватара пользователя
svp
Советчик
 
Сообщения: 447
ICQ: 204094886
Зарегистрирован: 26 авг 2008, 11:14
Откуда: Белгород
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.

Re: Экспорт и импорт X Y Z

Сообщение zed » 03 дек 2008, 01:25

Хм, всё хитрее, чем казалось: для L=2, Lon: X=0..71, Lat: Y=0..35
При X=0 Lon=-180, при X=71 Lon=180;
При Y=0 Lat=-90! при Y=35 Lat=90!;
Т.е. нумерация X,Y с нижнего левого угла.
Для L=2 разрешение - 5 град/тайл.
Тогда, для рисунка в фотошопе координаты:
(верх-лево 0029_0039.bil) Lon=39*5-180=15 град; Lat=(29+1)*5-90=60 град;
(низ-право 0027_0043.bil) Lon=(43+1)*5-180=40 град; Lat=27*5-90=45 град;

Т.е. формулы расчёта:
Lon:=X*bdxy[L]-180;
Lat:=Y*bdxy[L]-90;
X = floor((Lon + 180) / bdxy[L])
Y = floor((Lat + 90) / bdxy[L])
bdxy[L]=bdx[L]=bdy[L] -- разрешение тайла в градусах.

P.S. Каждый следующий зум увеличивает число тайлов в 2 раза (хоть тут всё как всегда :)): для L=3, X=0..143, Y=0..72, bdxy[3]=2.5
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Re: Экспорт и импорт X Y Z

Сообщение zed » 05 дек 2008, 19:06

Вот, написал модуль для SAS, для использования в нём BIL формата. Как использовать и подключить модуль описано в HowToUse.txt
Просьба к feya подключить модуль к SAS и расширить функционал :)

Заметил ошибку в константе для L=10,11
Правильно:
Код: Выделить всё
RezL: array [0..11] of Extended = (20,10,5,2.5,1.25,
                                   0.625,0.3125,0.15625,0.078125,0.0390625,
                                   0.01953125,0.009765625);

И подкорректировал функцию определения высоты с учётом того, что первое значение высоты в bil (по смещению 0) относится к верхнему левому углу (в первом варианте я считал, что это высота для нижнего левого угла). В общем надо проверять в "деле".
Архив перезалил.
И ещё момент, функция возвращает высоту H в формате word (0..65535) - непосредственно данные с BIL файла. Для получение отрицательных высот нужно из H вычетать 65536:
Код: Выделить всё
if H.Y>=32768 then H.Y:=H.Y-65536;

Ну, это в примере показано.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

Вернуться в SAS.Планета

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

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