mapserver слои
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Что значит локально лежащий, map-файл лежит на web-сервере.
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
и в параметре я указываю где на этом веб сервере искать mapserverу map файл.. так вот.... так мне и не понятно как сделать так, чтоб от параметров запроса по-разному отображался map файл..
если я правильно понял Ваш совет....
как сделать так, чтоб файл hrllo.map шаблонизировался..
или я не правильно понял...?
если я правильно понял Ваш совет....
Код: Выделить всё
http://my.host.com:8880/cgi-bin/mapserv?map=/var/www/map2/hrllo.map&mode=map
или я не правильно понял...?
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Вообще-то описанный вами способ (mode=map) работы с MapServer давно устарел, используйте вместо этого стандартный приём - опубликуйте данные по WMS. Что такое OWS можно прочитать здесь, как поднять WMS - здесь (хотя инструкция довольно старая (может быть скоро обновлю) и некоторые параметры поменялись в новых версиях MapServer, но общий смысл понятен, если что-то не ясно - смотрите официальную документацию или спрашивайте здесь.
Чтобы шаблонизировать map-файл, клиент не должен ничего о нём знать, то есть в строке запроса не должно быть никаких ссылок на него. Вместо этого вам нужен враппер, то есть некоторый скрипт, который будет принимать запрос от клиента, формировать нужный map-файл на основе переданных параметров и в соответствии с этим отдавать результат обратно.
Вот тут четко объяснено для чего нужен враппер:
Чтобы шаблонизировать map-файл, клиент не должен ничего о нём знать, то есть в строке запроса не должно быть никаких ссылок на него. Вместо этого вам нужен враппер, то есть некоторый скрипт, который будет принимать запрос от клиента, формировать нужный map-файл на основе переданных параметров и в соответствии с этим отдавать результат обратно.
Вот тут четко объяснено для чего нужен враппер:
Вот реальный пример из одного проекта, использующий python MapScript. Враппер (view_ows()) принимает на входе 2 параметра - SETTINGS и ITEMS_CLICKED, затем использует эти параметры для формирования map-файла (configure()) и используя таким образом сформированный map-файл выдаем ответ клиенту:Frank Warmerdam писал(а):For the WMS service itself MapServer already handles the GET and POST requests for the various requests (GetCapabilities, GetMap, etc). The wrapper script is basically to predefine a few things like the location of the map file that you might not want to normally expose to the end user.
There are situations in which you might want to customize your map definition based on additional parameters passed to your service or otherwise do special stuff for some kinds of WMS requests. To support some of these use cases I implemented the so called "WxS mapscript wrapper" mechanism. This makes it possible to write a python wrapper that customizes WMS, WFS, and other services to some degree or even radically transorms incoming request into something like a WMS request with interactions with the map object.
Код: Выделить всё
def configure(settings, **kwargs):
template_file = settings['mapserver.mapfile']
_temp_mapfile = NamedTemporaryFile(suffix=".map",delete=False)
template = Template(filename=template_file)
buf = StringIO()
ctx = Context(buf,
onlineresource=settings['mapserver.onlineresource'],
connection=settings['mapserver.connection'],
symbolset = settings['mapserver.symbolset'],
map_settings=kwargs['map_settings'],
items_clicked=kwargs['items_clicked'])
template.render_context(ctx)
_temp_mapfile.write(buf.getvalue())
_temp_mapfile.flush()
return _temp_mapfile.name
@view_config(route_name="mapserver.ows")
def view_ows(request):
import mapscript
ows_req = mapscript.OWSRequest()
for k,v in request.params.items():
ows_req.setParameter(k, urllib.unquote(v))
_settings = request.params.get('SETTINGS', '[]')
_items_clicked = request.params.get('ITEMS_CLICKED', '[]')
map_obj = mapscript.mapObj(configure(request.registry.settings,\
items_clicked=json.loads(_items_clicked),\
map_settings=json.loads(_settings)))
mapscript.msIO_installStdoutToBuffer()
map_obj.OWSDispatch(ows_req)
content_type = mapscript.msIO_stripStdoutBufferContentType()
content = mapscript.msIO_getStdoutBufferBytes()
return Response(content, content_type=content_type)
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
нам сделали слой растровый - фотографии со спутника
там три файла
.ige - 4.3Gb
.img - 19Kb
.rrd - 1.2Gb
в arcGIS оно открывается.
как к этому слою обращаться в map файле? или в какой преобразовать?
п.с. вроде еще должны его оптимизировать нам, но может это мы и сами могли бы сделать... к примеру при помощи arcGIS, или gdal ?
там три файла
.ige - 4.3Gb
.img - 19Kb
.rrd - 1.2Gb
в arcGIS оно открывается.
как к этому слою обращаться в map файле? или в какой преобразовать?
п.с. вроде еще должны его оптимизировать нам, но может это мы и сами могли бы сделать... к примеру при помощи arcGIS, или gdal ?
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Вроде GDAL понимает этот формат, так что проблем не должно возникнуть. Кроме публикации по WMS - растр можно предварительно нарезать на тайлы и отдавать по TMS.
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
в результате получился у меня wms сервер с адресом при помощи qgis я его открываю и смотрю.
не получается его отрисовать с помощью OpenLayers
пробую двумя вариантами из примеров, но она не дают результата
как правильно увидеть масштабируемую карты в OL ?
Код: Выделить всё
http://192.168.56.193/cgi-bin/mapserv?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities&map=/var/www/map2/fldwms.map
не получается его отрисовать с помощью OpenLayers
пробую двумя вариантами из примеров, но она не дают результата
Код: Выделить всё
layer = new OpenLayers.Layer.MapServer( "World Map","http://192.168.56.193/cgi-bin/mapserv", {map: '/var/www/map2/fldwms.map'} );
layer = new OpenLayers.Layer.WMS( "NYC","http://192.168.56.193/cgi-bin/mapserv?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetCapabilities&map=/var/www/map2/fldwms.map",{layers: "'fld,rd,rstr'"});
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Уж если опубликовали по WMS, то никакие OpenLayers.Layer.MapServer не нужны. Второй вариант ближе к истине, но явная ошибка - REQUEST=GetCapabilities - это вообще откуда здесь взялось?? для запроса карты используется запрос GetMap, но и его и SERVICE=WMS&VERSION=1.1.1 указывать не нужно, за вас это сделает OL самостоятельно. В вашем примере URL должен выглядеть просто как
У OL же хорошая документация и примеров использования вагон, посмотрите в примере как подключается WMS и сравните с тем, как это сделано у вас.
Код: Выделить всё
http://192.168.56.193/cgi-bin/mapserv?map=/var/www/map2/fldwms.map
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
спасибо большое!
получилось.. теперь пытаюсь с помощью OL привязывать на нижний слой google map
ключ для отладки карты google для работы в локалке есть??
получилось.. теперь пытаюсь с помощью OL привязывать на нижний слой google map
ключ для отладки карты google для работы в локалке есть??
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Что за ключ? Если вы про API-key, то в последних версиях он не используется.
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
да, я думал он еще применяется..
но такой код не работает
но такой код не работает
Код: Выделить всё
var gphy = new OpenLayers.Layer.Google(
"Google Physical",
{type: G_PHYSICAL_MAP}
);
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Код: Выделить всё
var lay_goo = new OpenLayers.Layer.Google('Google', {
type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22, sphericalMercator: true, opacity: 0.5
});
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
с этим заработало, но в зависимости от выбора порядка для слоев рисует разные значения.
возможно для map файла указать прозрачный слой под моим растром, чтоб снизу там была google карта?
IMAGECOLOR 222 255 200 # этот параметр заменить прозрачным, под которым будет гугл карта?
map.addLayers([layer, lay_goo]);
map.addLayers([lay_goo, layer]);
на гугл карте еще вылетает окошко постоянно.
возможно для map файла указать прозрачный слой под моим растром, чтоб снизу там была google карта?
IMAGECOLOR 222 255 200 # этот параметр заменить прозрачным, под которым будет гугл карта?
map.addLayers([layer, lay_goo]);
map.addLayers([lay_goo, layer]);
на гугл карте еще вылетает окошко постоянно.
КОЖЗГСФ
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
выложил послднюю не до конца рабочую версию в инет для Ваших замечаний в свою сторону..
http://ameno.control.ua/ol/wms/index1.html
п.с. там js с кучей комментариев..
http://ameno.control.ua/ol/wms/index1.html
п.с. там js с кучей комментариев..
КОЖЗГСФ
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: mapserver слои
Чтобы не появлялось окна из гугла, нужно при подключении их API явно указывать версию:
Какие еще вопросы?
Код: Выделить всё
http://maps.google.com/maps/api/js?v=3.6&sensor=false
Spatial is now, more than ever, just another column- The Geometry Column.
- qnx
- Участник
- Сообщения: 61
- Зарегистрирован: 13 апр 2012, 12:10
- Репутация: 0
- Откуда: город-герой Киев
Re: mapserver слои
под слоем моего растра, создаваемым wms mapserverom не видно гугл карты, хотя в мап файле я сделал прозрачность для подложки
IMAGECOLOR -1 -1 -1
IMAGECOLOR -1 -1 -1
КОЖЗГСФ
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя