что такое тайлы в картографии
GIS-LAB
Географические информационные системы и дистанционное зондирование
Основы конфигурирования тайловых сеток
Содержание
[править] Введение
Предположим, что вы ознакомились со спецификацией Tile Map Service и решили создать собственный TMS-сервис. Спецификация предполагает, что у вас уже есть готовый набор тайлов или перечень необходимых настроек, согласно которому эти тайлы будут создаваться (см. раздел URL, являющиеся скриптами). Наиболее распространенной является ситуация, когда автор TMS-сервиса не только создаёт прослойку между готовым набором тайлов и клиентским приложением, но и отвечает за подготовку самих тайлов. В этом случае разработчик должен хорошо разбираться в вопросах, связанных с конфигурированием тайловых сеток. Даже если в его приложении тайлы создаются по запросу, то есть «на лету», эти знания все равно крайне необходимы.
[править] Параметры тайловой сетки
[править] Проекция
Прежде всего важно определиться с проекцией, которая будет использоваться при отрисовке данных. Для этого необходимо ответить на вопрос для каких целей будут предназначены ваши тайлы. Если вы хотите просто отображать свою карту поверх подложек, предоставляемых такими сервисами как OpenStreetMap или Google Maps, то вы должны использовать такую же проекцию, что и указанные сервисы, а именно EPSG:3857. Если же вы преследуете какие-то иные цели, например, желаете вычислять расстояния, измерять площади объектов на карте или планируете создать карту Антарктиды, то в этом случае вам необходимо выбрать наиболее подходящую для этих задач проекцию.
В качестве примера в данной статье мы будем конфигурировать тайловую сетку на территорию Алтайского края, поэтому для отрисовки данных будем использовать проекцию UTM зона 44 EPSG:32644, что в дальнейшем позволит нам осуществлять корректное измерение расстояний на полученной карте.
[править] Охват
В результате чего мы получим охват интересующей нас территории в единицах измерения системы координат проекции EPSG:32644 (minx, miny, maxx, maxy):
[править] Масштабные уровни (разрешения)
Тайлы
Та́йлы (от англ. tiles — плитки) — в цифровой картографии жаргонное название тех квадратных растровых изображений равной величины, которыми, как плиткою, бывает вымощена поверхность отображаемой карты.
В этой статье рассматривается картографическое значение термина. В более широком смысле тайлами называются элементы любой тайловой компьютерной графики.
Содержание
Предназначение тайлов [ править | править код ]
Каждый тайл является небольшим квадратным куском целой карты некоторого масштаба.
Разделение карты на тайлы позволяет при демонстрации карты скачивать с отдалённого сервера только те тайлы, которые в настоящий момент видны читателю карты, и подкачивать новые тайлы по мере того, как читатель движется вдоль карты или переменяет масштаб её. Тем экономится и время скачивания, и объёмы необходимых данных.
Размеры тайлов [ править | править код ]
Размер тайла обыкновенно составляет 256×256 пикселов. Этот размер был популяризирован сайтом Google Maps и применяется в настоящее время на большинстве сайтов с картами (OpenStreetMap, Яндекс.Карты, Bing Maps и др.).
Возможны отступления от этого обычая, вызванные необходимостью. Так, например, мобильные приложения CloudMade используют тайлы 64×64 пикселов, так как дороговизна и низкая скорость мобильного доступа к Интернету принуждает к более строгой экономии времени и объёмов данных.
Уровень увеличения [ править | править код ]
Масштаб тайлов обыкновенно определяется единственным целым числом, которое называется уровнем увеличения ( англ. zoom level ).
Масштаб подбирается таким образом, чтобы на нулевом уровне увеличения вся карта мира (в меркаторовской проекции) состояла из единственного тайла. Точку пересечения экватора и нулевого меридиана при этом располагают в центре тайла (то есть между четырёх наиболее центральных пикселов, потому что по ширине и по высоте тайл состоит из чётного числа пикселов).
Неизбежные особенности меркаторовской проекции приводят к тому, что наиболее полярные области находятся за северной и южной стороной квадрата-тайла нулевого уровня увеличения, так что их отображение не производится. Отсечение происходит по широте, равной 85,0511° (это арктангенс гиперболического синуса числа пи).
Западная и восточная сторона квадрата-тайла нулевого уровня увеличения соответствует 180° западной и восточной долготы соответственно.
Переход к каждому последующему уровню увеличения приводит к двукратному росту масштаба, с тем чтобы внутри одного тайла предыдущего уровня увеличения всегда находилось бы ровно четыре (2×2) тайла последующего уровня увеличения.
RU:Tiles
Эта страница находится в процессе перевода или помечена для этой цели, поэтому может содержать пропуски, ошибки и непереведённые фрагменты.
Исходная статья: Tiles. Вы можете закончить перевод.
Если вы знаете английский, то можете помочь нам, переведя часть оригинальной статьи. Общие сведения о переводе статей на русский язык можно найти здесь.
Тайлы (плитка) керамическая плитка прямоугольной формы, расположенная мозаикой на стене вашей ванной! Но здесь мы гораздо чаще говорим о плитках карты: квадратные изображения, упорядоченные по сетке, отображающие карту. Также иногда имеются ввиду поделенные на тайлы данные карты (описано ниже)
Содержание
Графические тайлы карты
Тайлы карты как правило изображения размером 256 x 256 пикселов, например:
Но это не аксиома, Например CloudMade предлагает изображения OpenStreetMap размером 64 x 64 пикселов для мобильных устройств, хотя размер 256 x 256 пикселов что-то вроде стандарта, которым пользуются люди, в основном потому, что у google именно так.
«Набор тайлов (tileset)» обычно подразумевает достаточное количество тайлов, формирующих очень большое изображение, если они отображаются все сразу, на разных уровнях приближения. Но смысл не в том, чтобы их все сразу показывать, а отображать определённую область карты на веб сайте. Обычно, это достигается использованием специальной библиотеки на javascript, предоставляющий функционал для обзора и зума, а также запросов на подгрузку других тайлов, по мере того, как пользователь перемещается по карте.
Что такое тайлы в картографии
Одно из назначений систем хранения пространственных данных формирование визуального представления информации. В настоящее время этот процесс осуществляется на основе организации и применения тайловой структуры геоданных. Данная технология основана на комбинации растровой и иерархической моделях. Тайл (от английского tile – плитка) в картографических сервисах – один из квадратных фрагментов, на которые разбивается визуальная модель. Каждый тайл представляет собой изображение формата jpg (спутниковые снимки) или png (карты, слои) и хранится в файле с уникальным именем, которое определяется координатами этого тайла по осям X и Y. С методологической точки зрения тайлы представляют собой информационные единицы [1] информационной конструкции «карта». Эти информационные единицы применяют в ГИС «Карта 2011» [2]. Большинство картографических сервисов используют тайлы размерами 256х256 пикселей, который принят в модификации данной ГИС «Панорама-АГРО» [3]. Количество тайлов, из которого состоит изображение, зависит от масштаба. Например, на сервисе Google Maps изображение на масштабе z1 (самом мелком) состоит всего из 4-х тайлов. На следующем масштабе количество тайлов в 4 раза больше, чем на предыдущем, так как каждый тайл разбивается пополам как по горизонтали, так и по вертикали. По существу эта технология является реализацией технологии инкрементного метод проектирования электронных карт [4]. Все кто работал с Интернет-картографическими системами сталкивались с проблемой медленной загрузки изображений при работе с обычным ГИС сервером. Решение это проблемы в предлагаемой технологии состоит в том, что использование тайловой структуры позволяет, при просмотре через Интернет, загружать не всё изображение целиком, а только ту его часть, которая отображается на экране, что экономит трафик и время. Синонимом термина «тайл» является «текстура». Наложение текстуры является одной из основных задачграфического аппаратного обеспечения. Ключевой задачей при наложения текстур является задачахранения и управления большими текстурами на графических процессорах. Тайловая технология позволяет хранить небольшой набор тайлов вместо большого растрового изображения. То есть эта технология на порядки (1000) уменьшает объем хранимых растровых изображений [5].
Создание тайлов из растровых карт (ч.2)
В этой части статьи мы завершим наш алгоритм создания тайла, узнаем, как использовать полученные тайлы в OpenLayers и в OsmAnd. Попутно продолжим знакомство с ГИС и узнаем про картографические проекции, а также узнаем в чем заключается «привязка» растровой карты и зачем она нужна.
В предыдущей части мы остановились на том, что необходимо получить цвет пикселя из исходной растровой карты по геодезическим координатам (широта, долгота), уже переведенным в СК этой карты.
Геодезические координаты заданы на поверхности эллипсоида, а координаты пикселя на плоскости, т.е. необходим способ перехода от выпуклой поверхности к плоской. Проблема состоит в том, что выпуклую поверхность (представим что на ней нанесен какой-то рисунок или координатная сетка), невозможно перенести на плоскую без каких-либо искажений. Искажаться может: форма (углы), площадь, линейные размеры. Есть, конечно, возможность, причем не единственная, переноса на плоскую поверхность не искажая только что-то одно, но неизбежно будет искажаться остальное.
Очевидно, что на более мелких масштабах (вся планета, континет), искажения проявляются сильнее, чем на более крупных (область, город), а на самых крупных (план небольшого участка) о них вообще речь не идет, т.к. поверхность эллипсоида на таких масштабах уже не отличима от плоскости.
Здесь мы подошли к понятию картографической проекции. Не буду приводить примеры с картинками проецирования сферы на цилиндр или на конус с последующей разверткой, для нас сейчас важно обобщить.
Картографическая проекция — это заданный математически способ отображения поверхности эллипсоида на плоскость. Проще говоря, это математические формулы для перевода геодезических координат (широта, долгота) в плоские декартовы — как раз то, что нам нужно.
Картографических проекций изобретено огромное множество, все они находят применение для своих целей: равновеликие (в кторых сохраняется площадь) для политических карт, карт грунтов, равноугольные (в которых сохраняется форма) — для навигации, равнопромежуточные (сохранение масштаба по выбранному направлению) — для компьютерной обработки и хранения массивов геоданных. Есть также проекции, которые сочетают в себе в определенных пропорциях вышеперечисленные особенности, есть совсем эзотерические проекции. Примеры проекций можно найти в Википедии на странице «Список картографических проекций».
Для каждой проекции выведены либо точные формулы, либо в виде суммы бесконечных сходящихся рядов, причем в последнем случае может существовать даже несколько вариантов. Формулы для проекций переводят широту и долготу в декартовы координаты, как правило единицей измерения в таких координатах используется метр. Такая метровая прямоугольная координатная сетка иногда может быть нанесена и на карту (в виде километровой сетки), но в большинстве случаев ее не наносят. Но мы теперь знаем, что в неявном виде она все-таки есть. Масштаб карты, который указан на карте, какраз и вычислен относительно размера этой сетки. Следует четко понимать, что 1 метр на такой координатной сетке соответствует 1 метру на местности не на всей карте, а лишь в некоторых точках, по определенной линии, либо по линиям в определенном направлении, в остальных же точках или направлениях проявляются искажения и 1 метр на местности не соответствет 1 метру координатной сетки.
Небольшое отступление. Функция из первой части статьи WGS84_XYZ как раз и является преобразованием координат из СК WGS84 в прямоугольные координаты, но выраженные не в метрах, а в пикселях. Как видно, формула там предельно простая, если бы использовалась проекция Меркатора не на сфере, а на эллипсоиде, то формула была бы посложнее. Именно поэтому, чтобы облегчить жизнь браузерам, была выбрана сфера, в последствии проекция WebMercator так и прижилась со своей сферой, за что ее часто ругают.
Для своих нужд я использовал документ под названием «Map projections used by the U.S. Geological Survey» в формате pdf, который можно найти в Интернет. В документе для каждой проекции приведены подробные инструкции, по которым легко написать функцию преобразования на языке программирования.
Продолжим писать наш алгоритм. Реализуем одну из популярных проекций под названием поперечная проекция Меркатора (Transverse Mercator) и один из его вариантов под названием проекция Гаусса-Крюгера (Gauss-Kruger).
Особенностью поперечной проекции Меркатора является то, что она конформна, т.е сохраняется форма объектов на карте и углы, а также то, что сохраняется масштаб вдоль одного центрального меридиана. Проекция пригодна для всего земного шара, но при отдалении от центрального меридиана растут искажения, поэтому всю земную поверхность нарезают на узкие полоски по меридианам, которые называются зонами, для каждой из которых используется свой центральный меридиан. Примерами реализации таких проекций являются проекция Гаусса-Крюгера и UTM, в которых также определен способ распределения координат по зонам, т.е. определена и одноименная СК.
И, собственно, код функций инициализации и преобразования координат. В функции инициализации одноразово вычисляются константы, которые будут многократно использоваться функцией преобразования.
На выходе функции преобразования будем иметь координаты: восточное и северное смещение (e,n) — это прямоугольные декартовы координаты в метрах.
Мы уже очень близки к завершению нашего алгоритма. Нам осталось только найти координаты пикселя (x,y) в файле карты. Т.к. координаты пикселей тоже декартовы, то мы можем найти их афинным преобразованием (e,n) к (x,y). К нахождению параметров самого афинного преобразования мы вернемся чуть позже.
И, наконец, полный алгоритм создания тайла:
Результат работы для z=12, y=1377, x=2391:
В алгоритме осталась не описанной функция нахождения исходного изображения карты srcimg по заданным в СК карты геодезическим координатам lat, lon. Думаю, с ней и номером зоны srcimg->zone проблем не возникнет, а вот на нахождении параметров афинного преобразования srcimg->affine остановимся более подробно.
Где-то на просторах Интернета очень давно была найдена вот такая функция для нахождения параметров афинного преобразования, привожу ее даже с оригинальными комментариями:
На вход необходимо подать не менее трех точек привязки, на выходе получаем готовые параметры. Точки привязки — это точки, для которых одновременно известны координаты пикселя (x,y) и координаты восточного и северного смещения (e,n). В качестве таких точек можно использовать точки пересечения километровой сетки на исходной карте. А что если на карте нет километровой сетки? Тогда можно задать пары (x,y) и (lon,lat), в качестве таких точек взять точки пересечения параллелей и меридианов, они на карте есть всегда. Осталось только преобразовать (lon,lat) в (e,n), это делается функцией преобразования для проекции, в нашем случае это translateTransverseMercator().
Как видно, точки привязки необходимы, чтобы сообщить алгоритму, какой участок земной поверхности описывает файл с изображением карты. Поскольку обе координатные системы были декартовыми, то сколько бы точек привязки мы не задавали и как далеко бы они не находились друг от друга, расхождение по всей плоскости карты будет в пределах погрешности определения точек привязки. Большинство ошибок состоит в том, что применяется не правильная (с не точно заданными параметрами) проекция, датум или эллипсоид, в результате координаты (e,n) на выходе получаются не в декартовой системе координат, а в немного искривленной относительно декартовой. Визуально это можно представить как «мятую простыню». Естественно, увеличение количества точек привязки эту проблему не решает. Проблему может решить тюнинг параметров проекции, датума и эллипсоида, в данном случае большое количество точек привязки позволит разгладить «простыню» точнее и не пропустить неразглаженных участков.
И в завершение статьи расскажу, как готовые тайлы использовать в OpenLayers и в каком виде их приготовить для программы OsmAnd.
Для OpenLayers тайлы необходимо просто выложить в web и назвать так, чтобы в названии файла или каталога можно было выделить (z,y,x), например так:
/tiles/topo/12_1377_2391.jpg
или, еще лучше так:
/tiles/topo/12/1377/2391.jpg
Тогда их использовать можно таким образом:
Для программы OsmAnd легко определить формат по каким-либо уже имеющимся файлам с набором тайлов. Расскажу сразу про результаты. Тайлы упаковываются в файл базы данных sqlite, который создается таким образом: