PostgreSQL, PostGIS, Mapnik, OpenLayer

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии

Интересна ли Вам данная тема?

Да
21
95%
Нет
1
5%
 
Всего голосов: 22

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 18 май 2011, 09:56

Здравствуйте уважаемые.
Хочу реализовать связку PostgreSQL, PostGIS, Mapnik, OpenLayer. Пока что удалось установить PostgreSQL, PostGIS, Mapnik, импортировать в мою БД данные осм по регионам (http://gis-lab.info/projects/osm-export.html), но вот редеринг тайлов по средствам питона, из моей БД, не удается. (Демо mapnik-а из БД работает создается png тайл, т.е. выходит, что mapnik со всеми необходимыми модулями и инклудами, установлен и успешно работает.)
Не могу разобраться, что к чему в скрипте, т.е. необходимо рендерить тайлы из моей БД.
Собственно вопрос, как это сделать, каким образом нужно построить мой *.py тайлов, чтобы я мог потом это юзать OpenLayer-ом?

Вот Демо:
postgis_geometry.py

Код: Выделить всё

#!/usr/bin/env python


# Example of reading geometry from a PostGIS table
# Add the sample data in quotes below to a database and then modify the default settings as needed

from mapnik import *

# Database settings
db_params = dict(
	dbname = 'mapnik',
	user = 'postgres',
	table = 'polygon',
	password = '123',
	host = 'localhost'
)

m = Map(256, 256, "+proj=latlong +datum=WGS84")
m.background = Color('transparent')

s = Style()
r = Rule()

r.symbols.append(PolygonSymbolizer(Color('green')))
r.symbols.append(LineSymbolizer(Color('darkorange'), 2))

s.rules.append(r)

m.append_style('My Style', s)

lyr = Layer('shape')
lyr.datasource = PostGIS(**db_params)
lyr.styles.append('My Style')

# Buffer the same table to create a different background layer
s2 = Style()
r2 = Rule()

r2.symbols.append(PolygonSymbolizer(Color('steelblue')))
r2.symbols.append(LineSymbolizer(Color('darkblue'), 3))

s2.rules.append(r2)

m.append_style('My Style2', s2)

lyr2 = Layer('shape_buffer')

db_params['table'] = '(select ST_Buffer(geometry, 1) as geometry from %s) polygon' % db_params['table']
lyr2.datasource = PostGIS(**db_params)
lyr2.styles.append('My Style2')

# Append the second, background layer first, since Mapnik uses the painter's model
m.layers.append(lyr2)
m.layers.append(lyr)

m.zoom_to_box(lyr2.envelope())
# We have to manually zoom out since the buffered layer's envelope is not properly read by Mapnik
m.zoom(-5)
save_map(m,'postgis.xml')
render_to_file(m,'postgis_geometry.png')
postgis.xml

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<Map srs="+proj=latlong +datum=WGS84" bgcolor="rgba(0,0,0,0)">
    <Style name="My Style">
        <Rule>
            <PolygonSymbolizer>
                <CssParameter name="fill">rgb(0,128,0)</CssParameter>
            </PolygonSymbolizer>
            <LineSymbolizer>
                <CssParameter name="stroke">rgb(255,140,0)</CssParameter>
                <CssParameter name="stroke-width">2</CssParameter>
            </LineSymbolizer>
        </Rule>
    </Style>
    <Style name="My Style2">
        <Rule>
            <PolygonSymbolizer>
                <CssParameter name="fill">rgb(70,130,180)</CssParameter>
            </PolygonSymbolizer>
            <LineSymbolizer>
                <CssParameter name="stroke">rgb(0,0,139)</CssParameter>
                <CssParameter name="stroke-width">3</CssParameter>
            </LineSymbolizer>
        </Rule>
    </Style>
    <Layer name="shape_buffer" srs="+proj=latlong +datum=WGS84">
        <StyleName>My Style2</StyleName>
        <Datasource>
            <Parameter name="dbname">mapnik</Parameter>
            <Parameter name="host">localhost</Parameter>
            <Parameter name="password">123</Parameter>
            <Parameter name="table">(select ST_Buffer(geometry, 1) as geometry from polygon) polygon</Parameter>
            <Parameter name="type">postgis</Parameter>
            <Parameter name="user">postgres</Parameter>
        </Datasource>
    </Layer>
    <Layer name="shape" srs="+proj=latlong +datum=WGS84">
        <StyleName>My Style</StyleName>
        <Datasource>
            <Parameter name="dbname">mapnik</Parameter>
            <Parameter name="host">localhost</Parameter>
            <Parameter name="password">123</Parameter>
            <Parameter name="table">polygon</Parameter>
            <Parameter name="type">postgis</Parameter>
            <Parameter name="user">postgres</Parameter>
        </Datasource>
    </Layer>
</Map>
В общем весь необходимый материал тут http://svn.openstreetmap.org/applicatio ... ng/mapnik/, просто с питоном я никогда не работал, и не понятно для чего нужен этот xml.

Нужно что-то из разряда http://trac.openstreetmap.org/browser/a ... process.py, но использовать не ресурс осм, а мою БД (соединение с моей БД)?

Спасибо.
С уважением, Антон.
Последний раз редактировалось chehov85 30 авг 2011, 14:44, всего редактировалось 2 раза.

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 31 май 2011, 16:16

Сорри... Очень нужна ваша помощь! Кто поможет заюзать Mapnik?

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 05 июн 2011, 22:05

Вообще кто в состоянии помочь? Долблюсь уже месяц, не могу решить задачу.

Silentium
Активный участник
Сообщения: 114
Зарегистрирован: 20 апр 2010, 17:33
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение Silentium » 08 июн 2011, 09:54

может имеет смысл попробовать как альтернативу что-то типа этого? http://trac.osgeo.org/mapserver/wiki/RenderingOsmData

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 09 июн 2011, 16:39

Ну не знаю, я в ГИС новичок, просто БД будет закрыта в рамках небольшой конторы. Пока что смело удавалось реализовывать связь PostgreSQL, PostGIS, Mapnik, но вот редеринг/мультиредеренг моих тайлов ну не как не получается.
Неужели нет реализаций связи PostgreSQL, PostGIS, Mapnik, OpenLayer?
На чем работают OSM?

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 25 июл 2011, 11:12

Silentium писал(а):может имеет смысл попробовать как альтернативу что-то типа этого? http://trac.osgeo.org/mapserver/wiki/RenderingOsmData
А в чем смысл, собственно?.. Разве PostGIS не лучше? + Данные должны находится локально, естественно с указанием о использовании материалов OSM.

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 26 июл 2011, 15:50

Кто нибудь ответит на вопрос?

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение yellow-sky » 26 июл 2011, 17:00

Вы не пробовали прочитать файл README по вашей первой ссылке?
Мне кажется там все достаточно ясно описано и про xml файл (которой является фалом правил для оформления карты) и как его генерить в привязке к вашей БД. В конце файла есть описания всей директории.
Может просто стоит проделать все операции описанные в нем и разобраться как это работает?

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 29 июл 2011, 10:52

Попробовал нечего не помогает... нужен редеринг, чтобы тайлы можно было собрать openlayer-ом, каким обазом построить *.py файл?

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение yellow-sky » 31 июл 2011, 11:46


chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 01 авг 2011, 00:36

Не пойму куда поместить этот generate_xml.py чтобы сгенерить конфиг?
Вот мои пути программ, сервисов и библиотек, что где должно лежать?

C:\Python26
C:\mapnik-0.7.1\python\2.6\site-packages (тут еще папка mapnik в ней файлы и одна папка ogcserver)
И мой Apache C:\Program Files\xampp\htdocs\testgis В нем должна лежать страница и скрипт OpenLayer- а.

Где будет находится скрипт редеринга и данные png, и как из директории Apache, моего сайта, обращаться к данным?

Помогите разобраться пожалуйста.

Нужны ли эти все файлы и директория в C:\mapnik-0.7.1\python\2.6\site-packages\mapnik, или нужно удалить и скопировать туда из http://svn.openstreetmap.org/applicatio ... ng/mapnik/ ?

Простите за непонимание...

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение yellow-sky » 01 авг 2011, 10:00

Да.. Похоже у вас действительно каша...
Двигайтесь к своей цели постепенно. И не пытайтесь все смешать в одну кучу. Мапник отдельно, апач отдельно, опенлеерс отдельно.

chehov85 писал(а): Вот мои пути программ, сервисов и библиотек, что где должно лежать?

C:\Python26
C:\mapnik-0.7.1\python\2.6\site-packages (тут еще папка mapnik в ней файлы и одна папка ogcserver)
И мой Apache C:\Program Files\xampp\htdocs\testgis В нем должна лежать страница и скрипт OpenLayer- а.
1) Проведите нормальную установку и настройку питона и мапника.
http://trac.mapnik.org/wiki/WindowsInstallation - для затравки. Возможно будет проще воспользоваться инсталятором OSGEO4W.
В результате у вас должна быть рабочая консоль питона, которая не ругается на

