среда, 28 сентября 2011 г.

Исправление ошибки GeoWebCache при наличии escape последовательности в начале строки

GeoWebCache, встроенный в GeoServer, не генерировал некоторые тайлы в некоторых масштабах. При этом в geoserver.log появлялось сообщение об ошибке:
ERROR [geoserver.ows] - 
java.lang.IllegalArgumentException: 
 Zero length string passed to TextLayout constructor.
Экспериментально выяснилось, что в некоторой таблице (egko.specterr_txt) в базе данных PostGreSQL/PostGIS в поле textstring в начале строки присутствуют символы новой строки '\n'. При этом в соответствующем файле стиля specterr_txt.sld была ссылка на это поле
<Label>
  <ogc:PropertyName>textstring</ogc:PropertyName>
</Label>
После выполнения скрипта в pgAdmin III
UPDATE egko.specterr_txt SET textstring=regexp_replace(textstring, E'\n', '') 
WHERE textstring like E'\n%';
всё заработало!
Самым трудоёмким оказался поиск слоя с ошибкой в группе слоёв (Layer Groups). Мне помог Quantum GIS 1.7.0-Wroclaw, который умеет работать и с WMS, и со слоями GeoWebCache. Он сразу открывает окно с ошибкой при добавлении кривого WMS слоя. Оказалось, что из 31 слоя, присутствующего в группе, ошибка была в предпоследнем слое. Естественно, я добавлял слои последовательно, не догадался начать с конца списка.