при рендеринге получаю пустую картинку PostGis+Mapnik+Python?

Сразу признаюсь познания в предметной сфере очень малы…

Сначала скажу, что есть. Есть база PostGis полученная с помощью osm2pgsql. Соответственно в ней таблички planet_osm_line, planet_osm_nodes, planet_osm_point, planet_osm_polygon, planet_osm_rels, planet_osm_roads, planet_osm_ways, geometry_columns.

geometry_columns имеет следующие записи:
oid f_table_catalog f_table_schema f_table_name f_geometry_column coord_dimension srid type
53680 “‘’” “public” “planet_osm_line” “way” 2 900913 “LINESTRING”
53669 “‘’” “public” “planet_osm_point” “way” 2 900913 “POINT”
53691 “‘’” “public” “planet_osm_polygon” “way” 2 900913 “GEOMETRY”
53701 “‘’” “public” “planet_osm_roads” “way” 2 900913 “LINESTRING”

Таблички даже чем то заполнены(заполнял картой иркутска), в них есть записи с какими-то улицами и тд и тп.

Далее я пытаюсь использовать mapnik для получения картинки с картой(пока что вопрос стоит только получения банальной png). Для этого на питоне был написан такой вот код:
"
import mapnik
from mapnik import *

z = 10
imgx = 1000 * z
imgy = 1000 * z
m = mapnik.Map(imgx,imgy)

m.background = mapnik.Color(‘white’)
s = mapnik.Style()
r = mapnik.Rule()
r.symbols.append(mapnik.PolygonSymbolizer(mapnik.Color(‘black’)))
r.symbols.append(mapnik.LineSymbolizer(Color(‘darkorange’), 2))
r.symbols.append(mapnik.PointSymbolizer(‘excel.png’, ‘png’, 20, 20))
s.rules.append(r)
m.append_style(‘My Style’,s)

mapnik.Datasource=mapnik.PostGIS(host=‘localhost’,
user=‘user’,
password=‘password’,
dbname=‘gisutf8’,
table=‘(select way from planet_osm_point)POINT’
)
ll=(103.859,52.605,104.761,52.046)
prj=mapnik.Projection(“+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over”)
c0=prj.forward(mapnik.Coord(ll[0],ll[1]))
c1=prj.forward(mapnik.Coord(ll[2],ll[3]))
bbox=mapnik.Envelope(c0.x,c0.y,c1.x,c1.y)
m.zoom_to_box(bbox)
im = mapnik.Image(imgx,imgy)
mapnik.render(m, im)
view = im.view(0,0,imgx,imgy) # x,y,width,height
view.save(“image.png”,‘png’)
"
Код выполняется без вылетов или ошибок, но на выходе я почему то получаю девственно белую .png, так вот вопрос - где я накосячил???
ЗЫ у меня уже голова сломалась в поисках - сначала думал база ошибочно создалась или наполнилась, потом что координаты неправильно задал, теперь даже не знаю

Если верить Вики, подобное может быть из-за того, что у пользователя базы данных недостаточно прав для входа в базу.

а оно разве не должно ругаться на то что нет прав? там же все таки, насколько я понимаю, формируется скуэль запрос при выполнении которого должно ругаться(до этого работал только с ораклом, так что ньюансов обработки таких ситуаций в постгре не знаю)…

ЗЫ а можно линк на вики где описаны подобные возможные ошибки?

У вас ббокс вверх ногами:
http://wms.latlon.org/?layers=osm&bbox=103.859,52.605,104.761,52.046&srs=EPSG:4326&width=1000&height=1000

Ну и кроме того, рекомендую добиться сначала нормального рендера с XML-стилями.

В том-то и дело, что мапник и скрипты молчат в этом случае, и рисуют, что смогут (береговую линию) :slight_smile:
И да, про ббокс тоже в где-то в Вики было.

попробовал оба варианта -
ll=(104.761,52.046,103.859,52.605)
#ll=(103.859,52.605,104.761,52.046)
prj=mapnik.Projection(“+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over”)
c0=prj.forward(mapnik.Coord(ll[0],ll[1]))
c1=prj.forward(mapnik.Coord(ll[2],ll[3]))
bbox=mapnik.Envelope(c0.x,c0.y,c1.x,c1.y)

все тот же белый .png… или я что-то не понимаю насчет перевернутого вверх ногами ббокса?

Тонкий намёк о том, как вы ео перевернули на этот раз:
http://wms.latlon.org/?layers=osm&bbox=104.761,52.046,103.859,52.605&srs=EPSG:4326&width=10000&height=100