Код: Выделить всё

import mapnik2 as mapnik
Причем импорт должен выполняться без предварительных настроек путей до бибилиотек питона - так будет проще настроить все остальное.
chehov85 писал(а): Где будет находится скрипт редеринга и данные png, и как из директории Apache, моего сайта, обращаться к данным?
2) Скопируйте полностью директорию http://svn.openstreetmap.org/applicatio ... ng/mapnik/ себе на винт. Куда вам нравится. Если первый шаг вы правильно выполните, то расположение этой директории может быть каким угодно. (Для информации - эта директория содержит все необходимое для генерации как конфигов, так и самого кэша).
То, как кэш станет будет доступен через апач - это тоже ваше личное дело. Можно генерить кэш сразу в дефолтную директорию апача. Но я бы так не делал - лучше создать отдельную директорию в корне диска (желательно не системного) куда и будет генериться кэш, а после настроить конфиг апача, для доступа к этой директории из вне.

3) После того, как установка и настройка пройдет успешно, генерируете osm.xml с помощью generate_xml.py (В Readme расписано как использовать этот скрипт. Но если вам лень туда заглядывать то можете запустить python ./generate_xml.py -h)

4) Запускаете генерацию с помощью generate_tiles.py. Как это сделать, можно почитать все в том же Readme.

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 02 авг 2011, 10:31

