本文整理了Java中org.geotools.geometry.jts.JTS.transform()
方法的一些代码示例,展示了JTS.transform()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。JTS.transform()
方法的具体详情如下:
包路径:org.geotools.geometry.jts.JTS
类名称:JTS
方法名:transform
[英]Transforms the coordinate using the provided math transform.
[中]使用提供的数学变换变换变换坐标。
代码示例来源:origin: opentripplanner/OpenTripPlanner
double remainingMeters = remainingSeconds * request.walkSpeed;
Geometry point = geomf.createPoint(vertexSeconds.getKey().getCoordinate());
point = JTS.transform(point, toMeters);
Geometry buffer = point.buffer(remainingMeters);
bufferLists.put(thresholdSeconds, buffer);
if ( ! resultsProjected) geom = JTS.transform(geom, fromMeters);
contours.put(threshold, geom);
代码示例来源:origin: geotools/geotools
/**
* Transforms the envelope using the specified math transform. Note that this method can not
* handle the case where the envelope contains the North or South pole, or when it cross the
* ±180� longitude, because {@linkplain MathTransform math transforms} do not carry
* suffisient informations. For a more robust envelope transformation, use {@link
* ReferencedEnvelope#transform(CoordinateReferenceSystem, boolean)} instead.
*
* @param envelope The envelope to transform.
* @param transform The transform to use.
* @return The transformed Envelope
* @throws TransformException if at least one coordinate can't be transformed.
*/
public static Envelope transform(final Envelope envelope, final MathTransform transform)
throws TransformException {
return transform(envelope, null, transform, 5);
}
代码示例来源:origin: geotools/geotools
public static Envelope reprojectEnvelopeByEpsg(int srcEpsg, int destEpsg, Envelope srcEnvelope)
throws FactoryException, TransformException {
CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:" + srcEpsg); // $NON-NLS-1$
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:" + destEpsg); // $NON-NLS-1$
MathTransform tr = CRS.findMathTransform(sourceCRS, targetCRS);
// From that point, I'm not sure which kind of object is returned by
// getLatLonBoundingBox(). But there is some convenience methods if CRS
// like:
return JTS.transform(srcEnvelope, tr);
}
代码示例来源:origin: geotools/geotools
static Geometry reprojectAndDensify(
Geometry first,
CoordinateReferenceSystem sourceCRS,
CoordinateReferenceSystem targetCRS)
throws FactoryException, TransformException {
if (targetCRS == null) {
targetCRS = CRS.parseWKT(ECKERT_IV_WKT);
}
MathTransform firstTransform = CRS.findMathTransform(sourceCRS, targetCRS);
Geometry geometry = JTS.transform(densify(first, sourceCRS, 0.01d), firstTransform);
return geometry;
}
代码示例来源:origin: geotools/geotools
/** Helper method to reproject a geometry. */
protected Geometry reproject(Object value, CoordinateReferenceSystem propertyCrs) {
if (value == null) {
return null;
}
if (!(value instanceof Geometry))
throw new IllegalArgumentException(
"Binary geometry filter, but second expression "
+ "is not a geometry literal? (it's a "
+ value.getClass()
+ ")");
Geometry geom = (Geometry) value;
// does it make sense to proceed?
if (geom.getUserData() == null
|| !(geom.getUserData() instanceof CoordinateReferenceSystem)) return geom;
try {
// reproject
CoordinateReferenceSystem geomCRS = (CoordinateReferenceSystem) geom.getUserData();
Geometry transformed =
JTS.transform(geom, CRS.findMathTransform(geomCRS, propertyCrs, true));
transformed.setUserData(propertyCrs);
return transformed;
} catch (Exception e) {
throw new RuntimeException("Could not reproject geometry " + value, e);
}
}
代码示例来源:origin: geotools/geotools
/**
* Compute the footprint.
*
* @param geometriesList the List of all the geometries found across the dataset
* @param transform
* @throws MismatchedDimensionException
* @throws TransformException
* @throws FactoryException
*/
private void computeFootprint(List<Polygon> geometriesList, MathTransform transform)
throws MismatchedDimensionException, TransformException, FactoryException {
// Creating the final multipolygon
Polygon[] polArray = new Polygon[geometriesList.size()];
Polygon[] polygons = geometriesList.toArray(polArray);
final Geometry innerGeometry = new MultiPolygon(polygons, GF);
if (footprintCoordinates == FootprintCoordinates.MODEL_SPACE) {
this.footprint = JTS.transform(innerGeometry, transform);
} else {
this.footprint = innerGeometry;
innerGeometry.setSRID(NO_SRID);
}
// Compute the ROIShape
if (!innerGeometry.isEmpty()) {
LiteShape2 shape = new LiteShape2(innerGeometry, TRANSLATED_TX, null, false);
roiShape = (ROIShape) new ROIShape(shape);
}
}
代码示例来源:origin: geotools/geotools
/**
* Applies transform to all geometry attribute.
*
* @param feature Feature to be transformed
* @param schema Schema for target transformation - transform( schema, crs )
* @param transform MathTransform used to transform coordinates - reproject( crs, crs )
* @return transformed Feature of type schema
* @throws TransformException
* @throws MismatchedDimensionException
* @throws IllegalAttributeException
*/
public static SimpleFeature transform(
SimpleFeature feature, SimpleFeatureType schema, MathTransform transform)
throws MismatchedDimensionException, TransformException, IllegalAttributeException {
feature = SimpleFeatureBuilder.copy(feature);
GeometryDescriptor geomType = schema.getGeometryDescriptor();
Geometry geom = (Geometry) feature.getAttribute(geomType.getLocalName());
geom = JTS.transform(geom, transform);
feature.setAttribute(geomType.getLocalName(), geom);
return feature;
}
代码示例来源:origin: geotools/geotools
/**
* Added this test after a bug was reported in JTS.transform for converting between WGS84 (2D)
* and DefaultGeocentric.CARTESIAN (3D).
*/
@Test
public void transformCoordinate2DCRSTo3D() throws Exception {
CoordinateReferenceSystem srcCRS = DefaultGeographicCRS.WGS84;
CoordinateReferenceSystem targetCRS = DefaultGeocentricCRS.CARTESIAN;
MathTransform transform = CRS.findMathTransform(srcCRS, targetCRS);
Coordinate srcCoord = new Coordinate(0, 0);
Coordinate dest0 = JTS.transform(srcCoord, null, transform);
srcCoord.x = 180;
Coordinate dest180 = JTS.transform(srcCoord, null, transform);
// Only a perfunctory check on the return values - mostly we
// just wanted to make sure there was no exception
assertEquals(dest0.x, -dest180.x, TOL);
assertEquals(dest0.y, dest180.y, TOL);
assertEquals(dest0.z, dest180.z, TOL);
}
代码示例来源:origin: geotools/geotools
/** Will reproject a geometry to another CRS. */
@DescribeProcess(
title = "Reproject Geometry",
description = "Reprojects a given geometry into a supplied coordinate reference system."
)
@DescribeResult(name = "result", description = "Reprojected geometry")
public static Geometry reproject(
@DescribeParameter(name = "geometry", description = "Input geometry") Geometry geometry,
@DescribeParameter(
name = "sourceCRS",
min = 0,
description = "Coordinate reference system of input geometry"
)
CoordinateReferenceSystem sourceCRS,
@DescribeParameter(
name = "targetCRS",
min = 0,
description = "Target coordinate reference system to use for reprojection"
)
CoordinateReferenceSystem targetCRS) {
try {
return JTS.transform(geometry, CRS.findMathTransform(sourceCRS, targetCRS, true));
} catch (Exception e) {
throw new ProcessException("Reprojection faiiled", e);
}
}
}
代码示例来源:origin: geotools/geotools
/**
* Reprojects a {@link JGrassRegion region}.
*
* @param sourceCRS the original {@link CoordinateReferenceSystem crs} of the region.
* @param targetCRS the target {@link CoordinateReferenceSystem crs} of the region.
* @param lenient defines whether to apply a lenient transformation or not.
* @return a new {@link JGrassRegion region}.
* @throws Exception exception that may be thrown when applying the transformation.
*/
public JGrassRegion reproject(
CoordinateReferenceSystem sourceCRS,
CoordinateReferenceSystem targetCRS,
boolean lenient)
throws Exception {
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, lenient);
Envelope envelope = getEnvelope();
Envelope targetEnvelope = JTS.transform(envelope, transform);
return new JGrassRegion(
targetEnvelope.getMinX(),
targetEnvelope.getMaxX(),
targetEnvelope.getMinY(),
targetEnvelope.getMaxY(),
getRows(),
getCols());
}
代码示例来源:origin: geotools/geotools
/** Tests the transformation of a single coordinate. */
@Test
public void testTransformCoordinate() throws FactoryException, TransformException {
Coordinate coord = new Coordinate(10, 10);
AffineTransform at = AffineTransform.getScaleInstance(0.5, 1);
MathTransform2D t =
(MathTransform2D)
ReferencingFactoryFinder.getMathTransformFactory(null)
.createAffineTransform(new GeneralMatrix(at));
coord = JTS.transform(coord, coord, t);
assertEquals(new Coordinate(5, 10), coord);
coord = JTS.transform(coord, coord, t.inverse());
assertEquals(new Coordinate(10, 10), coord);
CoordinateReferenceSystem crs =
ReferencingFactoryFinder.getCRSFactory(null).createFromWKT(UTM_ZONE_10N);
t =
(MathTransform2D)
ReferencingFactoryFinder.getCoordinateOperationFactory(null)
.createOperation(DefaultGeographicCRS.WGS84, crs)
.getMathTransform();
coord = new Coordinate(-123, 55);
coord = JTS.transform(coord, coord, t);
coord = JTS.transform(coord, coord, t.inverse());
assertEquals(-123, coord.x, EPS);
assertEquals(55, coord.y, EPS);
}
代码示例来源:origin: geotools/geotools
@Test
public void testUTMDatelineWrapping() throws Exception {
CoordinateReferenceSystem crs = CRS.decode("EPSG:32601", true);
ReferencedEnvelope re = new ReferencedEnvelope(300000, 409800, 5890200, 6000000, crs);
MathTransform mt = CRS.findMathTransform(crs, WGS84);
Geometry geom = JTS.toGeometry(re);
ReferencedEnvelope targetReferenceEnvelope =
new ReferencedEnvelope(-180, 180, -90, 90, WGS84);
ProjectionHandler ph =
ProjectionHandlerFinder.getHandler(targetReferenceEnvelope, crs, true);
Geometry preProcessed = ph.preProcess(geom);
Geometry transformed = JTS.transform(preProcessed, mt);
Geometry postProcessed = ph.postProcess(mt.inverse(), transformed);
// sits across the dateline and it's "small" (used to cover the entire planet)
Envelope ppEnvelope = postProcessed.getGeometryN(0).getEnvelopeInternal();
assertTrue(ppEnvelope.contains(180, 54));
// the original width is 109km, at this latitude one degree of longitude is only 65km
assertEquals(1.7, ppEnvelope.getWidth(), 0.1);
}
代码示例来源:origin: geotools/geotools
@Test
public void testWrapGeometrySmall() throws Exception {
// projected dateline CRS
CoordinateReferenceSystem FIJI = CRS.decode("EPSG:3460", true);
// a small geometry that will cross the dateline
Geometry g =
new WKTReader()
.read(
"POLYGON ((2139122 5880020, 2139122 5880030, 2139922 5880030, 2139122 5880020))");
Geometry original = g.copy();
// rendering bounds only slightly bigger than geometry
ReferencedEnvelope world = new ReferencedEnvelope(178, 181, -1, 1, WGS84);
// make sure the geometry is not wrapped, but it is preserved
ProjectionHandler handler = ProjectionHandlerFinder.getHandler(world, FIJI, true);
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
// no cutting expected
assertEquals(original, preProcessed);
// post process
MathTransform mt = CRS.findMathTransform(FIJI, WGS84);
Geometry transformed = JTS.transform(g, mt);
Geometry postProcessed = handler.postProcess(mt.inverse(), transformed);
// check the geometry is in the same area as the rendering envelope
assertTrue(world.contains(postProcessed.getEnvelopeInternal()));
}
代码示例来源:origin: geotools/geotools
@Test
public void testWrapGeometryLatLonMultipleTimes() throws Exception {
ReferencedEnvelope renderingEnvelope =
new ReferencedEnvelope(-90, 90, -580, 540, ED50_LATLON);
// a geometry close to the dateline
Geometry g = new WKTReader().read("POLYGON((-74 -33, -29 -33, -29 5, -74 5, -74 -33))");
// make sure the geometry is not wrapped, but it is preserved
ProjectionHandler handler =
ProjectionHandlerFinder.getHandler(renderingEnvelope, WGS84, true);
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
MathTransform mt = handler.getRenderingTransform(CRS.findMathTransform(WGS84, ED50_LATLON));
Geometry transformed = JTS.transform(preProcessed, mt);
// post process (provide identity transform to force wrap heuristic)
Geometry postProcessed = handler.postProcess(mt, transformed);
assertTrue(postProcessed.isValid());
// should have been replicated three times
assertEquals(3, postProcessed.getNumGeometries());
}
代码示例来源:origin: geotools/geotools
@Test
public void testWrapGeometryReprojectToED50() throws Exception {
ReferencedEnvelope world = new ReferencedEnvelope(-80, 80, -180, 180, ED50);
ProjectionHandler handler = ProjectionHandlerFinder.getHandler(world, WGS84, true);
// a geometry that will cross the dateline and sitting in the same area as the
// rendering envelope (with wgs84 lon/latcoordinates)
String wkt = "POLYGON((178 -80, 178 80, 182 80, 182 80, 178 -80))";
Geometry g = new WKTReader().read(wkt);
Geometry original = new WKTReader().read(wkt);
MathTransform mt = CRS.findMathTransform(WGS84, ED50);
mt = handler.getRenderingTransform(mt);
Geometry reprojected = JTS.transform(original, mt);
// make sure the geometry is not wrapped, but it is preserved
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
// no cutting expected
assertEquals(original, preProcessed);
// post process, this should wrap the geometry and clone it
Geometry postProcessed = handler.postProcess(mt, reprojected);
assertTrue(postProcessed instanceof MultiPolygon);
}
代码示例来源:origin: geotools/geotools
/** Checks that the measures of XYZM geometries are not transformed. */
@Test
public void testXyzmGeometriesMeasuresArePreserved() throws Exception {
// build a XYM geometry and reproject it
Geometry geometry = new WKTReader().read("LINESTRINGZM(170 -40 10 2, 190 40 15 7)");
MathTransform transform = CRS.findMathTransform(WGS84, MERCATOR, true);
Geometry transformed = JTS.transform(geometry, transform);
// check that coordinates where transformed but measures preserved
assertThat(transformed, instanceOf(LineString.class));
LineString line = (LineString) transformed;
assertThat(line.getCoordinateSequence().getDimension(), is(4));
assertThat(line.getCoordinateSequence().getMeasures(), is(1));
// check the first coordinate
assertThat(line.getCoordinateSequence().getX(0), closeTo(1.8924313434856504E7, EPS));
assertThat(line.getCoordinateSequence().getY(0), closeTo(-4838471.398061137, EPS));
assertThat(line.getCoordinateSequence().getZ(0), is(10.0));
assertThat(line.getCoordinateSequence().getM(0), is(2.0));
// check the second coordinate
assertThat(line.getCoordinateSequence().getX(1), closeTo(2.115070325072198E7, EPS));
assertThat(line.getCoordinateSequence().getY(1), closeTo(4838471.398061137, EPS));
assertThat(line.getCoordinateSequence().getZ(1), is(15.0));
assertThat(line.getCoordinateSequence().getM(1), is(7.0));
}
代码示例来源:origin: geotools/geotools
/** Checks that the measures of XYM geometries are not transformed. */
@Test
public void testXymGeometriesMeasuresArePreserved() throws Exception {
// build a XYM geometry and reproject it
Geometry geometry = new WKTReader().read("LINESTRINGM(170 -40 2, 190 40 7)");
MathTransform transform = CRS.findMathTransform(WGS84, MERCATOR, true);
Geometry transformed = JTS.transform(geometry, transform);
// check that coordinates where transformed but measures preserved
assertThat(transformed, instanceOf(LineString.class));
LineString line = (LineString) transformed;
assertThat(line.getCoordinateSequence().getDimension(), is(3));
assertThat(line.getCoordinateSequence().getMeasures(), is(1));
// check the first coordinate
assertThat(line.getCoordinateSequence().getX(0), closeTo(1.8924313434856504E7, EPS));
assertThat(line.getCoordinateSequence().getY(0), closeTo(-4838471.398061137, EPS));
assertThat(line.getCoordinateSequence().getZ(0), is(Double.NaN));
assertThat(line.getCoordinateSequence().getM(0), is(2.0));
// check the second coordinate
assertThat(line.getCoordinateSequence().getX(1), closeTo(2.115070325072198E7, EPS));
assertThat(line.getCoordinateSequence().getY(1), closeTo(4838471.398061137, EPS));
assertThat(line.getCoordinateSequence().getZ(1), is(Double.NaN));
assertThat(line.getCoordinateSequence().getM(1), is(7.0));
}
代码示例来源:origin: geotools/geotools
@Test
public void testWrapGeometryReprojectToLatLonED50() throws Exception {
ReferencedEnvelope world = new ReferencedEnvelope(-80, 80, -180, 180, ED50_LATLON);
// make sure the geometry is not wrapped, but it is preserved
ProjectionHandler handler = ProjectionHandlerFinder.getHandler(world, WGS84, true);
// a geometry that will cross the dateline and sitting in the same area as the
// rendering envelope (with wgs84 lon/latcoordinates)
String wkt = "POLYGON((178 -80, 178 80, 182 80, 182 80, 178 -80))";
Geometry g = new WKTReader().read(wkt);
Geometry original = new WKTReader().read(wkt);
MathTransform mt = CRS.findMathTransform(WGS84, ED50_LATLON);
MathTransform prepared =
handler.getRenderingTransform(CRS.findMathTransform(WGS84, ED50_LATLON));
Geometry reprojected = JTS.transform(original, prepared);
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
// no cutting expected
assertEquals(original, preProcessed);
// post process, this should wrap the geometry and clone it
Geometry postProcessed = handler.postProcess(prepared, reprojected);
assertTrue(postProcessed instanceof MultiPolygon);
}
代码示例来源:origin: geotools/geotools
@Test
public void testWrapGeometryMercator() throws Exception {
ReferencedEnvelope world = new ReferencedEnvelope(160, 180, -40, 40, WGS84);
ReferencedEnvelope mercatorEnvelope = world.transform(MERCATOR, true);
// move it so that it crosses the dateline (measures are still accurate for something
// crossing the dateline
mercatorEnvelope.translate(mercatorEnvelope.getWidth() / 2, 0);
// a geometry that will cross the dateline and sitting in the same area as the
// rendering envelope
Geometry g = new WKTReader().read("LINESTRING(170 -40, 190 40)");
// make sure the geometry is not wrapped
ProjectionHandler handler =
ProjectionHandlerFinder.getHandler(mercatorEnvelope, WGS84, true);
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
// no cutting expected
assertEquals(g, preProcessed);
// transform and post process
MathTransform mt = CRS.findMathTransform(WGS84, MERCATOR, true);
Geometry transformed = JTS.transform(g, mt);
Geometry postProcessed = handler.postProcess(mt.inverse(), transformed);
Envelope env = postProcessed.getEnvelopeInternal();
// check the geometry is in the same area as the rendering envelope
assertEquals(mercatorEnvelope.getMinX(), env.getMinX(), EPS);
assertEquals(mercatorEnvelope.getMaxX(), env.getMaxX(), EPS);
}
代码示例来源:origin: geotools/geotools
@Test
public void testDuplicateGeometryMercator() throws Exception {
ReferencedEnvelope world = new ReferencedEnvelope(-180, 180, -50, 50, WGS84);
ReferencedEnvelope mercatorEnvelope = world.transform(MERCATOR, true);
// a geometry that will cross the dateline and sitting in the same area as the
// rendering envelope
Geometry g = new WKTReader().read("LINESTRING(170 -50, 190 50)");
// make sure the geometry is not wrapped
ProjectionHandler handler =
ProjectionHandlerFinder.getHandler(mercatorEnvelope, WGS84, true);
assertTrue(handler.requiresProcessing(g));
Geometry preProcessed = handler.preProcess(g);
// no cutting expected
assertEquals(g, preProcessed);
// transform and post process
MathTransform mt = CRS.findMathTransform(WGS84, MERCATOR, true);
Geometry transformed = JTS.transform(g, mt);
Geometry postProcessed = handler.postProcess(mt, transformed);
// should have been duplicated in two parts
assertTrue(postProcessed instanceof MultiLineString);
MultiLineString mls = (MultiLineString) postProcessed;
assertEquals(2, mls.getNumGeometries());
// the two geometries width should be the same as 20°
double twentyDegWidth = mercatorEnvelope.getWidth() / 18;
assertEquals(twentyDegWidth, mls.getGeometryN(0).getEnvelopeInternal().getWidth(), EPS);
assertEquals(twentyDegWidth, mls.getGeometryN(1).getEnvelopeInternal().getWidth(), EPS);
}
内容来源于网络,如有侵权,请联系作者删除!