Страница 1 из 3
Работа с PostGis и openlayers
Добавлено: 26 июн 2010, 21:10
suGer
Вообщем извините если слишком простые вопроссы задаю, но всё же сам в куче документации не могу разобраться без помощи .

Вообщем еадо создать с помощью PostGresSQL бд хранящую карту, и отобразить эту карту на страницу браузера ! PostGresSQL и postges установил . нашёл вот такой пример по OpenLayers:
<html>
<head>
<title>OpenLayers Example</title>
<script
src="
http://openlayers.org/api/OpenLayers.js"></script>
</head>
<body>
<div style="width:100%; height:100%" id="map"></div>
<script defer="defer" type="text/javascript">
var map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
"
http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} );
map.addLayer(wms);
map.zoomToMaxExtent();
</script>
</body>
</html>
Теперь самое гдавное: сдесь он грузит как я понял слои карты с ресурса "
http://labs.metacarta.com/wms/vmap0" с расширением WMS. Вопросы:
1. Как забить карты в БД с помощтю PostGresSQL и под каким расширением из сохранять ?
2. Как подключить через openlayers карту из этой БД ?
Заранее признателен за помощ !

Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 26 июн 2010, 22:59
Denis Rykov
WMS - это не расширение, это протокол.
Для отображения данных PostGIS в OL нужно загрузить исходные данные в PostGIS, например через shp2pgsql
http://gis-lab.info/qa/postgis-work.html#03, поднять WMS, используя один из картографических серверов (MapServer, GeoServer и т.п.) -
http://gis-lab.info/qa/mapserver-wms.html и
http://gis-lab.info/qa/postgis-mapserver.html, а затем уже в OL подключить WMS слой. Я делал так:
http://gis-lab.info/qa/ol-search.html
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 00:45
suGer
Спасибо ! Буду разбираться !
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 19:45
suGer
Проблемма: не работает инструкция
SET PATH="C:\Program Files\PostgreSQL\8.4\bin"
shp2pgsql -i -D -s 4326 bnd-political-boundary-a.shp bnd-political-boundary-a > bnd-political-boundary-a.sql
psql -U postgres -f bnd-political-boundary-a.sql -d postgis
т.е. запускается, но ничего не создаётся...
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 19:49
suGer
И ещё где взять shp файл карты, а то в катологе postgreSQL таких нет !
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 20:30
manisha
Если шейпов у вас нет, то конвертацию их запускать бесполезно, разве нет?
VMap0 можно здесь взять
http://gis-lab.info/qa/vmap0.html
В команде пропишите полный путь к шейпу, если он у вас не в текущей директории.
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 20:51
suGer
Так как все шейпы весят больше 100mb что для меня многовато, то я скачал "границы зон в формате Arcview shapefile)" и оттуда закинул в папку >>PostgreSQL>8.4>bin> файл continental-tiling.shp, переделал батник:
SET PATH="C:\Program Files\PostgreSQL\8.4\bin"
shp2pgsql -i -D -s 4326 continental-tiling.shp continental-tiling> continental-tiling.sql
psql -U postgres -f continental-tiling.sql -d postgis
В итоге в папке батника создаётся continental-tiling.sql размером 0 байт, a в таблицы ничего не добавляется естественно... Всё таки надо качать 100 метровые версии по ссылке или я просто не так что то сделал ?
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 21:05
Denis Rykov
Шейп - это не один файл.
Re: Работа с PostGis и openlayers [Новичок]
Добавлено: 27 июн 2010, 21:16
suGer
проблемма решеня , затупил кое-где.
Re: Работа с PostGis и openlayers
Добавлено: 28 июн 2010, 13:18
suGer
Немного назобрался в MapServer ! Возникли следуюшие проблемы:
скачал пример шейпов вот такой
gis-lab.info/other/mapserver-begin-example.zip , пытаемся забить например Poltava10_Vegetation_region в таблицу PostGreSQL:
Код: Выделить всё
SET PATH="C:\Program Files\PostgreSQL\8.4\bin\"
shp2pgsql -i -D -s 4326 Poltava10_Vegetation_region.shp Poltava10_Vegetation_region> Poltava10_Vegetation_region.sql
psql -U postgres -f Poltava10_Vegetation_region.sql -d postgis
вот что получаем :