Все сделал как вы сказали.

Пытаюсь выполнить в консоле C:\mapnik\>generate_xml.py --dbname postgis --host 'localhost' --user postgres --port 5432 --password '******'

В ответ получаю ошибку:

generate_xml.py: error: Directory 'world_boundaries' used for param 'world_boundaries' not found

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение yellow-sky » 02 авг 2011, 12:08

Это произошло потому, что вы так и не прочитали файл README. Вы не подготовили данные для начала работы.



Quickstart
----------

The goal is to customize the Mapnik stylesheets to your local setup,
test rendering a few images, and then get set up to render tiles.

Make sure you have downloaded the coastlines shapefiles and have set up a
postgis enabled database with osm data imported using osm2pgsql. See
http://wiki.openstreetmap.org/wiki/Mapnik for more info.


Customize the 'osm.xml' entities to your setup. You can either use the
'generate_xml.py' script or manually edit a few files inside the 'inc' directory.

Finally try rendering a few maps using either 'generate_image.py',
'generate_tiles.py' or 'nik2img.py'.



Downloading the Coastlines Shapefiles
-------------------------------------

All these actions are regrouped in the script file get-coastlines.sh in this directory

wget http://tile.openstreetmap.org/world_bou ... erical.tgz # (50M)
wget http://tile.openstreetmap.org/processed_p.tar.bz2 # (227M)
wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 # (46M)
wget http://www.naturalearthdata.com/http//w ... places.zip # (1.5 MB)
wget http://www.naturalearthdata.com/http//w ... -lines.zip # (38 KB)

tar xzf world_boundaries-spherical.tgz # creates a 'world_boundaries' folder
tar xjf processed_p.tar.bz2 -C world_boundaries
tar xjf shoreline_300.tar.bz2 -C world_boundaries
unzip -q 10m-populated-places.zip -d world_boundaries
unzip -q 110m-admin-0-boundary-lines.zip -d world_boundaries

chehov85
Интересующийся
Сообщения: 42
Зарегистрирован: 18 май 2011, 09:34
Репутация: 0

Re: PostgreSQL, PostGIS, Mapnik, OpenLayer

Сообщение chehov85 » 03 авг 2011, 07:16

А если я не хочу манипулировать данными планеты, а только http://gis-lab.info/data/osm/moscow/moscow.7z как тогда быть?

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость