Hello all, 
I'm new to GeoTools and I need help. I wrote a code to calculate how many 
pixels of each color are inside a polygon. 
I mean: I have a .png image with radar rain data and on the other hand I have a 
polygon (Geometry) extracted from a shapefile.
In order to do such integration I use CRSEnvelope, but it tells me that it 
can't be resolved. 
I'm using Maven dependencies in order to import libraries but I'm scared I'm 
missing something. 
Below you may see my pom.xml file: 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
<modelVersion>4.0.0</modelVersion>
<groupId>org.geotools</groupId>
<artifactId>tutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>tutorial</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<geotools.version>8.0-M4</geotools.version>
</properties>
<dependencies>
        <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
        </dependency>
        <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-shapefile</artifactId>
                <version>${geotools.version}</version>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-epsg-hsql</artifactId>
            <version>${geotools.version}</version>
        </dependency>
        <dependency>
                <groupId>org.geotools</groupId>
                <artifactId>gt-swing</artifactId>
                <version>${geotools.version}</version>
        </dependency>
        <dependencies>
    
    <dependency>
        <groupId>org.jaitools</groupId>
        <artifactId>jt-contour</artifactId>
        <version>1.2.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.jaitools</groupId>
        <artifactId>jt-zonalstats</artifactId>
        <version>1.2.0</version>
    </dependency>
    <dependency>
                        <groupId>org.geotools</groupId>
                        <artifactId>data</artifactId>
            <version>${geotools.version}</version>
                </dependency>
</dependencies>
</dependencies>
<repositories>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net repository</name>
<url>http://download.java.net/maven/2</url>
</repository>
<repository>
<id>osgeo</id>
<name>Open Source Geospatial Foundation Repository</name>
<url>http://download.osgeo.org/webdav/geotools/</url>
</repository>
</repositories>
</project>

and my java code: 

package CRSConversions; 

import java.awt.Image; 
import java.awt.image.BufferedImage; 
import java.awt.image.ColorModel; 
import java.awt.image.RenderedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URISyntaxException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.StringTokenizer; 

import javax.imageio.ImageIO; 
import javax.media.jai.JAI; 
import javax.media.jai.ParameterBlockJAI; 
import javax.media.jai.RenderedOp; 

import org.geotools.coverage.grid.GridCoverage2D; 
import org.geotools.coverage.grid.GridCoverageFactory; 
import org.geotools.coverage.processing.Operations; 
import org.geotools.data.DataStore; 
import org.geotools.data.DataStoreFinder; 
import org.geotools.data.FeatureWriter; 
import org.geotools.data.FileDataStore; 
import org.geotools.data.FileDataStoreFinder; 
import org.geotools.data.simple.SimpleFeatureCollection; 
import org.geotools.data.simple.SimpleFeatureIterator; 
import org.geotools.data.simple.SimpleFeatureSource; 
import org.geotools.geometry.jts.JTS; 
import org.geotools.geometry.jts.JTSFactoryFinder; 
import org.geotools.referencing.CRS; 
import org.jaitools.media.jai.zonalstats.ZonalStats; 
import org.jaitools.media.jai.zonalstats.ZonalStatsDescriptor; 
import org.omg.CORBA.Bounds; 
import org.opengis.feature.simple.SimpleFeature; 
import org.opengis.feature.simple.SimpleFeatureType; 
import org.opengis.geometry.Envelope; 
import org.opengis.geometry.primitive.PrimitiveFactory; 
import org.opengis.referencing.FactoryException; 
import org.opengis.referencing.NoSuchAuthorityCodeException; 
import org.opengis.referencing.crs.CoordinateReferenceSystem; 

import com.vividsolutions.jts.awt.PointShapeFactory.Point; 
import com.vividsolutions.jts.geom.Coordinate; 

import com.vividsolutions.jts.geom.Geometry; 
import com.vividsolutions.jts.geom.GeometryFactory; 
import com.vividsolutions.jts.geom.MultiPolygon; 
import com.vividsolutions.jts.geom.Polygon; 

import org.geotools.data.ows.CRSEnvelope;                               //error 
at this line: cannot be resolved


public class SHP2Polygon { 
        URL url; 
        FileOutputStream fos; 
        InputStream is; 
        File file; 
        int rojos[][]; 
        int verdes[][]; 
        int azules[][]; 
        public SHP2Polygon(URL url, String nombre, URL urlRadar) { 
                          
                Map map = new HashMap(); 
                map.put( "url", url ); 
                DataStore store = null; 
                try { 
                        urlRadar = new 
URL("http://www.meteo.cat/servmet/radar/images/cappicor_catalunya_10dBZ/composicio_ultima_thumb.png";);
 
                } catch (MalformedURLException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                } 
            Image radar = null; 
                try { 
                        radar = ImageIO.read(urlRadar); 
                } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                } 
                try { 
                        store = DataStoreFinder.getDataStore( map ); 
                } catch (IOException e1) { 
                        // TODO Auto-generated catch block 
                        e1.printStackTrace(); 
                } 

                
        SimpleFeatureSource featureSource = null; 
                try { 
                        featureSource = store.getFeatureSource(nombre); 
                } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                } 
        SimpleFeatureCollection c = null; 
                try { 
                        c = featureSource.getFeatures(); 
                } catch (IOException e) { 
                        // TODO Auto-generated catch block 
                        e.printStackTrace(); 
                } 
        SimpleFeatureIterator featuresIterator = c.features(); 
        Coordinate[] coords; 
        Geometry polygon; 
        com.vividsolutions.jts.geom.Point centroid; 
        Bounds bounds; 
        Object geometry = null; 
        String name; 
        MultiPolygon multiPolygon = null; 
        while (featuresIterator.hasNext()) { 
            SimpleFeature o = featuresIterator.next(); 
            name = (String) o.getAttribute("NAME"); 
            geometry = o.getDefaultGeometry(); 
        } 
        if (geometry instanceof MultiPolygon) { 
            multiPolygon = (MultiPolygon) geometry; 
        } 
            centroid = multiPolygon.getCentroid(); 
            
            GeometryFactory geometryFactory = 
JTSFactoryFinder.getGeometryFactory( null ); 
            String epgsCode ="EPSG:25831"; 
            double minX = 258179.9; 
            double minY = 4485321.8; 
            double maxX = 534282.3; 
            double maxY = 4749870.1; 
            RenderedImage image = JAI.create("url", urlRadar); 
         // Creo los lĂ­mites 
            Envelope env = new CRSEnvelope(epgsCode, minX, minY, maxX, maxY); 
            
            //Genero la imagen 
            GridCoverageFactory gcf = new GridCoverageFactory(); 
            GridCoverage2D gcv2d = gcf.create("name", image, env); 
            
            
            
            
            //com.vividsolutions.jts.geom.Point point = 
geometryFactory.createPoint( coord ); 
            for (int 
geometryI=0;geometryI<multiPolygon.getNumGeometries();geometryI++) { 
                polygon = multiPolygon.getGeometryN(geometryI); 
                //System.out.println(polygon); 
                //System.out.println(polygon.contains(point)); 
                ParameterBlockJAI pb = new ParameterBlockJAI("ZonalStats"); 
                pb.setSource("dataImage", radar); 
                pb.setSource("zoneImage", polygon); 
                RenderedOp op = JAI.create("ZonalStats", pb); 
                RenderedImage ri = (RenderedImage) 
op.getProperty("RenderedImage"); 
                ColorModel cm = ri.getColorModel(); 
                    int i=0; 
                    int rojo=0; 
            int verde=0; 
            int azul=0; 
            int amarillo=0; 
            int naranja=0; 
                    
                    
                for (int y=0;y<499;y++){     
                for (int x=0;x<484;x++){ 
                if (pointContained(polygon,x,y,geometryFactory)){ 
                        rojos[x][y] = cm.getRed(i); 
                        verdes[x][y] = cm.getGreen(i); 
                        azules[x][y] = cm.getBlue(i); 
                        System.out.println("i="+i+" red="+rojos[x][y]+" 
green="+verdes[x][y]+" blue="+azules[x][y]); 
                        if (!(rojos[x][y] == verdes[x][y] && rojos[x][y] == 
azules[x][y] && verdes[x][y] == azules[x][y])) 
            { 
            if (rojos[x][y] > verdes[x][y] && rojos[x][y] > azules[x][y]) 
            { 
            rojo++; 
            } 
            if (verdes[x][y] > rojos[x][y] && verdes[x][y] > azules[x][y]) 
            { 
            verde++; 
            } 
            if (azules[x][y] > rojos[x][y] && azules[x][y] > verdes[x][y]) 
            { 
            azul++; 
            } 
            if (rojos[x][y] == verdes[x][y] && rojos[x][y] > azules[x][y]) 
            { 
            amarillo++; 
            } 
            if (rojos[x][y]>verdes[x][y] && verdes[x][y] > azules[x][y]) 
            { 
            naranja++; 
            } 
            } 
                        i++; 
                        } 
                }       
             } 
         } 
        } 
        
        public static boolean pointContained(Geometry polygon, int xPx, int 
yPx, GeometryFactory geometryFactory) { 
                
                        double x1=258179.9; 
                        double x2=534282.3; 
                        double y1=4749870.1; 
                        double y2=4485321.8; 
                        
                        double x = x1+((500/(x2-x1))*xPx); 
                        double y = y2+((485/(y1-y2))*yPx); 
                        
                        Coordinate coord = new Coordinate(x,y); 
                        
                        com.vividsolutions.jts.geom.Point point = 
geometryFactory.createPoint( coord); 
                
                        
                return polygon.contains(point); 
                } 
        
        } 

Thanks in advance for helping me, 
Alberto    
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
GeoTools-GT2-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to