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

Обсуждение материалов сайта: вопросы, замечания, предложения
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 06 апр 2013, 15:42

Написал статью. Приглашаю к обсуждению.

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

P.S. статья опубликована.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8902
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 642
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 06 апр 2013, 15:58

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

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 06 апр 2013, 16:01

1. Добавил.
2. Это стандартная возможность HTTP-сервера (mapping URL to file system), даже не знаю что тут написать, есть варианты?
3. Добавил.
4. Чуть дописал.
5. Поправил, не понял откуда оно вылезло.
Spatial is now, more than ever, just another column- The Geometry Column.

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Статьи: 4
Проекты: 3
Репутация: 55
Откуда: Королев

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

Сообщение yellow-sky » 07 апр 2013, 10:46

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

KolesovDmitry
Гуру
Сообщения: 806
Зарегистрирован: 22 авг 2007, 14:58
Статьи: 18
Проекты: 4
Репутация: 116
Откуда: Казань

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

Сообщение KolesovDmitry » 07 апр 2013, 11:51

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 8902
Зарегистрирован: 06 окт 2003, 20:20
Статьи: 231
Проекты: 12/6
Репутация: 642
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 07 апр 2013, 12:15

Денис, я поправил как мне было бы более понятно, если не согласен, просто откати как было.
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 07 апр 2013, 12:24

KolesovDmitry писал(а):Наверное, где-то вначале стоит сделать замечание, что в статье рассматриваются примеры с использованием python (В статье встречаются моменты, которые вытекают не из особенностей тайловых сервисов, а из конкретной питоновской реализации -- например, фрагмент про настройку виртуального окружения. Соответственно, такие фрагменты лучше сопровождать пояснением, что это конкретная реализация, на других языках будет иначе).
Замечание по делу, спасибо. Просто когда переносил свой текст в вики упустил одно предложение как раз касающееся питона, сейчас дописал.
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 07 апр 2013, 12:32

Максим Дубинин писал(а):Денис, я поправил как мне было бы более понятно, если не согласен, просто откати как было.
Спасибо, если считаешь, что так будет понятнее, то оставляем.
Spatial is now, more than ever, just another column- The Geometry Column.

любитель
Новоприбывший
Сообщения: 11
Зарегистрирован: 05 окт 2009, 16:27
Репутация: 0

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

Сообщение любитель » 07 июн 2013, 11:05

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

shush
Новоприбывший
Сообщения: 3
Зарегистрирован: 04 авг 2013, 22:41
Репутация: 0
Откуда: Минск

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

Сообщение shush » 11 авг 2013, 12:42

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 12 авг 2013, 05:24

любитель писал(а):Ожидаются ли подобные статьи про "смешанный" сервер ?
Что вы понимаете под "смешанным" сервером?
shush писал(а):Было бы очень интересно узнать о принципах кеширования тайлов и "других полезных функциях".
Что именно вам интересно?
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
gala-kt
Участник
Сообщения: 89
Зарегистрирован: 26 июл 2010, 12:05
Статьи: 1
Репутация: 6
Откуда: Санкт-Петербург

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

Сообщение gala-kt » 23 янв 2014, 12:25

А нельзя ли опубликовать целостный Python-код для описанной функции tms? В чайниковой голове кусками теряется восприятие..

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3308
Зарегистрирован: 11 апр 2008, 21:09
Статьи: 33
Проекты: 9
Репутация: 488
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 23 янв 2014, 17:45

Там всего два куска, сложите их вместе и все. Можете сюда потом выложить, что именно не понятно?

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
gala-kt
Участник
Сообщения: 89
Зарегистрирован: 26 июл 2010, 12:05
Статьи: 1
Репутация: 6
Откуда: Санкт-Петербург

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

Сообщение gala-kt » 07 фев 2014, 09:41

Оказывается, все понятно. Даже разжевано. Синтаксис питона был непонятен.

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


# -*- 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')

Ответить

Вернуться в «Материалы сайта»