Skip to content

Commit 69395d4

Browse files
committed
Cleaned up usage of RepropjectionTransformer.
Tweaked documentation.
1 parent 258a067 commit 69395d4

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

core/src/main/scala/org/locationtech/rasterframes/expressions/transformers/XZ2Indexer.scala

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,22 @@ import org.apache.spark.sql.catalyst.expressions.{BinaryExpression, Expression,
3030
import org.apache.spark.sql.jts.JTSTypes
3131
import org.apache.spark.sql.rf.RasterSourceUDT
3232
import org.apache.spark.sql.types.{DataType, LongType}
33-
import org.apache.spark.sql.{Column, TypedColumn}
33+
import org.apache.spark.sql.{Column, TypedColumn, rf}
3434
import org.locationtech.geomesa.curve.XZ2SFC
35-
import org.locationtech.jts.geom.{Envelope, Geometry, GeometryFactory}
35+
import org.locationtech.jts.geom.{Envelope, Geometry}
3636
import org.locationtech.rasterframes.encoders.CatalystSerializer._
3737
import org.locationtech.rasterframes.expressions.DynamicExtractors._
38+
import org.locationtech.rasterframes.expressions.accessors.GetCRS
3839
import org.locationtech.rasterframes.expressions.row
3940
import org.locationtech.rasterframes.jts.ReprojectionTransformer
4041
import org.locationtech.rasterframes.ref.{RasterRef, RasterSource}
4142
import org.locationtech.rasterframes.tiles.ProjectedRasterTile
42-
import org.apache.spark.sql.rf
43-
import org.locationtech.rasterframes.expressions.accessors.GetCRS
4443

4544
/**
4645
* Constructs a XZ2 index in WGS84 from either a Geometry, Extent, ProjectedRasterTile, or RasterSource
47-
* See: https://www.geomesa.org/documentation/user/datastores/index_overview.html
46+
* This function is useful for [range partitioning](http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=registerjava#pyspark.sql.DataFrame.repartitionByRange).
47+
* Also see: https://www.geomesa.org/documentation/user/datastores/index_overview.html
48+
*
4849
* @param left geometry-like column
4950
* @param right CRS column
5051
* @param indexResolution resolution level of the space filling curve -
@@ -75,8 +76,6 @@ case class XZ2Indexer(left: Expression, right: Expression, indexResolution: Shor
7576
}
7677

7778
private lazy val indexer = XZ2SFC(indexResolution)
78-
@transient
79-
private lazy val gf = new GeometryFactory()
8079

8180
override protected def nullSafeEval(leftInput: Any, rightInput: Any): Any = {
8281
val crs = crsExtractor(right.dataType)(rightInput)
@@ -106,9 +105,9 @@ case class XZ2Indexer(left: Expression, right: Expression, indexResolution: Shor
106105
else {
107106
val trans = new ReprojectionTransformer(crs, LatLng)
108107
coords match {
109-
case e: Extent => trans(e.jtsGeom).getEnvelopeInternal
108+
case e: Extent => trans(e).getEnvelopeInternal
110109
case g: Geometry => trans(g).getEnvelopeInternal
111-
case e: Envelope => trans(gf.toGeometry(e)).getEnvelopeInternal
110+
case e: Envelope => trans(e).getEnvelopeInternal
112111
}
113112
}
114113

core/src/main/scala/org/locationtech/rasterframes/jts/ReprojectionTransformer.scala

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,24 @@
2121

2222
package org.locationtech.rasterframes.jts
2323

24-
import org.locationtech.jts.geom.{CoordinateSequence, Geometry}
24+
import org.locationtech.jts.geom.{CoordinateSequence, Envelope, Geometry, GeometryFactory}
2525
import org.locationtech.jts.geom.util.GeometryTransformer
2626
import geotrellis.proj4.CRS
27+
import geotrellis.vector.Extent
2728

2829
/**
2930
* JTS Geometry reprojection transformation routine.
3031
*
3132
* @since 6/4/18
3233
*/
3334
class ReprojectionTransformer(src: CRS, dst: CRS) extends GeometryTransformer {
34-
def apply(geometry: Geometry): Geometry = transform(geometry)
3535
lazy val transform = geotrellis.proj4.Transform(src, dst)
36+
@transient
37+
private lazy val gf = new GeometryFactory()
38+
def apply(geometry: Geometry): Geometry = transform(geometry)
39+
def apply(extent: Extent): Geometry = transform(extent.jtsGeom)
40+
def apply(env: Envelope): Geometry = transform(gf.toGeometry(env))
41+
3642
override def transformCoordinates(coords: CoordinateSequence, parent: Geometry): CoordinateSequence = {
3743
val fact = parent.getFactory
3844
val retval = fact.getCoordinateSequenceFactory.create(coords)

pyrasterframes/src/main/python/docs/reference.pymd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Convert an extent to a Geometry. The extent likely comes from @ref:[`st_extent`]
7373
Long rf_spatial_index(Extent extent, CRS crs)
7474
Long rf_spatial_index(ProjectedRasterTile proj_raster, CRS crs)
7575

76-
Constructs a XZ2 index in WGS84/EPSG:4326 from either a Geometry, Extent, ProjectedRasterTile and its CRS.
76+
Constructs a XZ2 index in WGS84/EPSG:4326 from either a Geometry, Extent, ProjectedRasterTile and its CRS. This function is useful for [range partitioning](http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=registerjava#pyspark.sql.DataFrame.repartitionByRange).
7777

7878
## Tile Metadata and Mutation
7979

0 commit comments

Comments
 (0)