Tile Caching для GEOServer и PostgreSQL, и плохая геометрия

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
glax2020
Активный участник
Сообщения: 175
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

Tile Caching для GEOServer и PostgreSQL, и плохая геометрия

Сообщение glax2020 » 18 авг 2013, 16:18

Проблема заключается в том, что при процессе генерации тайлов процесс падает с сообщением об ошибке и в этом сообщении есть предупреждение об ошибке "Caused by: java.lang.IllegalArgumentException: Invalid number of points in LineString (found 1 - must be 0 or >= 2)".

Проблема в том что та же самая карта, да и любая карта, если на базе "Directory of spatial files (shapefiles)" то нет никаких проблем с тайлами вне зависимости как кажется есть там плохая геометрия или нет.

Конечно при работе с картой на базе "PostgreSQL" я могу поставить фильтр на плохую геометрию (CHECK (ST_IsValid(the_geom))), но в этом случае для небольшой региональной карты (как Ульяновская область) порядка 500 - 1000 объектов с плохой геометрией, и их не правильно терять на карте, а в ручную исправлять -- тысяча или больше это не практично и не реально так для каждой региональной карты. А например Тверская область - карта в 4 раза больше по количеству объектов примерно и там нет проблемы с тайлами - хотя там объектов с плохой геометрией (ST_IsValid(the_geom)) больше полутора тысяч.

Проблема в том, чтобы найти нормальный, эффективный и практичный метод борьбы с плохой геометрией для процедуры "Tile Caching для GEOServer и PostgreSQL".

Может быть у кого то есть опыт и советы? Буду благодарен за любые рекомендации

С уважением, Александр


2013-08-18 17:00:58,354 ERROR [geotools.rendering] - org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
java.lang.RuntimeException: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.jdbc.JDBCFeatureReader.next(JDBCFeatureReader.java:314)
at org.geotools.jdbc.JDBCFeatureReader.next(JDBCFeatureReader.java:70)
at org.geotools.data.store.ContentFeatureCollection$WrappingIterator.next(ContentFeatureCollection.java:269)
at org.geotools.renderer.lite.StreamingRenderer.drawPlain(StreamingRenderer.java:2511)
at org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:2013)
at org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:814)
at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:490)
at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:254)
at org.geoserver.wms.map.RenderedImageMapOutputFormat.produceMap(RenderedImageMapOutputFormat.java:126)
at org.geoserver.wms.GetMap.executeInternal(GetMap.java:472)
at org.geoserver.wms.GetMap.run(GetMap.java:208)
at org.geoserver.wms.GetMap.run(GetMap.java:112)
at org.geoserver.wms.DefaultWebMapService.getMap(DefaultWebMapService.java:353)
at sun.reflect.GeneratedMethodAccessor285.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:61)
at org.geoserver.gwc.wms.CacheSeedingWebMapService.invoke(CacheSeedingWebMapService.java:35)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:69)
at org.geoserver.gwc.wms.CachingWebMapService.invoke(CachingWebMapService.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.geoserver.ows.util.RequestObjectLogger.invoke(RequestObjectLogger.java:54)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy28.getMap(Unknown Source)
at sun.reflect.GeneratedMethodAccessor245.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.geoserver.ows.Dispatcher.execute(Dispatcher.java:772)
at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:272)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at org.geoserver.gwc.GWC.dispatchOwsRequest(GWC.java:1037)
at org.geoserver.gwc.layer.GeoServerTileLayer.dispatchGetMap(GeoServerTileLayer.java:523)
at org.geoserver.gwc.layer.GeoServerTileLayer.getMetatilingReponse(GeoServerTileLayer.java:498)
at org.geoserver.gwc.layer.GeoServerTileLayer.seedTile(GeoServerTileLayer.java:662)
at org.geowebcache.seed.SeedTask.doActionInternal(SeedTask.java:129)
at org.geowebcache.seed.GWCTask.doAction(GWCTask.java:76)
at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:36)
at org.geowebcache.seed.MTSeeder.call(MTSeeder.java:25)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.geotools.data.DataSourceException: An exception occurred while parsing WKB data
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:84)
at org.geotools.data.postgis.WKBAttributeIO.read(WKBAttributeIO.java:112)
at org.geotools.data.postgis.PostGISDialect.decodeGeometryValue(PostGISDialect.java:187)
at org.geotools.jdbc.JDBCFeatureReader.next(JDBCFeatureReader.java:310)
... 47 more
Caused by: java.lang.IllegalArgumentException: Invalid number of points in LineString (found 1 - must be 0 or >= 2)
at com.vividsolutions.jts.geom.LineString.init(LineString.java:102)
at com.vividsolutions.jts.geom.LineString.<init>(LineString.java:93)
at com.vividsolutions.jts.geom.GeometryFactory.createLineString(GeometryFactory.java:496)
at com.vividsolutions.jts.io.WKBReader.readLineString(WKBReader.java:227)
at com.vividsolutions.jts.io.WKBReader.readGeometry(WKBReader.java:180)
at com.vividsolutions.jts.io.WKBReader.readMultiLineString(WKBReader.java:269)
at com.vividsolutions.jts.io.WKBReader.readGeometry(WKBReader.java:189)
at com.vividsolutions.jts.io.WKBReader.read(WKBReader.java:144)
at org.geotools.data.postgis.WKBAttributeIO.wkb2Geometry(WKBAttributeIO.java:82)
... 50 more

Ответить

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

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

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