Страница 1 из 1

Основы работы динамических TMS-сервисов

Добавлено: 06 апр 2013, 15:42
Denis Rykov
Написал статью. Приглашаю к обсуждению.

------------------------------------------

P.S. статья опубликована.

Re: Основы работы динамических TMS-сервисов

Добавлено: 06 апр 2013, 15:58
Максим Дубинин
1. Понимаю, что дублирование, но начать стоит с определения TMS-сервиса.
2. Можно ли понятнее сформулировать: "HTTP-сервер самостоятельно отображает запрашиваемый URL на структуру файловой системы"
3. После структуры кэша напршивается минимум разъяснений для 1-2-3, и т.д.
4. "Для создания тайлового кэша ..." после этого я бы одним предложением написать в чем суть создания "нарезка растров на фрагменты (тайлы) ...."
5. Я не понял вот это:
для создания сервиса необходимы инструменты, позволяющие следующее:

1. Элемент нумерованного списка
2. Элемент маркированного списка
Остаточная вики-разметка чтоли? :)

Re: Основы работы динамических TMS-сервисов

Добавлено: 06 апр 2013, 16:01
Denis Rykov
1. Добавил.
2. Это стандартная возможность HTTP-сервера (mapping URL to file system), даже не знаю что тут написать, есть варианты?
3. Добавил.
4. Чуть дописал.
5. Поправил, не понял откуда оно вылезло.

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 апр 2013, 10:46
yellow-sky
Статья просто супер! Все просто и ясно. Денис, пиши побольше таких статей.
P.S.
Предлагаю в статьях выделить отдельную группу для тайловых технологий

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 апр 2013, 11:51
KolesovDmitry
Наверное, где-то вначале стоит сделать замечание, что в статье рассматриваются примеры с использованием python (В статье встречаются моменты, которые вытекают не из особенностей тайловых сервисов, а из конкретной питоновской реализации -- например, фрагмент про настройку виртуального окружения. Соответственно, такие фрагменты лучше сопровождать пояснением, что это конкретная реализация, на других языках будет иначе).

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 апр 2013, 12:15
Максим Дубинин
Денис, я поправил как мне было бы более понятно, если не согласен, просто откати как было.

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 апр 2013, 12:24
Denis Rykov
KolesovDmitry писал(а):Наверное, где-то вначале стоит сделать замечание, что в статье рассматриваются примеры с использованием python (В статье встречаются моменты, которые вытекают не из особенностей тайловых сервисов, а из конкретной питоновской реализации -- например, фрагмент про настройку виртуального окружения. Соответственно, такие фрагменты лучше сопровождать пояснением, что это конкретная реализация, на других языках будет иначе).
Замечание по делу, спасибо. Просто когда переносил свой текст в вики упустил одно предложение как раз касающееся питона, сейчас дописал.

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 апр 2013, 12:32
Denis Rykov
Максим Дубинин писал(а):Денис, я поправил как мне было бы более понятно, если не согласен, просто откати как было.
Спасибо, если считаешь, что так будет понятнее, то оставляем.

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 июн 2013, 11:05
любитель
Да, статья хорошая, спасибо.
Ожидаются ли подобные статьи про "смешанный" сервер ?

Re: Основы работы динамических TMS-сервисов

Добавлено: 11 авг 2013, 12:42
shush
Интересно и злободневно (для меня, во всяком случае). Недавно пришлось решать ту же задачу, но вместо рендеринга на ходу пред-рендеренные mbtiles и вместо bottle асинхронный фреймворк tornado.
Было бы очень интересно узнать о принципах кеширования тайлов и "других полезных функциях".

Re: Основы работы динамических TMS-сервисов

Добавлено: 12 авг 2013, 05:24
Denis Rykov
любитель писал(а):Ожидаются ли подобные статьи про "смешанный" сервер ?
Что вы понимаете под "смешанным" сервером?
shush писал(а):Было бы очень интересно узнать о принципах кеширования тайлов и "других полезных функциях".
Что именно вам интересно?

Re: Основы работы динамических TMS-сервисов

Добавлено: 23 янв 2014, 12:25
gala-kt
А нельзя ли опубликовать целостный Python-код для описанной функции tms? В чайниковой голове кусками теряется восприятие..

Re: Основы работы динамических TMS-сервисов

Добавлено: 23 янв 2014, 17:45
Denis Rykov
Там всего два куска, сложите их вместе и все. Можете сюда потом выложить, что именно не понятно?

[ Сообщение с мобильного устройства ]

Re: Основы работы динамических TMS-сервисов

Добавлено: 07 фев 2014, 09:41
gala-kt
Оказывается, все понятно. Даже разжевано. Синтаксис питона был непонятен.

Код: Выделить всё


# -*- encoding: utf-8 -*-
from bottle import route, response, run
import mapnik2 as mapnik

@route('/<service>/1.0.0/altay/<z:int>/<x:int>/<y:int>.png')
def tms(z, x, y, service):

bbox = dict(minx=287157, miny=5613155, maxx=920220, maxy=6045880)

step = max(bbox['maxx']-bbox['minx'], bbox['maxy']-bbox['miny']) / 2**z

extents = dict()

extents['tms'] = (
bbox['minx'] + x*step, bbox['miny'] + y*step,
bbox['minx'] + (x+1)*step, bbox['miny'] + (y+1)*step
)

extents['xyz'] = (
bbox['minx'] + x*step, bbox['maxy'] - (y+1)*step,
bbox['minx'] + (x+1)*step, bbox['maxy'] - y*step
)

tile = dict(width=256, height=256)

m = mapnik.Map(tile['width'], tile['height'])

# Указываем путь, где находится файл с настройками Mapnik
mapnik.load_map(m, '/.../.../mapnik-config.xml')

# Выбираем охват тайла из словаря extents согласно типу запрашиваемого сервиса (tms или xyz)
box = mapnik.Box2d(*extents.get(service))

# Отрисовываем тайл
m.zoom_to_box(box)
im = mapnik.Image(m.width, m.height)
mapnik.render(m, im)
output = im.tostring('png')
response.content_type = 'image/png'


return output

run(host='0.0.0.0', port=8080, server='waitress')