J'ai besoin d'intégrer une carte de DHIS2 sur une page Web. Dissection de l'exemple @ https://play.dhis2.org/dem . J'arrive à la carte à partir de son lien API https://play.dhis2.org/demo/api/26/maps/ytkZY3ChM6J/data . Mais quand j'essaie la même chose dans l'instance locale, je reçois;
{"httpStatus":"Internal Server Error","httpStatusCode":500,"status":"ERROR","message":"holes must not contain null elements"}
Ci-dessous se trouve la trace de pile de Tomcat7-stderr.log. Je serais reconnaissant si quelqu'un peut donner un pointeur à ce que je fais mal.
Java.lang.IllegalArgumentException: holes must not contain null elements
at com.vividsolutions.jts.geom.Polygon.<init>(Polygon.Java:143)
at com.vividsolutions.jts.geom.GeometryFactory.createPolygon(GeometryFactory.Java:405)
at org.hisp.dhis.mapgeneration.GeoToolsPrimitiveFromJsonFactory.createPolygonFromJson(GeoToolsPrimitiveFromJsonFactory.Java:137)
at org.hisp.dhis.mapgeneration.GeoToolsPrimitiveFromJsonFactory.createMultiPolygonFromJson(GeoToolsPrimitiveFromJsonFactory.Java:94)
at org.hisp.dhis.mapgeneration.InternalMapObject.buildGeometryForOrganisationUnit(InternalMapObject.Java:176)
at org.hisp.dhis.mapgeneration.InternalMapLayer.addDataMapObject(InternalMapLayer.Java:184)
at org.hisp.dhis.mapgeneration.GeoToolsMapGenerationService.getSingleInternalMapLayer(GeoToolsMapGenerationService.Java:284)
at org.hisp.dhis.mapgeneration.GeoToolsMapGenerationService.generateMapImageForUser(GeoToolsMapGenerationService.Java:140)
at org.hisp.dhis.mapgeneration.GeoToolsMapGenerationService.generateMapImage(GeoToolsMapGenerationService.Java:119)
at org.hisp.dhis.webapi.controller.mapping.MapController.renderMapViewPng(MapController.Java:292)
at org.hisp.dhis.webapi.controller.mapping.MapController.getMapData(MapController.Java:209)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.Java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.Java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.Java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.Java:817)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.Java:731)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.Java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:968)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:859)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:624)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.Java:844)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:731)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:303)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:208)
at org.Apache.Tomcat.websocket.server.WsFilter.doFilter(WsFilter.Java:52)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:241)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:208)
Cela indique qu'il y a un problème avec les coordonnées représentant un polygone associé à une unité d'organisation dans votre carte. Comme le message l'indique, la représentation d'un trou dans le polygone pose problème.
Pour examiner vos informations de coordonnées, vous pouvez les exporter au format DHIS 2 brut:
/api/organisationUnits.json?fields=id,name,coordinates&level2
ou comme GeoJSON:
/api/organisationUnits.geojson?level=2
puis utilisez un validateur pour identifier l'unité d'organisation avec les coordonnées non valides.