Tile Map Service Specification
Перевод Tile Map Service Specification
Данный документ является продуктом работы свободного сообщества участников, заинтересованных в создании клиент-серверного решения, предназначенного для работы с со стеком изображений различного разрешения. Он является своего рода руководством для реализации соответствующего программного обеспечения. Этот документ не является "официальным стандартом" и не заявлен OSGeo как официальный проект или рабочий продукт Фонда.
Версия данного документа "1.0" и он больше не будет редактироваться. Изменения будут обсуждаться по адресу Tile Map Service Specification Change Requests.
Любые ревизии будут помещены в новую рабочую копию.
Введение
Назначение документа
Tile Map Service (TMS) обеспечивает доступ к картам, построенным на основе пространственных данных, но не к самим данным. Данный документ стандартизирует процедуру запроса тайлов клиентами, а также способ описания данных, доступных на TMS-сервере.
Форма документа
В данном документе последовательно рассматривается описание общих и частных (таких как картографические тайлы) ресурсов, предоставляемых TMS-сервером, приводятся примеры соответствующих URL и возвращаемых значений.
Спецификация
Tiled Web Service предоставляет доступ к ресурсам, в частности к картографическим тайлам, отрендеренным на определённом масштабном уровне. Доступ к этим ресурсам осуществляется посредством "REST" интерфейса. Клиент может получить доступ, например, к ресурсу, описывающему доступные карты, к ресурсу, содержащему описание доступных масштабных уровней карты, и, как уже было отмечено выше, непосредственно к самим тайлам.
Каждый ресурс содержит описательную информацию и ссылки на ресурсы следующего уровня. Отметим, что поскольку для доступа к ресурсам используются URL, может показаться, что они имеют некоторое значение (например, ресурс для версии сервиса 1.0.0 содержит подстроку "1.0.0" в идентифицирующем его URL), но это не так - формат URL произвольный.
Существует только одно требование, заключающееся в том, что ресурс должен быть идентифицируем по URL (например, http://tms.osgeo.org/1.0.0/ может выглядеть как http://tms.osgeo.org/onepointzeropointzero или http://tms.osgeo.org/flipper.xml, то есть принимать любое значение, указанное в элементе <TileMapService> корневого ресурса).
Значение свойства "href" должно быть абсолютным URL (начинаться с "http://"). Например: href="http://www.service.org/subdirectory/tilemap.xml"
Корневой ресурс (Root Resource)
Корневой ресурс описывает доступные на сервере версии сервисов <TileMapService> (возможно также и другие типы сервисов).
Запрос:
http://tms.osgeo.org/
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <Services> <TileMapService title="Example Tile Map Service" version="1.0.0" href="http://tms.osgeo.org/1.0.0/" /> <TileMapService title="New Example Tile Map Service" version="1.1.0" href="http://tms.osgeo.org/1.1.0/" /> <FancyFeatureService title="Features!" version="0.9" href="http://ffs.osgeo.org/0.9/" /> </Services>
Запрос:
http://www.osgeo.org/services/root.xml
Ответ:
<?xml version="1.0" ?> <Services> <TileMapService title="Example Static Tile Map Service" version="1.0.0" href="http://www.osgeo.org/services/tilemapservice.xml" /> </Services>
Ресурс TileMapService (TileMapService Resource)
Ресурс <TileMapService> предоставляет описание сервиса, а также список доступных в рамках данного сервиса карт <TileMaps>. Опциональные элементы ресурса в нижеприведённых примерах отмечены символом "|", остальные элементы являются обязательными.
Запрос:
http://tms.osgeo.org/1.0.0/
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <TileMapService version="1.0.0" services="http://tms.osgeo.org"> <Title>Example Tile Map Service</Title> <Abstract>This is a longer description of the example tiling map service.</Abstract> | <KeywordList>example tile service</KeywordList> | <ContactInformation> | <ContactPersonPrimary> | <ContactPerson>Paul Ramsey</ContactPerson> | <ContactOrganization>Refractions Research</ContactOrganization> | </ContactPersonPrimary> | <ContactPosition>Manager</ContactPosition> | <ContactAddress> | <AddressType>postal</AddressType> | <Address>300 - 1207 Douglas Street</Address> | <City>Victoria</City> | <StateOrProvince>British Columbia</StateOrProvince> | <PostCode>V8W2E7</PostCode> | <Country>Canada</Country> | </ContactAddress> | <ContactVoiceTelephone>12503833022</ContactVoiceTelephone> | <ContactFacsimileTelephone>12503832140</ContactFacsimileTelephone> | <ContactElectronicMailAddress>pramsey@refractions.net</ContactElectronicMailAddress> | </ContactInformation> <TileMaps> <TileMap title="VMAP0 World Map" srs="EPSG:4326" profile="global-geodetic" href="http://tms.osgeo.org/1.0.0/vmap0" /> <TileMap title="British Columbia Landsat Imagery (2000)" srs="EPSG:3005" profile="local" href="http://tms.osgeo.org/1.0.0/landsat2000" /> </TileMaps> </TileMapService>
Запрос:
http://www.osgeo.org/services/tilemapservice.xml
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <TileMapService version="1.0.0" services="http://www.osgeo.org/services/root.xml"> <Title>Example Static Tile Map Service</Title> <Abstract>This is a longer description of the static tiling map service.</Abstract> | <KeywordList>example tile service static</KeywordList> | <ContactInformation> | <ContactPersonPrimary> | <ContactPerson>Paul Ramsey</ContactPerson> | <ContactOrganization>Refractions Research</ContactOrganization> | </ContactPersonPrimary> | <ContactPosition>Manager</ContactPosition> | <ContactAddress> | <AddressType>postal</AddressType> | <Address>300 - 1207 Douglas Street</Address> | <City>Victoria</City> | <StateOrProvince>British Columbia</StateOrProvince> | <PostCode>V8W2E7</PostCode> | <Country>Canada</Country> | </ContactAddress> | <ContactVoiceTelephone>12503833022</ContactVoiceTelephone> | <ContactFacsimileTelephone>12503832140</ContactFacsimileTelephone> | <ContactElectronicMailAddress>pramsey@refractions.net</ContactElectronicMailAddress> | </ContactInformation> <TileMaps> <TileMap title="Vancouver Island Base Map" srs="EPSG:26910" profile="none" href="http://www.osgeo.org/services/basemap.xml" /> </TileMaps> </TileMapService>
Ресурс TileMap Resource (TileMap Resource)
Ресурс <TileMap> (обычно) представляет собой описание законченной карты. Однако иногда <TileMap> могут быть использованы как отдельные слои и результирующая карта на клиенте будет выглядеть как комбинация таких слоёв.
Каждая карта <TileMap> разделена на несколько наборов TileSet в рамках которых она отрендерена на определённом масштабе и разбита на тайлы. На мелком масштабе (например, 1:10000000) карта может содержать всего несколько тайлов, тогда как на крупном (например, 1:10000) количество тайлов может исчисляться миллионами.
Отрендеренная в определенной проекции карта <TileMap> на отдельном масштабном уровне представлена упорядоченным набором регулярных изображений (тайлов) <TileSet>, которые вместе взятые образуют полное покрытие карты.
Запрос:
http://tms.osgeo.org/1.0.0/vmap0
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <TileMap version="1.0.0" tilemapservice="http://tms.osgeo.org/1.0.0"> <Title>VMAP0 World Map</Title> <Abstract>A map of the world built from the NGA VMAP0 vector data set.</Abstract> | <KeywordList></KeywordList> | <Metadata type="TC211" mime-type="text/xml" href="http://www.org" /> | <Attribution> | <Title>National Geospatial Intelligence Agency</Title> | <Logo width="10" height="10" href="http://nga.mil/logo.gif" mime-type="image/gif" /> | </Attribution> | <WebMapContext href="http://wms.org" /> | <Face>0</Face> <SRS>EPSG:4326</SRS> <BoundingBox minx="-180" miny="-90" maxx="180" maxy="90" /> <Origin x="-180" y="-90" /> <TileFormat width="256" height="256" mime-type="image/jpeg" extension="jpg" /> <TileSets profile=global-geodetic"> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/0" units-per-pixel="0.703125" order="0" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/1" units-per-pixel="0.3515625" order="1" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/2" units-per-pixel="0.17578125" order="2" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/3" units-per-pixel="0.08789063" order="3" /> </TileSets> </TileMap>
Запрос:
http://tms.osgeo.org/1.0.0/landsat2000
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <TileMap version="1.0.0" tilemapservice="http://tms.osgeo.org/1.0.0"> <Title>British Columbia Landsat Imagery (2000)</Title> <Abstract>Landsat data collected in the year 2000 over British Columbia.</Abstract> | <KeywordList></KeywordList> | <Metadata type="TC211" mime-type="text/xml" href="http://www.org" /> | <Attribution> | <Title>Government of British Columbia</Title> | <Logo width="10" height="10" href="http://gov.bc.ca/logo.png" mime-type="image/png" /> | </Attribution> | <WebMapContext href="http://wms.gov.bc.ca" /> <SRS>EPSG:3005</SRS> <BoundingBox minx="100000" miny="100000" maxx="1800000" maxy="1800000" /> <Origin x="100000" y="100000" /> <TileFormat width="256" height="256" mime-type="image/png" extension="png" /> <TileSets profile="local"> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/2048" units-per-pixel="2048" order="0" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/1024" units-per-pixel="1024" order="1" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/512" units-per-pixel="512" order="2" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/256" units-per-pixel="256" order="3" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/128" units-per-pixel="128" order="4" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/64" units-per-pixel="64" order="5" /> </TileSets> </TileMap>
Запрос:
http://www.osgeo.org/services/basemap.xml
Ответ (Content-type: text/xml):
<?xml version="1.0" encoding="UTF-8" ?> <TileMap version="1.0.0" tilemapservice="http://www.osgeo.org/services/tilemapservice.xml"> <Title>Vancouver Island Base Map</Title> <Abstract>A map of the Vancouver Island built from British Columbia planimetric mapping data and digital elevation hill shading.</Abstract> | <KeywordList></KeywordList> | <Metadata type="TC211" mime-type="text/xml" href="http://www.org" /> | <Attribution> | <Title>Goverment of British Columbia</Title> | <Logo width="10" height="10" href="http://www.gov.bc.ca/logo.gif" mime-type="image/gif" /> | </Attribution> | <WebMapContext href="http://openmaps.gov.bc.ca" /> <SRS>EPSG:26910</SRS> | <Face>0</Face> <BoundingBox minx="500000" miny="4800000" maxx="700000" maxy="5500000" /> <Origin x="500000" y="4800000" /> <TileFormat width="256" height="256" mime-type="image/png" extension="png" /> <TileSets profile="none"> <TileSet href="http://www.osgeo.org/services/basemap/L1" units-per-pixel="6400" order="0" /> <TileSet href="http://www.osgeo.org/services/basemap/L2" units-per-pixel="1600" order="1" /> <TileSet href="http://www.osgeo.org/services/basemap/L3" units-per-pixel="400" order="2" /> <TileSet href="http://www.osgeo.org/services/basemap/L4" units-per-pixel="100" order="3" /> <TileSet href="http://www.osgeo.org/services/basemap/L5" units-per-pixel="25" order="4" /> </TileSets> </TileMap>
Каждая карта <TileMap> поддерживает одну систему координат <SRS> и один формат изображения. Если вы планируете обеспечить доступ к карте, отрендеренной в других проекциях или в других форматах, то в этом случае необходимо определить дополнительные элементы <TileMap> внутри <TileMapService>.
Объект <TileMap> имеет свойства <BoundingBox> и <Origin>. <BoundingBox> - это охват области интересов, он может быть использован клиентом для установки начального охвата карты. <Origin> - координаты левого нижнего угла тайла 0/0, или правого верхнего угла тайла -1/-1 (если вы сконфигурировали сервис таким образом, что карта содержит тайлы с отрицательными координатами). Координаты <Origin> могут располагаться вне визуальной области интересов (<BoundingBox>) из соображений удобства реализации.
<TileMap> может входить в состав более крупного <TileMap> как отдельная грань <Face>. Такие клиенты как OSGPlanet и GeoFusion используют отдельно полярные и экваториальные грани ("earth cube") для создания единого представления Земли из набора тайлов. Смотри #Использование граней.
<TileMap> может реализовать один из трёх "профилей": два глобальных в определённых проекциях и один локальный в произвольной проекции. Профиль подразумевает под собой фиксированный набор масштабных уровней, что позволяет легко комбинировать наборы тайлов, полученных из различных источников.
Профили
Следование данной спецификации гарантирует то, что клиенты смогут без проблем использовать ваши тайловые данные. Однако это не гарантирует того, что эти тайловые данные могут быть легко совмещены с тайловыми данными, полученными с других картографических серверов. Для обеспечения их максимальной совместимости необходимо реализовать поддержку так называемых "профилей".
Тип профиля <TileMap> определяется в атрибуте "profile" элемента <TileSets>. Допустимые значения данного атрибута:
- none
- global-geodetic
- global-mercator
- local
global-geodetic
Если используется профиль "global-geodetic", то элемент <TileMap> должен удовлетворять следующим требованиям:
- Использовать <SRS>EPSG:4326</SRS>
- Снабжать каждый <TileSet>` информацией о разрешении согласно формуле: 0.703125 / 2^n, где n - целое неотрицательное.
- При таком подходе начальный масштабный уровень состоит из двух тайлов размером 256x256 пикселов, покрывающих всю Землю, значение элемента <Origin> при этом равно (-180,-90). Другие комбинации размеров тайлов и значений <Origin> также допустимы на данном масштабе.
<TileSets profile="global-geodetic"> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/0" units-per-pixel="0.703125" order="0" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/1" units-per-pixel="0.3515625" order="1" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/2" units-per-pixel="0.17578125" order="2" /> <TileSet href="http://tms.osgeo.org/1.0.0/vmap0/3" units-per-pixel="0.08789063" order="3" /> </TileSets>
global-mercator
Если используется профиль "global-mercator", то элемент <TileMap> должен удовлетворять следующим требованиям:
- Использовать <SRS>OSGEO:41001</SRS>
- Снабжать каждый <TileSet> информацией о разрешении согласно формуле: 78271.516 / 2^n, где n - целое неотрицательное.
- При таком подходе начальный масштабный уровень состоит из четырёх тайлов размером 256x256 пикселов, покрывающих всю Землю, значение элемента <Origin> при этом равно (-20037508.34, -20037508.34). Другие комбинации размеров тайлов и значений <Origin> также допустимы на данном масштабе.
local
Локальный профиль "local" построен снизу вверх, начиная с самого низкого разрешения к самому высокому. Локальные профили, как и глобальные, также построены на строго фиксированном наборе масштабных уровней, при этом может быть использована произвольная система координат.
Если используется профиль "local", то элемент <TileMap> должен удовлетворять следующим требованиям:
- Использовать произвольную систему координат и идентифицировать её внутри тега <SRS>
- Снабжать каждый <TileSet> информацией о разрешении согласно формуле: 2^n
- Указывать в атрибуте href поддиректорию, используя в качестве её имени значение "n", соответствующее данному <TileSet>.
<SRS>EPSG:3005</SRS> <BoundingBox minx="100000" miny="100000" maxx="1800000" maxy="1800000" /> <Origin x="100000" y="100000" /> <TileSets profile="local"> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/6" units-per-pixel="2048" order="0" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/5" units-per-pixel="1024" order="1" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/4" units-per-pixel="512" order="2" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/3" units-per-pixel="256" order="3" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/2" units-per-pixel="128" order="4" /> <TileSet href="http://tms.osgeo.org/1.0.0/landsat2000/1" units-per-pixel="64" order="5" /> </TileSets>
Ресурс Tile Resources
Положение начала координат <TileMap> задаётся в единицах измерения, используемых системой координат карты. x-координата тайлов возрастасет в том же направлении, что и координата x исходных данных в выбранной системе координат, y-координата тайлов также изменяется в том же направлении, что и y-координата исходных данных.
Адрес тайлов определяется путём добавления к значению атрибута "href" элемента <TileSet> координаты "x", выступающей в роли имени директории и координаты "y", выступающей в роли имени файла с раширением, указанным в <TileFormat>.
Примеры:
Тайл, расположенный в начале системы координат первого масштабного уровня карты vmap0. http://tms.osgeo.org/1.0.0/vmap0/levelzero/0/0.jpg
Тайл, расположенный в середине тайловой сетки третьего масштабного уровня карты vmap0. http://tms.osgeo.org/1.0.0/vmap0/leveltwo/3/4.jpg
Тайл, расположенный в середине тайловой сетки пятого масштабного уровня карты landsat2000. http://tms.osgeo.org/1.0.0/landsat2000/1/8500/8500.png
Тайл, расположенный в начале системы координат первого масштабного уровня карты basemap. http://www.osgeo.org/services/basemap/L1/0/0.png
TileMap Diagram
Обработка ошибок
При возникновении ошибки на сервере важно, чтобы клиент смог легко это обнаружить, а также понять, почему это случилось, поэтому пользователь должен получать необходимые уведомления.
Тайловый сервер использует HTTP-коды ошибок для передачи общей информации о возникшей проблеме. Кроме этого, тело ответа может быть представлено XML-документом, содержащим более детальное описание ошибки в человекочитаемом виде.
Только HTTP-коды ошибок, представленные в данной спецификации, могут быть возвращены сервером.
- Клиент обратился к URL несуществующего ресурса. Возвращается 404 HTTP-код ошибки (Not Found)
- При обработке запроса к URL существующего ресурса возникла ошибка на стороне сервера. Возвращается 500 HTTP-код ошибки (Internal Server Error)
Сервер в опциональном порядке может возвращать в теле ответа некий контент, даже в случае возникновения ошибки. Например, это может быть XML-документ, содержащий детальную информацию об ошибке. В данном случае необходимо установить заголовок Content-type в значение text/xml.
<?xml version="1.0" ?> <TileMapServerError> <Message>The requested tile is outside the bounding box of the tile map.</Message> </TileMapServerError>
Советы по реализации
Пространственные системы координат
Определение пространственных систем координат основано на базе данных EPSG как источнике определения наиболее "известных" проекций.
Существует две принципиальные проблемы, связанные с использованием базы данных EPSG в качестве референсного источника:
- Во-первых, база данных EPSG имеет несколько специфичных определений для наиболее распространенных географических систем координат, в частности EPSG:4326 -- географические координаты относительно эллипсоида WGS84. Определение для 4326 говорит, что порядок координат следующий - широта/долгота, единицы измерения - градусы, минуты, секунды. Однако, при использовании EPSG:4326 в Веб-картографии принято использовать обратный порядок координат - долгота/широта, а в качестве единиц измерения десятичные градусы.
- Во-вторых, база данных EPSG не включает в себя все наиболее распространенные системы координат. Существует множество местных систем координат, которые не отражены в данной базе, хотя EPSG принимает необходимые усилия по их включению. Кроме того, EPSG не содержит и ряд очень распространенных глобальных и используемых для отображения протяженных территорий систем координат предположительно по политическим соображениям. Например, не существует EPSG идентификатора для проекции Меркатора на весь мир или Альберса для Северной Америки.
The issues will be dealt with by fiat in this specification, matching implementation practice rather than following the database definition:
- Для всех географических систем координат, представленных в базе данных EPSG, в рамках данной спецификации порядок координат предполагается следующий - долгота/широта, единицы измерения - десятичные градусы.
- Системы координат, не представленные в базе данных EPSG могут быть определены в самой TMS-спецификации, используя формат описания OSGEO:
- OSGEO:41001 PROJCS["WGS84 / Simple Mercator", GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Decimal_Degree", 0.0174532925199433]], PROJECTION["Mercator_1SP"], PARAMETER["central_meridian",0], PARAMETER["false_easting",0], PARAMETER["false_northing",0], UNIT["Meter",1]]
- OSGEO:42310 PROJCS["WGS84+GRS80 / Mercator", GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["GRS 1980",6378137,298.257222101], TOWGS84[0,0,0]], PRIMEM["Greenwich",0], UNIT["Decimal_Degree",0.0174532925199433]], PROJECTION["Mercator_1SP"], PARAMETER["central_meridian",0], PARAMETER["false_easting",0], PARAMETER["false_northing",0], UNIT["Meter",1]]
- OSGEO:42101 PROJCS["WGS 84 / LCC Canada", GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Decimal_Degree",0.0174532925199433]], PROJECTION["Lambert_Conformal_Conic_2SP"], PARAMETER["central_meridian",-95.0], PARAMETER["latitude_of_origin",0], PARAMETER["standard_parallel_1",49.0], PARAMETER["standard_parallel_2",77.0], PARAMETER["false_easting",0.0], PARAMETER["false_northing",-8000000.0], UNIT["Meter",1]]
- OSGEO:42304 PROJCS["NAD83 / NRCan LCC Canada", GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS_1980",6378137,298.257222101], TOWGS84[0,0,0]], PRIMEM["Greenwich",0], UNIT["Decimal_Degree",0.0174532925199433]], PROJECTION["Lambert_Conformal_Conic_2SP"], PARAMETER["central_meridian",-95.0], PARAMETER["latitude_of_origin",49.0], PARAMETER["standard_parallel_1",49.0], PARAMETER["standard_parallel_2",77.0], PARAMETER["false_easting",0.0], PARAMETER["false_northing",0.0], UNIT["Meter",1]]
Максимизация кэшируемости
Тайловые карты обычно используются в качестве подложек и содержат информацию об относительно редко изменяющихся данных. Кроме того, они очень велики по объёму - количество тайлов может достигать нескольких миллионов. Учитывая эти факты, можно сделать вывод о том, что активное использование стратегии кэширования позволит оптимизировать производительность тайловых сервисов.
Кэширование может быть выполнено на различных уровнях, расположенных между сервером и клиентом:
- На самом клиенте, клиентское приложение записывает кэш на локальный диск.
- В разделяемом кэше поставщика интернет-услуг, что позволит пользователям, осуществляющим доступ в Интернет через одного провайдера, использовать общий кэш.
- В кэше на стороне сервера, что позволит снизить нагрузку на сервере за счёт уменьшения операций по генерированию тайлов.
Для того, чтобы кэширование было осуществлено на одном из вышеназванных уровней, необходимо предоставить механизму кэширования соответствующую информацию.
Если ваш тайловый сервер реализован на одном из языков написания сценариев или языке программирования, то вы можете самостоятельно указать необходимые HTTP-заголовки, отвечающие за кэширование.
Такие заголовки в версиях HTTP 1.0 и HTTP 1.1 отличаются и поскольку оба протокола активно используются, то важно указывать заголовки для обоих версий.
Для HTTP 1.0 используйте заголовок "Expires". Если вы рассчитываете, что ваши данные будут изменяться не чаще, чем раз в неделю, установите значение заголовка Expires в дату, отстоящую от текущей на одну неделю. Например, если 1 Января 2007 вы захотели установить данный заголовок, то, используя PHP, это бы выглядело следующим образом:
header('Expires: Mon, 8 Jan 2007 14:57:12 GMT');
Если вы не хотите каждую неделю изменять данный заголовок, то эту процедуру можно автоматизировать:
header('Expires: ' . gmdate('D, j M Y H:i:s T', time() + 7 * 24 * 60 * 60)); // текущее время + 7 дней в секундах
Для HTTP 1.1 используйте заголовок "Cache-control". В отличие от старого "Expires", "Cache-control" не имеет привязку ко времени, а просто указывается период обновления данных, что позволяет решить проблему синхронизации времени, возникающую при использовании "Expires".
header('Cache-Control: max-age=86400, must-revalidate'); header('Cache-Control: ' . 7 * 24 * 60 * 60 );
Информацию о заголовках, используемых для кэширования в HTTP 1.1, можно найти в W3.org specification.
Implementing Cacheability
URLs That are Actually Scripts
Использование граней
Элемент "face-id", расположенный внутри <TileMap>, может использоваться различными клиентскими приложениями. Каким именно образом он используется, описано здесь.
Заполнить информацию о поддержке данной возможности...
Список ПО, реализующего поддержку TMS
Серверы
- TileCache: http://www.tilecache.org/
Клиенты
- Worldkit: http://worldkit.org/tilemap/
- Openlayers: http://openlayers.org/
- Cadcorp SIS: Screenshot
- Merkaartor - редактор данных OpenStreetMap, позволяет использовать TMS-слои в качестве подложек: Отметим, что нумерация тайлов в тайловой сетке Google Maps начинается с c с тайла 0,0, расположенного в верхнем левом углу, а не в нижнем левом.
Возвращаемые коды ошибок
Если ваш тайловый сервер представлен статичным набором файлов, то Веб-сервер будет самостоятельно устанавливать коды ответов в том числе и когда клиент запросит несуществующий ресурс или возникнет ошибка на стороне сервера.
Если же ваш тайловый сервер представляет из себя динамическое Веб-приложение, то вам необходимо самостоятельно устанавливать HTTP-коды ответов. В противном случае даже при возникновении ошибки сервер HTTP будет возвращать XML документ с кодом ответа 200 (OK), что является неверным. На PHP функция, возвращающая информацию об ошибке может выглядеть следующим образом:
header("HTTP/1.0 404 Not Found"); header("Content-type: text/xml"); print "<?xml version='1.0' ?>"; print "<TileMapServerErrror>"; print "<Message>You requested a map tile [ $path_info ] that does not exist.</Message>"; print "</TileMapServerError>";
Отметим, что помимо установки кода ответа в данном примере также устанавливается соответствующее значение Content-type. Также обратите внимание на отсутствие заголовков, отвечающих за кэширование. Это связано с тем, что не следует кэшировать ответы сервера, содержашие сообщения об ошибках.
Дополнительная информация
- What is REST
- OpenStreetMap's "Slippy tiles" Отметим, что нумерация тайлов в тайловой сетке Google Maps начинается с верхнего левого угла, а не с нижнего левого.