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 -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org