Re: выбор PDA
- To: debian-russian@lists.debian.org
- Subject: Re: выбор PDA
- From: Andrey Kiselev <dron@ak4719.spb.edu>
- Date: Wed, 30 Sep 2009 17:15:09 +0400
- Message-id: <[🔎] 20090930131509.GA30260@ak4719.spb.edu>
- Mail-followup-to: debian-russian@lists.debian.org
- In-reply-to: <20090923104213.GB400@wagner.pp.ru>
- References: <1253514932.21691.28.camel@everest.agg> <4AB72511.6070502@gmail.com> <20090921175403.11b25e2f@biker.satgate.net> <22969471@tigger.lan.cryptocom.ru> <20090922101848.73947eef@biker.satgate.net> <44390467@wizzle.ran.pp.ru> <20090922125135.GB4360@wagner.pp.ru> <20090923091203.GA1463@ak4719.spb.edu> <20090923104213.GB400@wagner.pp.ru>
On Wed, Sep 23, 2009 at 02:42:13PM +0400, Victor Wagner wrote:
> > Сделать это можно с помощью личного mapserver'а. Только изображение должно
> > быть привязаным.
>
> А в первую очередь - трансформированным в правильную проекцию.
В первую очередь --- привязанным. Привязанное изображение можно уже
оттрансформировать куда угодно.
> Потому что maemo-mapper нифига не работает с проекцией Гаусса-Крюгера. И в
> datum WGS84 неплохо бы перевести из системы координат 42-года. А то в
> 100-тысячном, и тем более, более крупных масштабах, расхождения уже заметны.
maemo-mapper вообще достаточно простая штука. В идеале мне бы хотелось, чтобы
он был клиентом WMS.
> Проблема привязки опять же есть. У Власенко была какая-то хрень, которая
> автоматически генерировала привязки в формате OZI для сканированных листов.
> Но выкачать эти привязки я у него успел, а потом СБУ его сайт прикрыла.
Если есть возможность получить привязки в формате OZI для сканированных карт,
то это надо непременно сделать, иначе эти карты только глазами рассматривать.
Ну, или самостоятельно привязывать.
> > Можно добавить векторы, разные слои и т.п. Карту либо кешировать
> > заранее, либо выставить наружу и обращаться по мере необходимости.
>
> > Если есть интерес, то я могу вкратце рассказать, как это сделать.
>
> Интерес есть. Зря я что-ли собрал самый полный из имеющихся в интернете
> архив сканированных топокарт на северную половину Европейской части.
Запустить личный WMS-сервер достаточно просто. Я покажу на примере. Разумеется,
за кадром остаются вопросы по настройке веб-сервера, cgi-bin, а также большая
часть терминологии и предметной области.
Используем следующие данные:
1. Векторные карты отсюда:
http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhs/oldversions/version1.5/shapefiles/
Это контуры побережий, озёра, острова. Формат --- ESRI Shapefile.
2. Растровый композит Blue Marble NG:
http://neo.sci.gsfc.nasa.gov/Search.html?coverage=global&duration=day&startMonth=&startDay=&startYear=&endMonth=&endDay=&endYear=&sourceDatasetId=&maxLat=&minLon=&maxLon=&minLat=&size=full&palette=rgb&format=JPEG&w=&h=&ssn=&ssw=&sse=&sss=&datasetId=BlueMarbleNG-TB
(флешем пользоваться не надо, в окошке "Download Options" выбрать
"Full"+"Color"+"GEOTIFF" и нажать "Get Image").
Устанавливаем mapserver:
# apt-get install cgi-mapserver
Всё, что я описываю, работает с mapserver'ом из testing, какая версия сейчас в
stable я не знаю, мне всегда требуется самый новый, но в testing он сейчас
подходящий.
Кладём карты в каталог, доступный веб-серверу, например,
/var/www/maps/blue-marble и пишем конфигурационный MAP-файл для mapserver'а.
$ ls /var/www/maps/blue-marble/
526308rgb.TIFF gshhs_land.sbn gshhs_land.shx hshhs_lake.sbx
blue-marble.map gshhs_land.sbx hshhs_lake.dbf hshhs_lake.shp
gshhs_land.dbf gshhs_land.shp hshhs_lake.prj hshhs_lake.shp.xml
gshhs_land.prj gshhs_land.shp.xml hshhs_lake.sbn hshhs_lake.shx
Для этого примера я взял только контуры побережий и озёр, 526308rgb.TIFF ---
это Blue Marble. MAP-файл представляет из себя следующее:
$ cat /var/www/maps/blue-marble/blue-marble.map
MAP
NAME BLUE_MARBLE
STATUS ON
SHAPEPATH "."
IMAGECOLOR 255 255 255
IMAGETYPE PNG
OUTPUTFORMAT
NAME png
DRIVER "GD/PNG"
MIMETYPE "image/png"
IMAGEMODE RGBA
TRANSPARENT ON
EXTENSION "png"
END
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "blue-marble"
TYPE RASTER
STATUS OFF
DATA "526308rgb.TIFF"
END
LAYER
NAME "land"
TYPE LINE
STATUS OFF
DATA gshhs_land
CLASS
NAME "Coastline"
STYLE
COLOR 0 255 0
END
END
END
LAYER
NAME "lake"
TYPE LINE
STATUS OFF
DATA hshhs_lake
CLASS
NAME "Lakes"
STYLE
COLOR 0 0 255
END
END
END
END
Это простейшая конфигурация, позволяющая обращаться к нашему серверу по
протоколу WMS, для полноценного Mapserver'а со всей клиентской обвязкой её
недостаточно. Но для maemo-mapper'а более чем. Здесь мы описали три слоя:
"blue-marble" с растром, "land" с контурами побережий и "lake" с контурами
озёр. WMS --- это протокол, стандартизованный консорциумом OpenGIS для работы с
простыми серверами карт, доступными по HTTP. Спецификация протокола доступна на
сайте OGC.
Проверяем функционирование:
$ wget -O - "http://127.0.0.1/cgi-bin/mapserv?map=/var/www/maps/blue-marble/blue-marble.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities"
Если всё настроено правильно и работает, то эта команда должна вывалить XML на
два-три экрана с описанием возможностей нашего сервера и данного набора данных.
Если что-то не так, то XML будет совсем коротким и в нём будет содержаться
сообщение об ошибке с кратким её описанием.
Если всё заработало как надо ,то попробуем получить картинку:
$ wget -O - "http://127.0.0.1/cgi-bin/mapserv?map=/var/www/maps/blue-marble/blue-marble.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=blue-marble,land,lake&srs=EPSG:4326&bbox=25,55,35,65&format=image/png&width=800&height=400" |display -
На картинке должна быть Ленинградская область, Финский залив, Ладожское озеро.
На растр наложены синие контуры озёр и зелёные контуры побережий. Понятно, что
этот запрос можно забить и в строку браузера.
Прежде, чем этот источник можно будет использовать в maemo-mapper, надо
установить на планшет PROJ.4. Взять его можно здесь:
http://talk.maemo.org/showpost.php?p=248936&postcount=122
Теперь добавляем репозиторий в maemo-mapper. В качестве URL указываем:
"http://xxx.xxx.xxx.xxx/cgi-bin/mapserv?map=/var/www/maps/blue-marble/blue-marble.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=blue-marble,land,lake&srs=EPSG:4326&bbox=%.6f,%.6f,%.6f,%.6f&format=image/png&width=256&height=256"
ВАЖНО! Не в коем случае не забыть указать реальный IP сервера. Если забыть это
сделать и оставить 127.0.0.1, то maemo-mapper будет падать сразу же при
открытии этого репозитория, не давая возможности сменить его на другой. Во
всяком случае мой именно так поступает. Придётся править настройки
gconftool'ом.
Если всё сделано правильно и работает, то мы должны увидеть наш растр и контуры
на нём. Карты наши мелкомасштабные, так что увеличение надо сделать поменьше.
Можно убрать слои "lake" и "land" из основного URL этого репозитория и добавить
их в качестве слоёв, привязанных к репозиторию с соответствующими URL'ами:
"http://xxx.xxx.xxx.xxx/cgi-bin/mapserv?map=/var/www/maps/blue-marble/blue-marble.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=land&srs=EPSG:4326&bbox=%.6f,%.6f,%.6f,%.6f&format=image/png&width=256&height=256"
http://xxx.xxx.xxx.xxx/cgi-bin/mapserv?map=/var/www/maps/blue-marble/blue-marble.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=lake&srs=EPSG:4326&bbox=%.6f,%.6f,%.6f,%.6f&format=image/png&width=256&height=256"
Тогда их отображение можно включать/выключать в меню "Просмотр->Слои".
Вот, собственно, и всё.
Сканированные карты тоже можно использовать. Например, берём карту вместе с
привязкой (файл .MAP для OZI Explorer) тут:
http://nav.lom.name/maps_scan/Q35/001m/
Трансформируем её в нужную нам проекцию:
$ gdalwarp -t_srs epsg:4326 001m--q35_36.gif 001m--q35_36.tif
Для того, чтобы это сработало, потребуется взять самый распоследний GDAL из SVN
и собрать самостоятельно. Параметры утилиты gdalwarp, возможности
интерпояляции, увеличения разрешения и т.п. я оставляю за кадром, для нас
сейчас этот простейший вариант вполне подойдёт. Привязка будет прочитана из
файла .MAP, который должен находиться в том же каталоге, что и растровая карта.
Подкладываем карту mapserver'у:
$ ls /var/www/maps/nw/
001m--q35_36.tif nw.map
$ cat /var/www/maps/nw/nw.map
MAP
NAME NORTH-WEST
STATUS ON
SHAPEPATH "."
IMAGECOLOR 255 255 255
IMAGETYPE PNG
OUTPUTFORMAT
NAME png
DRIVER "GD/PNG"
MIMETYPE "image/png"
IMAGEMODE RGBA
TRANSPARENT ON
EXTENSION "png"
END
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "topo"
TYPE RASTER
STATUS OFF
DATA "001m--q35_36.tif"
END
END
Проверяем:
$ wget -O - "http://127.0.0.1/cgi-bin/mapserv?map=/var/www/maps/nw/nw.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=topo&srs=EPSG:4326&bbox=22,63,38,69&format=image/png&width=800&height=400"
Добавляем новый репозиторий maemo-mapper'у со следующим URL'ом:
"http://xxx.xxx.xxx.xxx/cgi-bin/mapserv?map=/var/www/maps/nw/nw.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&layers=topo&srs=EPSG:4326&bbox=%.6f,%.6f,%.6f,%.6f&format=image/png&width=256&height=256"
--
Andrey V. Kiselev
Reply to: