Хочу реализовать связку 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')
Код: Выделить всё
<?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://trac.openstreetmap.org/browser/a ... process.py, но использовать не ресурс осм, а мою БД (соединение с моей БД)?
Спасибо.
С уважением, Антон.