не я конечно понимаю что это все прикольно и тд и тп) картинки некрасивые получаются у Вас… но у меня картинки вообще нет… а понять по белому пнг где верх-низ и где лево-право это из серии “сенсация картина малевича черный квадрат уже полгода висит вверх ногами”…

про wsen уже прочитал легче не стало

Sviridenko, Котяра вам не зря кидает ссылку; поигравшись с ней, вы легко поймёте, как нужно переставить значения.

да я уже понял как переставить) 103.859,52.046,104.761,52.605) запад-юг-восток-север aka wsen)
а вот что делать с пустой белой пнг до сих пор не понятно

Sviridenko, добейтесь устойчивого рендера из xml-стилей. Для начала - из osm.xml, с помощью того же generete_image.py.
Потом у вас хотя бы будет, с чем сравнивать и от чего отталкиваться.
(ни разу не видел in wild использования питоновского интерфейса к мапнику для задания стиля, если честнo.)

так) свой файл my_osm.xml я создал… провел рендеринг и получил даже изображение байкала(пытался отобразить иркутск но его не получилось), то есть можно сделать вывод рендерится нормально(по крайней мере уже не пустая пнг)…
щас будем думать почему не отображается сам иркутск…

может Байкал - это часть coastlines а не postGIS базы? Похоже, что либо проекции не совпадают, либо слои неактивны, либо к базе нет доступа.

Либо свой файлик my_osm.xml криво написан. Попробуйте для начала с официальным osm.xml по мануалу с вики.

вот у меня тоже есть подозрение что к базе оно таки и не подключилось… вопрос как это проверить? через psql когда конекчусь с теми же параметрами, что записаны в my_osm.xml все нормально…

не знаю может накосячил при создании my_osm.xml…

вот отрывок для слоя с world_boundaries

world

C:/mapnik-0.7.1/demo/python/osm_mapnik/world_boundaries/shoreline_300
shape

а это для слоя из postgis

landcover

gisutf8
false
-179,-89,179,89
localhost
‘’
5432

(select way,aeroway,amenity,landuse,leisure,man_made,military,“natural”,power,tourism,name,highway,
case when religion in (‘christian’,‘jewish’) then religion else ‘INT-generic’::text end as religion
from planet_osm_polygon
where landuse is not null
or leisure is not null
or aeroway in (‘apron’,‘aerodrome’)
or amenity in (‘parking’,‘university’,‘college’,‘school’,‘hospital’,‘kindergarten’,‘grave_yard’)
or military in (‘barracks’,‘danger_area’)
or “natural” in (‘field’,‘beach’,‘desert’,‘heath’,‘mud’,‘wood’,‘sand’,‘scrub’)
or power in (‘station’,‘sub_station’,‘generator’)
or tourism in (‘attraction’,‘camp_site’,‘caravan_site’,‘picnic_site’,‘zoo’)
or highway in (‘services’,‘rest_area’)
order by z_order,way_area desc
) as leisure

postgis
postgres

если указанный там селект выполнить напрямую в базе, то выборка НЕ пустая, следовательно надо думать либо нет коннекта к базе, либо я где-то косячнул с координатами и отображением слоев…

PS что значит false?
и -179,-89,179,89 ?

PPS свой my_osm.xml делал по вот этой инструкции http://www.bostongis.com/PrinterFriendly.aspx?content_name=generating_osm_tiles

в стандартных стилях
-20037508,-19929239,20037508,19929239

эти цифры я тоже пробовал(они устанавливаются по умолчанию при запуске generate_xml.py без параметра extent), результат тот же самый (worldboundaries видны, иркутск нет).

Наверное таки к базе доступа нет. Под виндой и не знаю, что порекомендовать. У себя настроил, чтоб пользователь gis с localhost ходил без пароля на свою базу.

Хотя только что проверил. У меня при любой проблеме с базой сразу скрипт ругается, будь то неверный запрос, имя пользователя или пароль.

Попробуй сделать опечатку в запросе. Если psql ругнётся, значит до него дело всё-же доходит!

изменил my_osm.xml - сделал опечатку в селекте, ругнулся… сказал что неправильный селект
File “C:/mapnik-0.7.1/demo/python/test2”, line 9, in
mapnik.load_map (m,‘my_osm2.xml’)
RuntimeError: PSQL error:
ERROR: syntax error at or near “,”
LINE 2: (sect way,aeroway,amenity,landuse,leisure,man_made,mil…

получается остается только варианты неправильных данных в базе или неправильного файла my_osm.xml?

да, похоже, что конфиг неверный. А ты пытаешься именно OSM базу рендерить, или что-то своё?