Может кто скинет рабочий шейп для примера

Re: Работа с PostGis и openlayers
Добавлено: 28 июн 2010, 18:06
Denis Rykov
Шейп в порядке, все грузится без проблем.
Кодировка cp1251, что нужно указать при выгрузке в sql, так как по дефолту используется utf-8:
Код: Выделить всё
shp2pgsql -i -D -s 4326 -W cp1251 Poltava10_Vegetation_region.shp Poltava10_Vegetation_region> Poltava10_Vegetation_region.sql
Ну и непосредственно загрузка в базу:
Код: Выделить всё
psql -U postgres -f Poltava10_Vegetation_region.sql -d postgis
Re: Работа с PostGis и openlayers
Добавлено: 28 июн 2010, 20:51
suGer
Спасибо! Создаётся ! Сразу же проблемма ( как они мне надоели ):
Код: Выделить всё
MAP
IMAGETYPE GIF
EXTENT 77.8924 50.6194 87.2278 54.4701
SIZE 800 600
LAYER
NAME "boundary"
CONNECTIONTYPE postgis
CONNECTION "user=postgres password=thegame dbname=postgis host=localhost"
DATA "the_geom from Poltava10_Vegetation_region"
TYPE POLYGON
CLASS
COLOR 200 120 123
END
END
END
этим мапником вывожу на страницу, но выдаёт бред
Код: Выделить всё
msDrawMap(): Image handling error. Failed to draw layer named 'boundary'. msPostGISLayerWhichShapes(): Query error. Error (ERROR: column "oid" does not exist LINE 1: ...ction(force_2d("the_geom")),'NDR'),'hex') as geom,"oid" from... ^ ) executing query: select encode(AsBinary(force_collection(force_2d("the_geom")),'NDR'),'hex') as geom,"oid" from Poltava10_Vegetation_region where the_geom && GeomFromText('POLYGON((77.8924 49.0454354818523,77.8924 56.0440645181477,87.2278 56.0440645181477,87.2278 49.0454354818523,77.8924 49.0454354818523))',find_srid('','Poltava10_Vegetation_region','the_geom'))
и вот почему: Таблица должна иметь столбец OID однощначно определяющий поля , при ручном создании таблицы там ставится галочка для создания, а при загрузке через батник создаётся таблица без OID

как мне этот oid туда впихнуть ?
Re: Работа с PostGis и openlayers
Добавлено: 29 июн 2010, 07:21
Denis Rykov
Если вы внимательно читали статьи по тем ссылкам, что я привел, то могли увидеть следующее:
Также можно настроить PostgreSQL таким образом, чтобы вновь создаваемые таблицы посредством клиента psql автоматически включали столбец OID. Для этого в файле postgresql.conf, расположенном по умолчанию в C:\Program Files\PostgreSQL\8.3\data\ найдите строку default_with_oids = on, раскомментируйте ее и замените на default_with_oids = on.
Пробовали? Не помогло?
Re: Работа с PostGis и openlayers
Добавлено: 29 июн 2010, 12:28
suGer
Читал, давно сделал, не помогает (((
Re: Работа с PostGis и openlayers
Добавлено: 29 июн 2010, 14:14
suGer
Вообщем и эту проблемму решил сам путём прямого изменения параметров в postgreSQL ( там меню есть специальное).
Сейчас обробатывает такой map:
Код: Выделить всё
MAP
IMAGETYPE GIF
EXTENT 77.8924 50.6194 87.2278 54.4701
SIZE 300 300
IMAGECOLOR 255 255 100
LAYER
NAME "boundary"
CONNECTIONTYPE postgis
CONNECTION "user=postgres password=thegame dbname=postgis host=localhost"
DATA "the_geom from Poltava10_Vegetation_region using unique gid using srid=4326"
TYPE POLYGON
CLASS
COLOR 12 200 12
END
END
END
Таким запросом:
Код: Выделить всё
http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/postgis.map&layer=boundary&mode=map
ошибок не выдаёт, но не отображает саму картинку, а только фоновый квадрат (IMAGECOLOR 255 255 100) желтого цвета, странно ведь шейп рабочий... srid тоже добавил в таблицу. может быть проблемма в том что в geometry_columns oid для моей таблицы стоит 17735, а в таблице столбец oid начинается с 17739
если так то как это исправить ?