diff gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java @ 1070:7096a2e13676

Added functionality to publish the the mbr of the generated layer to the client. gnv-artifacts/trunk@1166 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Mon, 07 Jun 2010 14:42:42 +0000
parents 04967dc9c83f
children faae3fc7b792
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java	Mon Jun 07 12:22:00 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java	Mon Jun 07 14:42:42 2010 +0000
@@ -11,6 +11,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
+import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.io.ParseException;
 import com.vividsolutions.jts.io.WKTReader;
@@ -235,7 +236,7 @@
      *
      * @return the resultdata.
      */
-    protected Collection<Result> fetchData(LayerMetaData layerMetaData){
+    protected Collection<Result> fetchData(LayerMetaData layerMetaData, Envelope mbr){
         log.debug("LayerOutputState.fetchData");
         Collection<Result> data = null;
         QueryExecutor queryExecutor = QueryExecutorFactory.getInstance()
@@ -243,9 +244,12 @@
         try {
             data  = queryExecutor.executeQuery(dataQueryID,
                                                layerMetaData.getQueryValues());
-            if (data != null && layerMetaData.getGeometryWKT() != null){
+            if (data != null){
                 WKTReader wktReader = new WKTReader();
-                Geometry border = wktReader.read(layerMetaData.getGeometryWKT());
+                Geometry border = null;
+                if (layerMetaData.getGeometryWKT() != null){
+                    border = wktReader.read(layerMetaData.getGeometryWKT());
+                }
                 Iterator<Result> dataIt = data.iterator();
                 while (dataIt.hasNext()){
                     // Trim the Geometries using the
@@ -260,8 +264,15 @@
                         log.error(e,e);
                     }
                     if (currentGeometry != null){
-                        Geometry newGeometry = currentGeometry.intersection(border);
-                        current.addColumnValue(0, newGeometry.toText());
+                        if (border != null){
+                            currentGeometry = currentGeometry.intersection(border);
+                            current.addColumnValue(0, currentGeometry.toText());
+                        }
+                        if (mbr.isNull()){
+                            mbr.init(currentGeometry.getEnvelopeInternal());
+                        }else{
+                            mbr.expandToInclude(currentGeometry.getEnvelopeInternal());
+                        }
                     }
                 }
             }
@@ -475,9 +486,10 @@
                     }
                     Iterator<LayerMetaData> it = layerMetaData.iterator();
                     int i = 1;
+                    Envelope mbr = new Envelope();
                     while(it.hasNext()){
                         LayerMetaData lmd = it.next();
-                        Collection<Result> data = this.fetchData(lmd);
+                        Collection<Result> data = this.fetchData(lmd, mbr);
                         p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++);
                     }
                     if (p != null) {
@@ -631,6 +643,7 @@
             }
 
             int layerNumber = 0;
+            Envelope mbr = new Envelope();
             while (it.hasNext()){
                 LayerMetaData lmd = it.next();
                 layerNumber ++;
@@ -640,7 +653,7 @@
 
                 ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid);
                 try{
-                    Collection<Result> results = this.fetchData(lmd);
+                    Collection<Result> results = this.fetchData(lmd,mbr);
                     if (results != null && writeToShapeFile(uuid, results,
                                                          callContext,
                                                          geometryType,
@@ -663,6 +676,7 @@
                     success = true;
 
                     if (meta != null && !it.hasNext()) {
+                        MetaWriter.insertMbr(mbr, "EPSG:4326",meta);
                         MetaWriter.writeMetaFile(path, meta);
                         MapfileGenerator.getInstance().update();
                         return meta;
@@ -671,6 +685,7 @@
                     ExclusiveExec.INSTANCE.release(key);
                 }
             }
+          
             return document;
         }
         finally {

http://dive4elements.wald.intevation.org