TWMS - кеширующий тайловый WMS-сeрвер

Страница проекта: http://code.google.com/p/twms/
wiki (рецепты по установке): http://wiki.openstreetmap.org/wiki/TWMS

Страница на ohloh: https://www.ohloh.net/p/twms/

Тут - делимся мнениями, рецептами, отзывами.

Сборка под винду:
http://narod.ru/disk/16906073000/twms-win32.zip.html

Как пользоваться: распаковываем куда-нибудь, запускаем index.exe (да, странное название пока что у бинарника). Кэширует данные он в каталог cache, который находится рядом с экзешником.
По дефолту порт 8080, соответственно пути у WMS будут http://localhost:8080/?layer=
Можно указать другой порт, запустив с параметром командной строки с номером порта, например index.exe 8888. Можно принимать соединения только с локалхоста, запустив как index.exe 127.0.0.1:8080.

По-идее эта сборка не должна требовать питон и либы, всё уже есть внутри встроенное. Устанавливать ничего не надо.

Собрано из моего форка twms, где интерфейс вебсервера переделан из mod_python, который был в оригинальном twms, на фреймворк web.py. Адрес форка: http://code.google.com/r/incredibleangst-twms-webpy/
В виндовой версии используется встроенный в web.py вебсервер, но web.py по идее поддерживает и другие интерфейсы, например wsgi и fastcgi.

Виндовую версию с экзешниками можно собрать, запустив setup.py py2exe. Для этого потребуются либы: PIL (python-imaging), pyproj и py2exe.

А если несколько хочется серверов разных? Использовать их по очереди.
Судя по тому, что
“распаковываем куда-нибудь […] каталог cache, который находится рядом с экзешником.”
можно пускать из разных папок разно-настроенные версии? (на разные порты, на разные wms-сервера).
Или я усложнил?

Предусмотреть какой-нибудь TTL для кеша желания нет? Или я чего-то не нашел?

coolkaas, twms кеширует не wms. он кеширует тайлы. в слоях есть http://127.0.0.1:8080/?layers=yhsat& для яху и http://127.0.0.1:8080/?layers=irs& для IRS.

Нда, а я уже апач настроил :3

Краткий мануал по установке twms на Windows XP

Устанавливаем:

apache
python 2.5 (!!! mod_python под python 2.6 не существует)
mod_python для python 2.5
PIL
pyproj

При написании этой инструкции использовались следующие версии:

apache_2.2.14-win32-x86-openssl-0.9.8k.msi
python-2.5.4.msi
mod_python-3.3.1.win32-py2.5-Apache2.2.exe
PIL-1.1.6.win32-py2.5.exe
pyproj-1.8.5.win32-py2.5.exe

Все установки производим с вариантами по умолчанию.

Открываем файл C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf.
Находим там множество строк, начинающихся с LoadModule. После последней добавляем:

LoadModule python_module modules/mod_python.so

Далее в конец этого же файла дописываем:

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
    DirectoryIndex index.py
    AddHandler mod_python .py
    PythonHandler index
    PythonDebug on
</Directory>

Скачиваем все файлы от twms отсюда http://twms.googlecode.com/hg/ и кладём в
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs.

Далее правим config.py от twms:

  1. Находим и исправляем в начале файла tiles_cache, например, так:

tiles_cache = “d:/twms-cache/”

  1. Заменяем пути к *_nxt.jpg, например, в функции FetchIrs:

yh_dead_tile = “C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/irs_nxt.jpg”

Перезапускаем apache в Apache Monitor, который можно запустить через трей.

Для проверки пробуем открыть в браузере:

http://localhost/?layers=irs&bbox=38.2645676,56.1453162,39.4603353,56.8057105&srs=EPSG:4326&width=500&height=499

Ссылка на собственный wms в josm: http://localhost/?layers=irs&

Ссылка на собственный wms в fuzzyselect.py:
http://localhost/?layer=irs&format=image/jpeg&force=noresize&width=600&bbox=%s,%s,%s,%s”%tuple(bbox)

Замечательная штука, спасибо.

Под винду оно, конечно, хорошо. А как бы это счастье на линух водрузить? (ASP_14 , fedora_9)
Апачь уже работает, но не силён я в питонах. :frowning:

Kuprienko_Viktor
поставь mod_python и по аналогии с Windows, там принципиальной разницы нет…

А реально заставить его работать через локальный прокси?

Реально:

proxies = {‘http’: ‘http://proxyaddress:8080’}
a = urllib.urlopen( url, proxies=proxies )

сорри, это куда писать надо?

Заменить везде обычный urlopen на urlopen с прокси

Обломался. :frowning: Скрипт пишет, не могу загрузить pyproj, а я так и не нашел в каком пакете оно прячется. Похоже, ни в каком. Вот в Альтлинукс вовсе отдельный пакет для этого модуля, но для 2.6. Мне он не подходит. :frowning:

Скачай и установи pyproj отдельно…

Если работа с TWMS кроме как в josm не предпологается, можно руками выкосить все упоминания pyproj. Он там исключительно для более-менее корректной работы QGIS и друзей.

Из index.py удавил “import pyproj” и строки:

if srs == "EPSG:4326":
   p = pyproj.Proj("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
elif srs == "EPSG:3395":
    p = pyproj.Proj('+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs')
    la1,lo1,la2,lo2 = bbox
    la1,lo1 = p(la1,lo1, inverse=True)
    la2,lo2 = p(la2,lo2, inverse=True)
    bbox = (la1,lo1,la2,lo2)
elif srs == "EPSG:900913":
    p = pyproj.Proj('+proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +no_defs')
    la1,lo1,la2,lo2 = bbox
    la1,lo1 = p(la1,lo1, inverse=True)
    la2,lo2 = p(la2,lo2, inverse=True)
    bbox = (la1,lo1,la2,lo2)

Оно? Вроде работает.
Это просто праздник какой-то! :slight_smile:

С ограничением максимального размера отдаваемого изображения какая-то лажа…

При установке в генте:

Ставим:
www-servers/apache-2.2.14-r1
www-apache/mod_python-3.3.1-r1
dev-python/pyproj-1.8.5
dev-python/imaging-1.1.7

Последний - это и есть PIL.

Ложим в /var/www/localhost/htdocs файлы проекта, взятые с http://twms.googlecode.com/hg/

Патчим конфиг:
mv config.py config.py_def
cat config.py_def|sed “s//var/www/latlon/wms//var/www/localhost/htdocs/g”>config.py

Создаём ди-ю кэша:
mkdir /var/www/localhost/htdocs/cache
chown apache:apache /var/www/localhost/htdocs/cache

В /etc/apache2/httpd.conf добавляем:

LoadModule python_module modules/mod_python.so

<Directory “/var/www/localhost/htdocs/”>
DirectoryIndex index.py
AddHandler mod_python .py
PythonHandler index
PythonDebug on

Ребутаем апач:
/etc/init.d/apache2 restart

В случае merkaartor:
Заходим в tools->WMS Servers editor

Для космоснимков:
Пишем имя: localhost-irs
Server URL: http://localhost/?layers=irs&

Для yahoo:
Пишем имя: localhost-yahoo
Server URL: http://localhost/?layers=yhsat&

Жмём “добавить”

Закрываем.

Нажимаем Ctrl+L - в “Карта” выбираем WMS-adapter и любой и localhost-irs или localhost-yahoo.

П.С. Классная штука! Спасибо! А то утомляло на каждый эвент зума ждать по несколько минут…