Hello,
i need to test if a point is in the domain of validity of a coordinate
system.
The coordinate system is created by parsing a wkt string.
Is there a simple way to test if a point is in this system ?
I try the code below, it works with certain wkt string by not with all.
import java.io.IOException;
import org.geotools.geometry.jts.JTSFactoryFinder;
import org.geotools.referencing.CRS;
import org.opengis.metadata.extent.Extent;
import org.opengis.metadata.extent.GeographicBoundingBox;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LinearRing;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
public class Test {
public static void main(String [] args) throws Exception {
String wktTest = "GEOGCS[" + "\"WGS 84\"," + " DATUM[" + "
\"WGS_1984\","
+ " SPHEROID[\"WGS
84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]]," + "
TOWGS84[0,0,0,0,0,0,0],"
+ " AUTHORITY[\"EPSG\",\"6326\"]]," + "
PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],"
+ "
UNIT[\"DMSH\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9108\"]]," + "
AXIS[\"Lat\",NORTH]," + " AXIS[\"Long\",EAST],"
+ " AUTHORITY[\"EPSG\",\"4326\"]]";
String wktTest1 = "PROJCS[\"Belge 1972 / Belge Lambert
72\",GEOGCS[\"Belge
1972\",DATUM[\"Reseau_National_Belge_1972\",SPHEROID[\"International
1924\",6378388.0,297.0,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-99.1,53.3,-112.5,0.419,-0.83,1.885,-1.0],AUTHORITY[\"EPSG\",\"6313\"]],PRIMEM[\"Greenwich\",0.0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.017453292519943295],AXIS[\"Lon\",EAST],AXIS[\"Lat\",NORTH],AUTHORITY[\"EPSG\",\"4313\"]],PROJECTION[\"Lambert_Conformal_Conic_2SP_Belgium\"],PARAMETER[\"central_meridian\",4.356939722222222],PARAMETER[\"latitude_of_origin\",90.0],PARAMETER[\"standard_parallel_1\",49.833333333333336],PARAMETER[\"false_easting\",150000.01256],PARAMETER[\"false_northing\",5400088.4378],PARAMETER[\"standard_parallel_2\",51.166666666666664],UNIT[\"m\",1.0],AXIS[\"x\",EAST],AXIS[\"y\",NORTH],AUTHORITY[\"EPSG\",\"31300\"]]";
String wktTest2 = "PROJCS[\"ED50 / France
EuroLambert\",GEOGCS[\"ED50\",DATUM[\"European_Datum_1950\",SPHEROID[\"International
1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],AUTHORITY[\"EPSG\",\"6230\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4230\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",46.8],PARAMETER[\"central_meridian\",2.337229166666667],PARAMETER[\"scale_factor\",0.99987742],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",2200000],AUTHORITY[\"EPSG\",\"2192\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]";
String wktTest3 = "PROJCS[\"NTF (Paris) / France II
(deprecated)\",GEOGCS[\"NTF
(Paris)\",DATUM[\"Nouvelle_Triangulation_Francaise_Paris\",SPHEROID[\"Clarke
1880
(IGN)\",6378249.2,293.4660212936269,AUTHORITY[\"EPSG\",\"7011\"]],TOWGS84[-168,-60,320,0,0,0,0],AUTHORITY[\"EPSG\",\"6807\"]],PRIMEM[\"Paris\",2.33722917,AUTHORITY[\"EPSG\",\"8903\"]],UNIT[\"grad\",0.01570796326794897,AUTHORITY[\"EPSG\",\"9105\"]],AUTHORITY[\"EPSG\",\"4807\"]],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],PROJECTION[\"Lambert_Conformal_Conic_1SP\"],PARAMETER[\"latitude_of_origin\",52],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",0.99987742],PARAMETER[\"false_easting\",600000],PARAMETER[\"false_northing\",2200000],AUTHORITY[\"EPSG\",\"27582\"],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH]]";
testGeotools(wktTest); // works
testGeotools(wktTest1); // works
testGeotools(wktTest2); // exception
testGeotools(wktTest3); // exception
}
public static void testGeotools(String wkt) throws IOException {
try {
// Create a point
GeometryFactory geometryFactory =
JTSFactoryFinder.getGeometryFactory(null);
Point point = geometryFactory.createPoint(new Coordinate(2, 1));
// Parse the wkt string
CoordinateReferenceSystem crs = CRS.parseWKT(wkt);
// Try to find the EPSG code from the wkt string
String code = CRS.lookupIdentifier(crs, true);
// Get the system from the epsg code
CoordinateReferenceSystem crs2 = CRS.decode(code);
// Get the Domain of Validity
Extent extent = crs2.getDomainOfValidity();
// Get the bounding box of the extent
GeographicBoundingBox test = (GeographicBoundingBox)
extent.getGeographicElements().toArray()[0];
Coordinate [] coords = new Coordinate [] {new
Coordinate(test.getWestBoundLongitude(), test.getSouthBoundLatitude()),
new Coordinate(test.getWestBoundLongitude(),
test.getNorthBoundLatitude()),
new Coordinate(test.getEastBoundLongitude(),
test.getNorthBoundLatitude()),
new Coordinate(test.getEastBoundLongitude(),
test.getSouthBoundLatitude()),
new Coordinate(test.getWestBoundLongitude(),
test.getSouthBoundLatitude())};
LinearRing ring = geometryFactory.createLinearRing(coords);
LinearRing holes[] = null;
// Create the polygon of the bounding box
Polygon polygon = geometryFactory.createPolygon(ring, holes);
// Test if the point is in the polygon
boolean bool = polygon.intersects(point);
System.out.println(bool);
} catch (Exception e) {
/* handle some possible errors of of the IOoperations */
e.printStackTrace();
}
}
}
--
View this message in context:
http://osgeo-org.1803224.n2.nabble.com/Point-in-a-domain-of-validity-tp6409999p6409999.html
Sent from the geotools-gt2-users mailing list archive at Nabble.com.
------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery,
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now.
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users