Start working again on SLC GIS
authorMathieu Baudier <mbaudier@argeo.org>
Sun, 10 Oct 2010 21:56:49 +0000 (21:56 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sun, 10 Oct 2010 21:56:49 +0000 (21:56 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3832 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

modules/gis/org.argeo.slc.gis.position.ui/META-INF/MANIFEST.MF
modules/gis/org.argeo.slc.gis.position.ui/META-INF/spring/ui.xml
runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/GisFieldViewer.java
runtime/org.argeo.slc.support.gis/src/main/java/org/argeo/slc/geotools/swing/VersatileZoomTool.java

index a6c59e2d3710abae0b43da588126f476226202a8..8ecfab86b052d790f5ebd0890ec629d6dc539f39 100644 (file)
@@ -3,7 +3,8 @@ Bundle-ManifestVersion: 2
 Bundle-Name: Ui
 Bundle-SymbolicName: org.argeo.slc.gis.position.ui
 Bundle-Version: 1.0.0.qualifier
-Import-Package: org.argeo.slc.core.deploy;version="0.12.2.SNAPSHOT-r3503",
+Import-Package: org.apache.commons.dbcp;version="1.2.2.osgi",
+ org.argeo.slc.core.deploy;version="0.12.2.SNAPSHOT-r3503",
  org.argeo.slc.geotools;version="0.12.2.SNAPSHOT-r3562",
  org.argeo.slc.geotools.swing;version="0.12.2.SNAPSHOT-r3565",
  org.argeo.slc.jts;version="0.12.2.SNAPSHOT-r3562",
index 425fcb3e388cd764dbb0b2b2d36ff466d5f090b7..80ebc89ab34c52874adaa73793dad96237452bbf 100644 (file)
 \r
        <bean id="ui" class="org.argeo.slc.geotools.swing.GisFieldViewer">\r
                <property name="positionProvider" ref="positionProvider" />\r
-               <property name="jaiImageIoClassLoader" ref="jai.imageio.bdClassLoader" />\r
+               <property name="dataSource" ref="dataSource" />\r
+               <property name="jaiImageIoClassLoader" ref="jai.imageio.bdClassLoader" /><!--\r
                <property name="vectors">\r
                        <bean class="org.argeo.slc.core.deploy.DefaultResourceSet">\r
                                <property name="base"\r
                                        value="file:/home/mbaudier/gis/projects/100122-EasternBalkans2010/data" />\r
                                <property name="include" value="*.shp" />\r
                        </bean>\r
-                       <!--\r
-                               <list>\r
-                               <value>file:/home/mbaudier/gis/projects/100122-EasternBalkans2010/data/countries-EuroMed-NEarth.shp\r
-                               </value>\r
-                               <value>file:/home/mbaudier/gis/projects/100122-EasternBalkans2010/data/highways-EastBalkan-OSM.shp\r
-                               </value> </list>\r
-                       -->\r
+                       \r
                </property>\r
+               --><!--\r
                <property name="rasters">\r
                        <bean class="org.argeo.slc.core.deploy.DefaultResourceSet">\r
                                <property name="base"\r
@@ -33,7 +29,7 @@
                                <property name="include" value="*.gif" />\r
                        </bean>\r
                </property>\r
-       </bean>\r
+       --></bean>\r
 \r
        <bean id="jai.imageio.bdClassLoader"\r
                class="org.springframework.osgi.util.BundleDelegatingClassLoader"\r
                </constructor-arg>\r
        </bean>\r
 \r
+       <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"\r
+               destroy-method="close">\r
+               <property name="driverClassName" value="org.postgresql.Driver" />\r
+               <property name="url" value="jdbc:postgresql://air/test_berlin" />\r
+               <property name="username" value="argeo" />\r
+               <property name="password" value="argeo" />\r
+               <property name="testOnBorrow" value="true" />\r
+               <property name="validationQuery" value="SELECT 1" />\r
+               <property name="maxActive" value="10" />\r
+               <property name="maxIdle" value="2" />\r
+       </bean>\r
+\r
 </beans>
\ No newline at end of file
index a1b3cec9d34f50d0506ea40a7bce731268827332..e3447e0533aff6de09ccd43501b2ff843ba2ec3f 100644 (file)
@@ -18,16 +18,17 @@ package org.argeo.slc.geotools.swing;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
 import java.awt.Rectangle;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Point2D;
 import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.media.jai.JAI;
+import javax.sql.DataSource;
 import javax.swing.JFrame;
 import javax.swing.SwingUtilities;
 
@@ -38,21 +39,33 @@ import org.argeo.slc.core.deploy.ResourceSet;
 import org.argeo.slc.geotools.BeanFeatureTypeBuilder;
 import org.argeo.slc.gis.model.FieldPosition;
 import org.argeo.slc.jts.PositionProvider;
+import org.geotools.data.DataStore;
+import org.geotools.data.DataStoreFinder;
+import org.geotools.data.FeatureSource;
 import org.geotools.data.FileDataStoreFinder;
 import org.geotools.data.WorldFileReader;
+import org.geotools.factory.CommonFactoryFinder;
 import org.geotools.gce.image.WorldImageFormat;
 import org.geotools.geometry.DirectPosition2D;
 import org.geotools.geometry.Envelope2D;
 import org.geotools.map.DefaultMapContext;
 import org.geotools.map.MapContext;
 import org.geotools.map.MapLayer;
+import org.geotools.styling.FeatureTypeStyle;
+import org.geotools.styling.LineSymbolizer;
 import org.geotools.styling.RasterSymbolizer;
+import org.geotools.styling.Rule;
+import org.geotools.styling.Stroke;
 import org.geotools.styling.Style;
 import org.geotools.styling.StyleBuilder;
+import org.geotools.styling.StyleFactory;
 import org.geotools.swing.JMapFrame;
 import org.geotools.swing.JMapPane;
 import org.geotools.swing.event.MapPaneAdapter;
 import org.geotools.swing.event.MapPaneEvent;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+import org.opengis.filter.FilterFactory;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.core.io.Resource;
@@ -73,6 +86,11 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
        protected final static BeanFeatureTypeBuilder<FieldPosition> POSITION = new BeanFeatureTypeBuilder<FieldPosition>(
                        FieldPosition.class);
 
+       static StyleFactory styleFactory = CommonFactoryFinder
+                       .getStyleFactory(null);
+       static FilterFactory filterFactory = CommonFactoryFinder
+                       .getFilterFactory(null);
+
        private DateFormat fieldPositionDateFormat = new SimpleDateFormat(
                        "yyyyMMdd-HHmmss");
 
@@ -93,6 +111,8 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
        private Boolean positionProviderDisconnected = false;
        private VersatileZoomTool versatileZoomTool;
 
+       private DataSource dataSource;
+
        public static void main(String[] args) throws Exception {
                new GisFieldViewer().afterPropertiesSet();
        }
@@ -100,7 +120,16 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
        public void afterPropertiesSet() {
                new Thread(new PositionUpdater()).start();
 
+               // CoordinateReferenceSystem sphericalMercator;
+               // try {
+               // sphericalMercator = CRS.decode("EPSG:3785");
+               // // sphericalMercator = CRS.decode("EPSG:900913");
+               // } catch (Exception e1) {
+               // throw new SlcException("Cannot create CRS", e1);
+               // }
+
                // Create map context
+               // MapContext mapContext = new DefaultMapContext(sphericalMercator);
                MapContext mapContext = new DefaultMapContext();
                mapContext.setTitle("GIS Field Viewer");
 
@@ -116,6 +145,9 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                mapFrame.setSize(800, 600);
 
                mapPane = mapFrame.getMapPane();
+               // ReferencedEnvelope referencedEnvelope = new
+               // ReferencedEnvelope(sphericalMercator);
+               // mapFrame.getMapContext().setAreaOfInterest(referencedEnvelope);
                versatileZoomTool = new VersatileZoomTool();
                mapPane.setCursorTool(versatileZoomTool);
 
@@ -163,8 +195,9 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                // Vectors
                for (Resource vector : vectors.listResources().values()) {
                        try {
-                               mapContext.addLayer(FileDataStoreFinder.getDataStore(
-                                               vector.getURL()).getFeatureSource(), null);
+                               mapContext.addLayer(
+                                               FileDataStoreFinder.getDataStore(vector.getURL())
+                                                               .getFeatureSource(), null);
                        } catch (Exception e) {
                                log.error("Could not load vector " + vector + ": " + e);
                                if (log.isTraceEnabled())
@@ -172,6 +205,54 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                        }
                }
 
+               try {
+                       Map params = new HashMap();
+                       params.put("dbtype", "postgis");
+                       params.put("host", "air");
+                       params.put("port", new Integer(5432));
+                       params.put("database", "test_berlin");
+                       params.put("user", "argeo");
+                       params.put("passwd", "argeo");
+
+                       DataStore pgDatastore = DataStoreFinder.getDataStore(params);
+
+                       // JDBCDataStore pgDatastore = new JDBCDataStore();
+                       // pgDatastore.setDataSource(dataSource);
+                       // pgDatastore.setSQLDialect(new PostGISDialect(pgDatastore));
+
+                       FeatureSource<SimpleFeatureType, SimpleFeature> source = pgDatastore
+                                       .getFeatureSource("ways");
+                       // log.debug("source CRS: "+source.getBounds().getCoordinateReferenceSystem());
+                       // log.debug("context CRS: "+mapContext.getCoordinateReferenceSystem());
+
+                       mapContext.addLayer(source, createLineStyle());
+               } catch (Exception e) {
+                       log.error("Could not load db " + "" + ": " + e);
+                       e.printStackTrace();
+                       if (log.isTraceEnabled())
+                               log.trace("Stack", e);
+               }
+
+       }
+
+       private Style createLineStyle() {
+               Stroke stroke = styleFactory.createStroke(
+                               filterFactory.literal(Color.BLUE), filterFactory.literal(1));
+
+               /*
+                * Setting the geometryPropertyName arg to null signals that we want to
+                * draw the default geomettry of features
+                */
+               LineSymbolizer sym = styleFactory.createLineSymbolizer(stroke, null);
+
+               Rule rule = styleFactory.createRule();
+               rule.symbolizers().add(sym);
+               FeatureTypeStyle fts = styleFactory
+                               .createFeatureTypeStyle(new Rule[] { rule });
+               Style style = styleFactory.createStyle();
+               style.featureTypeStyles().add(fts);
+
+               return style;
        }
 
        public void destroy() throws Exception {
@@ -183,7 +264,8 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                if (jaiImageIoClassLoader != null) {
                        Thread.currentThread().setContextClassLoader(jaiImageIoClassLoader);
                        try {
-                               JAI.getDefaultInstance().getOperationRegistry()
+                               JAI.getDefaultInstance()
+                                               .getOperationRegistry()
                                                .registerServices(
                                                                WorldFileReader.class.getClassLoader());
                        } catch (IOException e) {
@@ -298,15 +380,16 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                                DirectPosition2D geoCoords = new DirectPosition2D(
                                                currentPosition.getLocation().getCoordinate().x,
                                                currentPosition.getLocation().getCoordinate().y);
+                               if (tr == null)
+                                       return;
                                tr.transform(geoCoords, geoCoords);
                                geoCoords.setCoordinateReferenceSystem(getMapPane()
                                                .getMapContext().getCoordinateReferenceSystem());
 
                                final int halfRefSize = 3;
                                Rectangle rect = new Rectangle((int) Math.round(geoCoords
-                                               .getX()
-                                               - halfRefSize), (int) Math.round(geoCoords.getY()
-                                               - halfRefSize), halfRefSize * 2 + 1,
+                                               .getX() - halfRefSize), (int) Math.round(geoCoords
+                                               .getY() - halfRefSize), halfRefSize * 2 + 1,
                                                halfRefSize * 2 + 1);
                                Graphics2D g2D = (Graphics2D) getMapPane().getGraphics();
                                if (g2D == null)
@@ -323,6 +406,10 @@ public class GisFieldViewer implements InitializingBean, DisposableBean {
                });
        }
 
+       public void setDataSource(DataSource dataSource) {
+               this.dataSource = dataSource;
+       }
+
        private class CustomMapPaneListener extends MapPaneAdapter {
 
                @Override
index b6d5189d9d60e39d70f0b5e0349caf4defb7b4ad..6beae5463cb0fed750c00da07f62966955b59691 100644 (file)
@@ -94,7 +94,7 @@ public class VersatileZoomTool extends AbstractZoomTool {
                else if (SwingUtilities.isMiddleMouseButton(e)) {
                        if (fieldPosition != null) {
                                Envelope2D env = new Envelope2D();
-                               final double increment = 1d;
+                               final double increment = 0.1d;
                                env.setFrameFromDiagonal(fieldPosition.getX() - increment,
                                                fieldPosition.getY() - increment, fieldPosition.getX()
                                                                + increment, fieldPosition.getY() + increment);