[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: выбор PDA



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: