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