You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2020/10/12 22:48:28 UTC

[incubator-sedona] branch master updated: [SEDONA-1] Make Sedona depend on a LocationTech JTS 1.16.1 fork (#484)

This is an automated email from the ASF dual-hosted git repository.

jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-sedona.git


The following commit(s) were added to refs/heads/master by this push:
     new 615904b  [SEDONA-1] Make Sedona depend on a LocationTech JTS 1.16.1 fork (#484)
615904b is described below

commit 615904bdb7f5a60174662491e14da9b4b7232491
Author: Jia Yu <ji...@apache.org>
AuthorDate: Mon Oct 12 15:48:21 2020 -0700

    [SEDONA-1] Make Sedona depend on a LocationTech JTS 1.16.1 fork (#484)
    
    * Change all JTS paths to org.locationtech.jts
    
    * Change all JTS paths to org.locationtech.jts
    
    * Update the circle type
    
    * Update JTS GeoJSONconverter and GeoTools to a newer veriosn
    
    * Fix all issues and now Sedona is working with JTsplus 1.16, GeoTools 23.2
    
    * Jtsplus python fix (#485)
    
    * Fix issue with failing python tests.
    
    * Fix issue with failing python tests.
    
    * Add missing dependency.
    
    * Remove skip tests flag.
    
    * Fix issue with failing python tests.
    
    Co-authored-by: Paweł Kociński <pa...@gmail.com>
---
 .gitmodules                                        |   4 +
 .travis.yml                                        |  30 ++++--
 contrib/R                                          |   2 +-
 core/pom.xml                                       |   9 +-
 .../formatMapper/EarthdataHDFPointMapper.java      |   8 +-
 .../geospark/formatMapper/FormatMapper.java        |  22 ++---
 .../geospark/formatMapper/GeoJsonReader.java       |   2 +-
 .../geospark/formatMapper/RddReader.java           |   2 +-
 .../geospark/formatMapper/WkbReader.java           |   2 +-
 .../geospark/formatMapper/WktReader.java           |   2 +-
 .../formatMapper/shapefileParser/ShapefileRDD.java |  16 +--
 .../shapefileParser/ShapefileReader.java           |  16 +--
 .../parseUtils/shp/MultiPointParser.java           |   8 +-
 .../parseUtils/shp/PointParser.java                |   8 +-
 .../parseUtils/shp/PolyLineParser.java             |   8 +-
 .../parseUtils/shp/PolygonParser.java              |  10 +-
 .../parseUtils/shp/ShapeParser.java                |   6 +-
 .../shapefileParser/parseUtils/shp/ShapeSerde.java |  16 +--
 .../shapefileParser/parseUtils/shp/ShapeType.java  |   2 +-
 .../shapefileParser/shapes/PrimitiveShape.java     |   4 +-
 .../geospark/geometryObjects/Circle.java           |  88 +++++++++--------
 .../geospark/geometryObjects/GeometrySerde.java    |  20 ++--
 .../geometryObjects/SpatialIndexSerde.java         |  14 +--
 .../geospark/joinJudgement/DedupParams.java        |   2 +-
 .../joinJudgement/DynamicIndexLookupJudgement.java |  10 +-
 .../geospark/joinJudgement/JudgementBase.java      |  10 +-
 .../joinJudgement/LeftIndexLookupJudgement.java    |   4 +-
 .../joinJudgement/NestedLoopJudgement.java         |   2 +-
 .../joinJudgement/RightIndexLookupJudgement.java   |   4 +-
 .../knnJudgement/GeometryDistanceComparator.java   |   2 +-
 .../geospark/knnJudgement/KnnJudgement.java        |   2 +-
 .../knnJudgement/KnnJudgementUsingIndex.java       |  10 +-
 .../geospark/rangeJudgement/JudgementBase.java     |   2 +-
 .../geospark/rangeJudgement/RangeFilter.java       |   2 +-
 .../rangeJudgement/RangeFilterUsingIndex.java      |   4 +-
 .../geospark/serde/GeoSparkKryoRegistrator.java    |  20 ++--
 .../showcase/EarthdataMapperRunnableExample.java   |   2 +-
 .../org/datasyslab/geospark/showcase/Example.java  |   8 +-
 .../showcase/UserSuppliedLineStringMapper.java     |  16 +--
 .../geospark/showcase/UserSuppliedPointMapper.java |   6 +-
 .../showcase/UserSuppliedPolygonMapper.java        |  14 +--
 .../showcase/UserSuppliedRectangleMapper.java      |  16 +--
 .../geospark/spatialOperator/JoinQuery.java        |   2 +-
 .../geospark/spatialOperator/KNNQuery.java         |   2 +-
 .../geospark/spatialOperator/RangeQuery.java       |   8 +-
 .../spatialPartitioning/EqualPartitioning.java     |   2 +-
 .../spatialPartitioning/FlatGridPartitioner.java   |   4 +-
 .../spatialPartitioning/HilbertPartitioning.java   |   2 +-
 .../geospark/spatialPartitioning/KDBTree.java      |   2 +-
 .../spatialPartitioning/KDBTreePartitioner.java    |   6 +-
 .../spatialPartitioning/QuadtreePartitioning.java  |   2 +-
 .../spatialPartitioning/RtreePartitioning.java     |   6 +-
 .../spatialPartitioning/SpatialPartitioner.java    |   4 +-
 .../spatialPartitioning/VoronoiPartitioning.java   |  16 +--
 .../quadtree/QuadRectangle.java                    |   2 +-
 .../quadtree/QuadTreePartitioner.java              |   6 +-
 .../quadtree/StandardQuadTree.java                 |   2 +-
 .../datasyslab/geospark/spatialRDD/CircleRDD.java  |   8 +-
 .../geospark/spatialRDD/LineStringRDD.java         |   4 +-
 .../datasyslab/geospark/spatialRDD/PointRDD.java   |   4 +-
 .../datasyslab/geospark/spatialRDD/PolygonRDD.java |  16 +--
 .../geospark/spatialRDD/RectangleRDD.java          |   4 +-
 .../datasyslab/geospark/spatialRDD/SpatialRDD.java |  18 ++--
 .../geospark/spatialRddTool/IndexBuilder.java      |  10 +-
 .../geospark/spatialRddTool/StatCalculator.java    |   4 +-
 .../geospark/utils/CRSTransformation.java          |   8 +-
 .../datasyslab/geospark/utils/GeoSparkConf.java    |   2 +-
 .../geospark/utils/HalfOpenRectangle.java          |   4 +-
 .../geospark/python/adapters/EnvelopeAdapter.scala |   2 +-
 .../python/adapters/GeoSparkPythonConverter.scala  |   2 +-
 .../geospark/python/adapters/GeometryAdapter.scala |   2 +-
 .../adapters/PythonRddToJavaRDDAdapter.scala       |   2 +-
 .../python/adapters/RawJvmIndexRDDAdapter.scala    |   4 +-
 .../adapters/SpatialObjectLoaderAdapter.scala      |   4 +-
 .../python/translation/CircleSerializer.scala      |   2 +-
 .../python/translation/FlatPairRddConverter.scala  |   2 +-
 .../python/translation/GeometryRddConverter.scala  |   2 +-
 .../translation/GeometrySeqToPythonConverter.scala |   2 +-
 .../python/translation/GeometrySerializer.scala    |   4 +-
 .../translation/HashSetPairRddConverter.scala      |   2 +-
 .../translation/PythonGeometrySerializer.scala     |   4 +-
 .../translation/PythonRDDToJavaConverter.scala     |   2 +-
 .../translation/PythonRddToJavaRDDConverter.scala  |   2 +-
 .../geospark/python/utils/implicits.scala          |   2 +-
 .../ScalaEarthdataMapperRunnableExample.scala      |   2 +-
 .../geospark/showcase/ScalaExample.scala           |   2 +-
 .../geospark/showcase/SpatialJoinShp.scala         |   2 +-
 .../shapefileParser/shapes/GeometrySerdeTest.java  |   8 +-
 .../shapefileParser/shapes/ShapefileRDDTest.java   |  10 +-
 .../shapes/ShapefileReaderTest.java                |   8 +-
 .../geospark/geometryObjects/CircleTest.java       |  14 +--
 .../geometryObjects/SpatialIndexSerdeTest.java     |  14 +--
 .../datasyslab/geospark/io/EarthdataHDFTest.java   |   2 +-
 .../JoinQueryCorrectnessChecker.java               |  12 +--
 .../geospark/spatialOperator/JoinTestBase.java     |   4 +-
 .../spatialOperator/LineStringJoinTest.java        |   4 +-
 .../spatialOperator/LineStringKnnTest.java         |   8 +-
 .../spatialOperator/LineStringRangeTest.java       |   2 +-
 .../geospark/spatialOperator/PointJoinTest.java    |   4 +-
 .../geospark/spatialOperator/PointKnnTest.java     |   6 +-
 .../geospark/spatialOperator/PointRangeTest.java   |   2 +-
 .../geospark/spatialOperator/PolygonJoinTest.java  |   2 +-
 .../geospark/spatialOperator/PolygonKnnTest.java   |   8 +-
 .../geospark/spatialOperator/PolygonRangeTest.java |   2 +-
 .../spatialOperator/RectangleJoinTest.java         |   2 +-
 .../geospark/spatialOperator/RectangleKnnTest.java |   8 +-
 .../spatialOperator/RectangleRangeTest.java        |   2 +-
 .../quadtree/QuadTreePartitioningTest.java         |   8 +-
 .../spatialRDD/BoundaryAggregationTest.java        |  14 +--
 .../BoundaryAndCountAggregationTest.java           |   8 +-
 .../geospark/spatialRDD/LineStringRDDTest.java     |   8 +-
 .../geospark/spatialRDD/PointRDDTest.java          |   8 +-
 .../geospark/spatialRDD/PolygonRDDTest.java        |  10 +-
 .../geospark/spatialRDD/RectangleRDDTest.java      |   8 +-
 .../geospark/spatialRDD/SpatialRDDTestBase.java    |   2 +-
 .../geospark/utils/CRSTransformationTest.java      |  12 +--
 .../org/datasyslab/geospark/utils/testGeoJSON.java |   6 +-
 .../geospark/python/GeometrySample.scala           |   2 +-
 .../geospark/python/PythonTestSpec.scala           |   4 +-
 .../scala/org/datasyslab/geospark/scalaTest.scala  |   2 +-
 jts                                                |   1 +
 pom.xml                                            |   9 +-
 python/geospark/core/formatMapper/disc_utils.py    |   6 +-
 python/geospark/register/java_libs.py              |   2 +-
 python/tests/properties/linestring_properties.py   |   4 +-
 python/tests/properties/point_properties.py        |   4 +-
 python/tests/properties/polygon_properties.py      |   2 +-
 .../spatial_objects/line_string/.part-00000.crc    | Bin 1308 -> 1344 bytes
 .../spatial_objects/line_string/.part-00001.crc    | Bin 1324 -> 1344 bytes
 .../spatial_objects/line_string/.part-00002.crc    | Bin 1312 -> 1340 bytes
 .../spatial_objects/line_string/.part-00003.crc    | Bin 1336 -> 1360 bytes
 .../spatial_objects/line_string/.part-00004.crc    | Bin 1308 -> 1368 bytes
 .../spatial_objects/line_string/part-00000         | Bin 166130 -> 170595 bytes
 .../spatial_objects/line_string/part-00001         | Bin 168428 -> 170925 bytes
 .../spatial_objects/line_string/part-00002         | Bin 166613 -> 170430 bytes
 .../spatial_objects/line_string/part-00003         | Bin 169555 -> 172788 bytes
 .../spatial_objects/line_string/part-00004         | Bin 166291 -> 173943 bytes
 .../line_string_index/.part-00000.crc              | Bin 1248 -> 1208 bytes
 .../line_string_index/.part-00001.crc              | Bin 1260 -> 1212 bytes
 .../line_string_index/.part-00002.crc              | Bin 1252 -> 1204 bytes
 .../line_string_index/.part-00003.crc              | Bin 1276 -> 1220 bytes
 .../line_string_index/.part-00004.crc              | Bin 1248 -> 1232 bytes
 .../spatial_objects/line_string_index/part-00000   | Bin 158269 -> 153259 bytes
 .../spatial_objects/line_string_index/part-00001   | Bin 160047 -> 153751 bytes
 .../spatial_objects/line_string_index/part-00002   | Bin 159031 -> 153013 bytes
 .../spatial_objects/line_string_index/part-00003   | Bin 161825 -> 154735 bytes
 .../spatial_objects/line_string_index/part-00004   | Bin 158523 -> 156457 bytes
 .../spatial_objects/point/.part-00000.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00001.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00002.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00003.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00004.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00005.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00006.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00007.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00008.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00009.crc          | Bin 508 -> 512 bytes
 .../spatial_objects/point/.part-00010.crc          | Bin 496 -> 500 bytes
 .../resources/spatial_objects/point/part-00000     | Bin 63881 -> 64389 bytes
 .../resources/spatial_objects/point/part-00001     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00002     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00003     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00004     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00005     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00006     | Bin 63655 -> 64155 bytes
 .../resources/spatial_objects/point/part-00007     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00008     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00009     | Bin 63768 -> 64272 bytes
 .../resources/spatial_objects/point/part-00010     | Bin 62256 -> 62769 bytes
 .../spatial_objects/point_index/.part-00000.crc    | Bin 484 -> 468 bytes
 .../spatial_objects/point_index/.part-00001.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00002.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00003.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00004.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00005.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00006.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00007.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00008.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00009.crc    | Bin 484 -> 464 bytes
 .../spatial_objects/point_index/.part-00010.crc    | Bin 480 -> 460 bytes
 .../spatial_objects/point_index/part-00000         | Bin 60885 -> 58374 bytes
 .../spatial_objects/point_index/part-00001         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00002         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00003         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00004         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00005         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00006         | Bin 60473 -> 57978 bytes
 .../spatial_objects/point_index/part-00007         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00008         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00009         | Bin 60679 -> 58176 bytes
 .../spatial_objects/point_index/part-00010         | Bin 60061 -> 57582 bytes
 .../spatial_objects/polygon/.part-00000.crc        | Bin 1748 -> 1768 bytes
 .../spatial_objects/polygon/.part-00001.crc        | Bin 1736 -> 1764 bytes
 .../spatial_objects/polygon/.part-00002.crc        | Bin 1736 -> 1776 bytes
 .../spatial_objects/polygon/.part-00003.crc        | Bin 1680 -> 1768 bytes
 .../spatial_objects/polygon/.part-00004.crc        | Bin 1740 -> 1708 bytes
 .../resources/spatial_objects/polygon/part-00000   | Bin 222442 -> 225090 bytes
 .../resources/spatial_objects/polygon/part-00001   | Bin 221110 -> 224638 bytes
 .../resources/spatial_objects/polygon/part-00002   | Bin 220888 -> 226220 bytes
 .../resources/spatial_objects/polygon/part-00003   | Bin 213590 -> 224864 bytes
 .../resources/spatial_objects/polygon/part-00004   | Bin 221332 -> 217216 bytes
 .../spatial_objects/polygon_index/.part-00000.crc  | Bin 1772 -> 1688 bytes
 .../spatial_objects/polygon_index/.part-00001.crc  | Bin 1756 -> 1680 bytes
 .../spatial_objects/polygon_index/.part-00002.crc  | Bin 1752 -> 1700 bytes
 .../spatial_objects/polygon_index/.part-00003.crc  | Bin 1696 -> 1684 bytes
 .../spatial_objects/polygon_index/.part-00004.crc  | Bin 1756 -> 1628 bytes
 .../spatial_objects/polygon_index/part-00000       | Bin 225419 -> 214667 bytes
 .../spatial_objects/polygon_index/part-00001       | Bin 223271 -> 213979 bytes
 .../spatial_objects/polygon_index/part-00002       | Bin 222913 -> 216387 bytes
 .../spatial_objects/polygon_index/part-00003       | Bin 215753 -> 214323 bytes
 .../spatial_objects/polygon_index/part-00004       | Bin 223629 -> 207099 bytes
 .../spark/sql/geosparksql/UDT/GeometryUDT.scala    |   2 +-
 .../spark/sql/geosparksql/UDT/IndexUDT.scala       |   2 +-
 .../geosparksql/UDT/UdtRegistratorWrapper.scala    |   4 +-
 .../expressions/AggregateFunctions.scala           |   2 +-
 .../sql/geosparksql/expressions/Constructors.scala |   2 +-
 .../sql/geosparksql/expressions/Functions.scala    |  14 +--
 .../sql/geosparksql/expressions/implicits.scala    |   2 +-
 .../strategy/join/DistanceJoinExec.scala           |   2 +-
 .../strategy/join/TraitJoinQueryExec.scala         |   2 +-
 .../org/datasyslab/geosparksql/UDF/Catalog.scala   |   2 +-
 .../org/datasyslab/geosparksql/utils/Adapter.scala |   2 +-
 .../geosparksql/utils/GeometrySerializer.scala     |   6 +-
 .../geosparksql/utils/IndexSerializer.scala        |   2 +-
 .../geosparksql/utils/PythonAdapterWrapper.scala   |   2 +-
 .../datasyslab/geosparksql/adapterTestJava.java    |  43 +++------
 .../datasyslab/geosparksql/GeometrySample.scala    |   4 +-
 .../datasyslab/geosparksql/adapterTestScala.scala  |  45 ++-------
 .../geosparksql/aggregateFunctionTestScala.scala   |  11 +--
 .../geosparksql/constructorTestScala.scala         |  19 +---
 .../datasyslab/geosparksql/functionTestScala.scala |  41 ++------
 .../org/datasyslab/geosparksql/implicits.scala     |   4 +-
 .../geosparksql/predicateJoinTestScala.scala       | 107 +--------------------
 .../geosparksql/predicateTestScala.scala           |  14 ---
 .../geosparkviz/core/GlobalParameter.java          |   2 +-
 .../geosparkviz/core/VisualizationOperator.java    |   8 +-
 .../visualizationEffect/ChoroplethMap.java         |   4 +-
 .../extension/visualizationEffect/HeatMap.java     |   2 +-
 .../extension/visualizationEffect/ScatterPlot.java |   2 +-
 .../datasyslab/geosparkviz/showcase/Example.java   |   4 +-
 .../org/datasyslab/geosparkviz/utils/Pixel.java    |   6 +-
 .../geosparkviz/utils/RasterizationUtils.java      |  14 +--
 .../sql/geosparkviz/expressions/Pixelize.scala     |   2 +-
 .../geosparkviz/showcase/ScalaExample.scala        |   2 +-
 .../geosparkviz/sql/operator/VizPartitioner.scala  |   2 +-
 .../datasyslab/geosparkviz/ChoroplethmapTest.java  |   2 +-
 .../geosparkviz/GeoSparkVizTestBase.java           |   2 +-
 .../datasyslab/geosparkviz/NYCTripPointMapper.java |  10 +-
 .../org/datasyslab/geosparkviz/NYCTripTest.java    |  18 ++--
 .../org/datasyslab/geosparkviz/rdd/scalaTest.scala |   2 +-
 .../geosparkviz/sql/optVizOperatorTest.scala       |   6 +-
 .../geosparkviz/sql/standardVizOperatorTest.scala  |   8 +-
 252 files changed, 560 insertions(+), 741 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index 0644f92..3701fc1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,7 @@
 [submodule "contrib/R"]
 	path = contrib/R
 	url = https://github.com/harryprince/geospark
+[submodule "jts"]
+	path = jts
+	url = https://github.com/jiayuasu/jts.git
+	branch = 1.16.x
diff --git a/.travis.yml b/.travis.yml
index 06bfb9b..7a79501 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,11 +6,13 @@ jdk:
   - openjdk8
 python:
   - "3.7"
+
 before_install:
   - sudo apt-get -y install python3-pip python-dev
   - sudo pip3 install -U setuptools
   - sudo pip3 install -U wheel
   - sudo pip3 install -U virtualenvwrapper
+
 install:
   - python3 -m pip install pipenv
   - wget https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop2.7.tgz
@@ -18,7 +20,7 @@ install:
   - rm spark-3.0.0-bin-hadoop2.7.tgz
 
 script:
-  - (cd python;pipenv install --dev) 
+  - (cd python;pipenv install --dev)
   - export SPARK_HOME=$PWD/spark-3.0.0-bin-hadoop2.7
   - export PYTHONPATH=$SPARK_HOME/python
   - mvn -q clean install
@@ -26,12 +28,22 @@ script:
   - find sql/target/ -iregex "sql\/target\/geospark-sql_[0-9]\.[0-9]-[0-9]\.[0-9]\.[0-9]\(-SNAPSHOT\)?\.jar" -exec cp {} $SPARK_HOME/jars \;
   - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=com.googlecode.efficient-java-matrix-library:core:0.26
   - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=net.java.dev.jsr-275:jsr-275:1.0-beta-2
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-epsg-extension:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-epsg-hsql:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-main:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-metadata:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-opengis:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-referencing:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-shapefile:17.0
-  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.hsqldb:hsqldb:2.3.0
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-epsg-extension:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools.ogc:org.w3.xlink:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools.ogc:net.opengis.ows:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-epsg-hsql:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-main:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-metadata:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-opengis:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-referencing:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.geotools:gt-shapefile:23.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.hsqldb:hsqldb:2.4.1
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=javax.measure:unit-api:1.0
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=tec.uom:uom-se:1.0.8
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=tec.uom.lib:uom-lib-common:1.0.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=si.uom:si-quantity:0.7.1
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=si.uom:si-units-java8:0.7.1
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=systems.uom:systems-common-java8:0.7.2
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.ejml:ejml-core:0.34
+  - mvn dependency:get -Ddest=${SPARK_HOME}/jars -Dartifact=org.ejml:ejml-ddense:0.34
   - (cd python;pipenv run pytest tests)
diff --git a/contrib/R b/contrib/R
index 4c96bc2..732c6ac 160000
--- a/contrib/R
+++ b/contrib/R
@@ -1 +1 @@
-Subproject commit 4c96bc2c698855ceda0339f80fbcebf88b4d3838
+Subproject commit 732c6ac0898d6018599b6ab4ca651e631e2f4e69
diff --git a/core/pom.xml b/core/pom.xml
index b4c79ad..13bc064 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -33,14 +33,15 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.datasyslab</groupId>
-            <artifactId>JTSplus</artifactId>
-            <version>0.1.4</version>
+            <groupId>org.locationtech.jts</groupId>
+            <artifactId>jts-core</artifactId>
+            <version>1.16.2-SNAPSHOT</version>
+            <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.wololo</groupId>
             <artifactId>jts2geojson</artifactId>
-            <version>0.10.0</version>
+            <version>0.13.0</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.fasterxml.jackson.core</groupId>
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/EarthdataHDFPointMapper.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/EarthdataHDFPointMapper.java
index c5ef509..5989cf1 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/EarthdataHDFPointMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/EarthdataHDFPointMapper.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.apache.spark.api.java.function.FlatMapFunction;
 import org.datasyslab.sernetcdf.SerNetCDFUtils;
 import ucar.ma2.Array;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/FormatMapper.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/FormatMapper.java
index 42f742c..f54fa4d 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/FormatMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/FormatMapper.java
@@ -16,17 +16,17 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryCollection;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.io.ParseException;
-import com.vividsolutions.jts.io.WKBReader;
-import com.vividsolutions.jts.io.WKTReader;
-import com.vividsolutions.jts.operation.valid.IsValidOp;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryCollection;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKBReader;
+import org.locationtech.jts.io.WKTReader;
+import org.locationtech.jts.operation.valid.IsValidOp;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.function.FlatMapFunction;
 import org.datasyslab.geospark.enums.FileDataSplitter;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/GeoJsonReader.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/GeoJsonReader.java
index 8fb66a2..ce123b3 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/GeoJsonReader.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/GeoJsonReader.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.datasyslab.geospark.enums.FileDataSplitter;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/RddReader.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/RddReader.java
index 2bd1b21..f99ad55 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/RddReader.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/RddReader.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.JavaRDD;
 import org.datasyslab.geospark.spatialRDD.SpatialRDD;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/WkbReader.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/WkbReader.java
index 47be092..247cf02 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/WkbReader.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/WkbReader.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.datasyslab.geospark.enums.FileDataSplitter;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/WktReader.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/WktReader.java
index 961e1b3..b53e17e 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/WktReader.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/WktReader.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.formatMapper;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.datasyslab.geospark.enums.FileDataSplitter;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileRDD.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileRDD.java
index 9d166c8..8ef80bc 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileRDD.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileReader.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileReader.java
index a90d4ec..cc96cc3 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileReader.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/ShapefileReader.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
index 4851a11..ef1400d 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/MultiPointParser.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.CoordinateSequence;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.CoordinateSequence;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.MultiPoint;
 
 import java.io.IOException;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PointParser.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
index c0e3525..ac265f7 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PointParser.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 
 import java.io.IOException;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
index cc53815..4dacd49 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolyLineParser.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.CoordinateSequence;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
+import org.locationtech.jts.geom.CoordinateSequence;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
 
 import java.io.IOException;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
index 44d9da1..c808120 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/PolygonParser.java
@@ -16,11 +16,11 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.CoordinateSequence;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.CoordinateSequence;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.Polygon;
 import org.geotools.geometry.jts.coordinatesequence.CoordinateSequences;
 
 import java.io.IOException;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
index d32cf70..436c718 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeParser.java
@@ -16,9 +16,9 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.CoordinateSequence;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.CoordinateSequence;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
 
 import java.io.IOException;
 import java.io.Serializable;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
index fd1f2fb..c7c607d 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeSerde.java
@@ -18,14 +18,14 @@
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
 import com.esotericsoftware.kryo.io.Input;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
index 1e8ef16..f3f1c7a 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/parseUtils/shp/ShapeType.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp;
 
-import com.vividsolutions.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.GeometryFactory;
 
 import java.io.Serializable;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/PrimitiveShape.java b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/PrimitiveShape.java
index b69e0b4..ef83347 100644
--- a/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/PrimitiveShape.java
+++ b/core/src/main/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/PrimitiveShape.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.shapes;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
 import org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp.ShapeParser;
 import org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp.ShapeReaderFactory;
 import org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp.ShapeType;
diff --git a/core/src/main/java/org/datasyslab/geospark/geometryObjects/Circle.java b/core/src/main/java/org/datasyslab/geospark/geometryObjects/Circle.java
index b712327..f5cf610 100644
--- a/core/src/main/java/org/datasyslab/geospark/geometryObjects/Circle.java
+++ b/core/src/main/java/org/datasyslab/geospark/geometryObjects/Circle.java
@@ -16,19 +16,19 @@
  */
 package org.datasyslab.geospark.geometryObjects;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.CoordinateFilter;
-import com.vividsolutions.jts.geom.CoordinateSequenceComparator;
-import com.vividsolutions.jts.geom.CoordinateSequenceFilter;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryCollection;
-import com.vividsolutions.jts.geom.GeometryComponentFilter;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.GeometryFilter;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.CoordinateFilter;
+import org.locationtech.jts.geom.CoordinateSequenceComparator;
+import org.locationtech.jts.geom.CoordinateSequenceFilter;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryCollection;
+import org.locationtech.jts.geom.GeometryComponentFilter;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.GeometryFilter;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 
 // TODO: Auto-generated Javadoc
 
@@ -128,7 +128,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#covers(com.vividsolutions.jts.geom.Geometry)
+     * @see org.locationtech.jts.geom.Geometry#covers(org.locationtech.jts.geom.Geometry)
      */
     @Override
     public boolean covers(Geometry other)
@@ -184,7 +184,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#intersects(com.vividsolutions.jts.geom.Geometry)
+     * @see org.locationtech.jts.geom.Geometry#intersects(org.locationtech.jts.geom.Geometry)
      */
     @Override
     public boolean intersects(Geometry other)
@@ -290,7 +290,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getGeometryType()
+     * @see org.locationtech.jts.geom.Geometry#getGeometryType()
      */
     @Override
     public String getGeometryType()
@@ -299,7 +299,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getCoordinate()
+     * @see org.locationtech.jts.geom.Geometry#getCoordinate()
      */
     @Override
     public Coordinate getCoordinate()
@@ -308,7 +308,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getCoordinates()
+     * @see org.locationtech.jts.geom.Geometry#getCoordinates()
      */
     @Override
     public Coordinate[] getCoordinates()
@@ -317,7 +317,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getNumPoints()
+     * @see org.locationtech.jts.geom.Geometry#getNumPoints()
      */
     @Override
     public int getNumPoints()
@@ -326,7 +326,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#isEmpty()
+     * @see org.locationtech.jts.geom.Geometry#isEmpty()
      */
     @Override
     public boolean isEmpty()
@@ -335,7 +335,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getDimension()
+     * @see org.locationtech.jts.geom.Geometry#getDimension()
      */
     @Override
     public int getDimension()
@@ -344,7 +344,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getBoundary()
+     * @see org.locationtech.jts.geom.Geometry#getBoundary()
      */
     @Override
     public Geometry getBoundary()
@@ -353,7 +353,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#getBoundaryDimension()
+     * @see org.locationtech.jts.geom.Geometry#getBoundaryDimension()
      */
     @Override
     public int getBoundaryDimension()
@@ -362,7 +362,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#reverse()
+     * @see org.locationtech.jts.geom.Geometry#reverse()
      */
     @Override
     public Geometry reverse()
@@ -372,19 +372,21 @@ public class Circle
         return newCircle;
     }
 
-    /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#clone()
-     */
-    @Override
-    public Object clone()
+    public Geometry copy()
     {
-        Geometry g = (Geometry) this.centerGeometry.clone();
-        Circle cloneCircle = new Circle(g, this.radius);
+        Circle cloneCircle = new Circle(this.centerGeometry.copy(), this.radius);
         return cloneCircle;// return the clone
     }
 
+    @Override
+    protected Geometry copyInternal()
+    {
+        Circle cloneCircle = new Circle(this.centerGeometry.copy(), this.radius);
+        return cloneCircle;
+    }
+
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#equalsExact(com.vividsolutions.jts.geom.Geometry, double)
+     * @see org.locationtech.jts.geom.Geometry#equalsExact(org.locationtech.jts.geom.Geometry, double)
      */
     @Override
     public boolean equalsExact(Geometry g, double tolerance)
@@ -400,7 +402,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#apply(com.vividsolutions.jts.geom.CoordinateFilter)
+     * @see org.locationtech.jts.geom.Geometry#apply(org.locationtech.jts.geom.CoordinateFilter)
      */
     @Override
     public void apply(CoordinateFilter filter)
@@ -409,7 +411,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#apply(com.vividsolutions.jts.geom.CoordinateSequenceFilter)
+     * @see org.locationtech.jts.geom.Geometry#apply(org.locationtech.jts.geom.CoordinateSequenceFilter)
      */
     @Override
     public void apply(CoordinateSequenceFilter filter)
@@ -418,7 +420,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#apply(com.vividsolutions.jts.geom.GeometryFilter)
+     * @see org.locationtech.jts.geom.Geometry#apply(org.locationtech.jts.geom.GeometryFilter)
      */
     @Override
     public void apply(GeometryFilter filter)
@@ -427,7 +429,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#apply(com.vividsolutions.jts.geom.GeometryComponentFilter)
+     * @see org.locationtech.jts.geom.Geometry#apply(org.locationtech.jts.geom.GeometryComponentFilter)
      */
     @Override
     public void apply(GeometryComponentFilter filter)
@@ -436,7 +438,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#normalize()
+     * @see org.locationtech.jts.geom.Geometry#normalize()
      */
     @Override
     public void normalize()
@@ -445,7 +447,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#computeEnvelopeInternal()
+     * @see org.locationtech.jts.geom.Geometry#computeEnvelopeInternal()
      */
     @Override
     protected Envelope computeEnvelopeInternal()
@@ -457,7 +459,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#compareToSameClass(java.lang.Object)
+     * @see org.locationtech.jts.geom.Geometry#compareToSameClass(java.lang.Object)
      */
     @Override
     protected int compareToSameClass(Object other)
@@ -477,7 +479,7 @@ public class Circle
     }
 
     /* (non-Javadoc)
-     * @see com.vividsolutions.jts.geom.Geometry#compareToSameClass(java.lang.Object, com.vividsolutions.jts.geom.CoordinateSequenceComparator)
+     * @see org.locationtech.jts.geom.Geometry#compareToSameClass(java.lang.Object, org.locationtech.jts.geom.CoordinateSequenceComparator)
      */
     @Override
     protected int compareToSameClass(Object other, CoordinateSequenceComparator comp)
@@ -497,6 +499,12 @@ public class Circle
     }
 
     @Override
+    protected int getSortIndex()
+    {
+        return 0;
+    }
+
+    @Override
     public String toString()
     {
         return "Circle of radius " + radius + " around " + centerGeometry;
diff --git a/core/src/main/java/org/datasyslab/geospark/geometryObjects/GeometrySerde.java b/core/src/main/java/org/datasyslab/geospark/geometryObjects/GeometrySerde.java
index c6d98a1..73cfef7 100755
--- a/core/src/main/java/org/datasyslab/geospark/geometryObjects/GeometrySerde.java
+++ b/core/src/main/java/org/datasyslab/geospark/geometryObjects/GeometrySerde.java
@@ -22,16 +22,16 @@ import com.esotericsoftware.kryo.Registration;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryCollection;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryCollection;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Logger;
 import org.datasyslab.geospark.formatMapper.shapefileParser.parseUtils.shp.ShapeSerde;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerde.java b/core/src/main/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerde.java
index ff2d8e4..3171fe3 100644
--- a/core/src/main/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerde.java
+++ b/core/src/main/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerde.java
@@ -21,13 +21,13 @@ import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.Serializer;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.quadtree.Node;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.AbstractNode;
-import com.vividsolutions.jts.index.strtree.ItemBoundable;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.quadtree.Node;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.AbstractNode;
+import org.locationtech.jts.index.strtree.ItemBoundable;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.log4j.Logger;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/DedupParams.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/DedupParams.java
index db3c4c0..fed0907 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/DedupParams.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/DedupParams.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 
 import java.io.Serializable;
 import java.util.List;
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/DynamicIndexLookupJudgement.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/DynamicIndexLookupJudgement.java
index 5ee844a..fea2c30 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/DynamicIndexLookupJudgement.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/DynamicIndexLookupJudgement.java
@@ -16,11 +16,11 @@
  */
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/JudgementBase.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/JudgementBase.java
index 7b57cbc..251a93b 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/JudgementBase.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/JudgementBase.java
@@ -16,11 +16,11 @@
  */
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 import org.apache.spark.TaskContext;
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/LeftIndexLookupJudgement.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/LeftIndexLookupJudgement.java
index b75f567..29658f5 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/LeftIndexLookupJudgement.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/LeftIndexLookupJudgement.java
@@ -17,8 +17,8 @@
 
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.spark.api.java.function.FlatMapFunction2;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/NestedLoopJudgement.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/NestedLoopJudgement.java
index dba08fd..dc4e9cb 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/NestedLoopJudgement.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/NestedLoopJudgement.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
diff --git a/core/src/main/java/org/datasyslab/geospark/joinJudgement/RightIndexLookupJudgement.java b/core/src/main/java/org/datasyslab/geospark/joinJudgement/RightIndexLookupJudgement.java
index 8c5a583..ca2df3a 100644
--- a/core/src/main/java/org/datasyslab/geospark/joinJudgement/RightIndexLookupJudgement.java
+++ b/core/src/main/java/org/datasyslab/geospark/joinJudgement/RightIndexLookupJudgement.java
@@ -17,8 +17,8 @@
 
 package org.datasyslab.geospark.joinJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.spark.api.java.function.FlatMapFunction2;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/knnJudgement/GeometryDistanceComparator.java b/core/src/main/java/org/datasyslab/geospark/knnJudgement/GeometryDistanceComparator.java
index 187718e..4f1504a 100644
--- a/core/src/main/java/org/datasyslab/geospark/knnJudgement/GeometryDistanceComparator.java
+++ b/core/src/main/java/org/datasyslab/geospark/knnJudgement/GeometryDistanceComparator.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.knnJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 
 import java.io.Serializable;
 import java.util.Comparator;
diff --git a/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgement.java b/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgement.java
index 616bbec..a841bdc 100644
--- a/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgement.java
+++ b/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgement.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.knnJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.io.Serializable;
diff --git a/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgementUsingIndex.java b/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgementUsingIndex.java
index e8f564b..f4ce367 100644
--- a/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgementUsingIndex.java
+++ b/core/src/main/java/org/datasyslab/geospark/knnJudgement/KnnJudgementUsingIndex.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.knnJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
-import com.vividsolutions.jts.index.strtree.GeometryItemDistance;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
+import org.locationtech.jts.index.strtree.GeometryItemDistance;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.io.Serializable;
@@ -68,7 +68,7 @@ public class KnnJudgementUsingIndex<U extends Geometry, T extends Geometry>
         SpatialIndex treeIndex = treeIndexes.next();
         final Object[] localK;
         if (treeIndex instanceof STRtree) {
-            localK = ((STRtree) treeIndex).kNearestNeighbour(queryCenter.getEnvelopeInternal(), queryCenter, new GeometryItemDistance(), k);
+            localK = ((STRtree) treeIndex).nearestNeighbour(queryCenter.getEnvelopeInternal(), queryCenter, new GeometryItemDistance(), k);
         }
         else {
             throw new Exception("[KnnJudgementUsingIndex][Call] QuadTree index doesn't support KNN search.");
diff --git a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/JudgementBase.java b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/JudgementBase.java
index b2a4b6a..17332e4 100644
--- a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/JudgementBase.java
+++ b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/JudgementBase.java
@@ -17,7 +17,7 @@
 
 package org.datasyslab.geospark.rangeJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilter.java b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilter.java
index d49ac7e..007fbe8 100644
--- a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilter.java
+++ b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilter.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.rangeJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.function.Function;
 
 // TODO: Auto-generated Javadoc
diff --git a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilterUsingIndex.java b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilterUsingIndex.java
index 634bae7..bd07e15 100644
--- a/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilterUsingIndex.java
+++ b/core/src/main/java/org/datasyslab/geospark/rangeJudgement/RangeFilterUsingIndex.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.rangeJudgement;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/serde/GeoSparkKryoRegistrator.java b/core/src/main/java/org/datasyslab/geospark/serde/GeoSparkKryoRegistrator.java
index 81f220c..bff5687 100644
--- a/core/src/main/java/org/datasyslab/geospark/serde/GeoSparkKryoRegistrator.java
+++ b/core/src/main/java/org/datasyslab/geospark/serde/GeoSparkKryoRegistrator.java
@@ -18,16 +18,16 @@
 package org.datasyslab.geospark.serde;
 
 import com.esotericsoftware.kryo.Kryo;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryCollection;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryCollection;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.log4j.Logger;
 import org.apache.spark.serializer.KryoRegistrator;
 import org.datasyslab.geospark.geometryObjects.Circle;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/EarthdataMapperRunnableExample.java b/core/src/main/java/org/datasyslab/geospark/showcase/EarthdataMapperRunnableExample.java
index 06e4133..c177c76 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/EarthdataMapperRunnableExample.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/EarthdataMapperRunnableExample.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/Example.java b/core/src/main/java/org/datasyslab/geospark/showcase/Example.java
index e104aa5..9ec067e 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/Example.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/Example.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedLineStringMapper.java b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedLineStringMapper.java
index 057c700..fbc4045 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedLineStringMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedLineStringMapper.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.io.WKTReader;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPointMapper.java b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPointMapper.java
index 0597518..b3a785b 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPointMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPointMapper.java
@@ -16,9 +16,9 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPolygonMapper.java b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPolygonMapper.java
index 6642315..548e9c7 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPolygonMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedPolygonMapper.java
@@ -16,13 +16,13 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.io.WKTReader;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedRectangleMapper.java b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedRectangleMapper.java
index 71a3c65..6625546 100644
--- a/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedRectangleMapper.java
+++ b/core/src/main/java/org/datasyslab/geospark/showcase/UserSuppliedRectangleMapper.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.showcase;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.io.WKTReader;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialOperator/JoinQuery.java b/core/src/main/java/org/datasyslab/geospark/spatialOperator/JoinQuery.java
index 8dc7b53..9ca0fb5 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialOperator/JoinQuery.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialOperator/JoinQuery.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.log4j.LogManager;
 import org.apache.log4j.Logger;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialOperator/KNNQuery.java b/core/src/main/java/org/datasyslab/geospark/spatialOperator/KNNQuery.java
index 4dd74cf..1ea5730 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialOperator/KNNQuery.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialOperator/KNNQuery.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.api.java.JavaRDD;
 import org.datasyslab.geospark.knnJudgement.GeometryDistanceComparator;
 import org.datasyslab.geospark.knnJudgement.KnnJudgement;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialOperator/RangeQuery.java b/core/src/main/java/org/datasyslab/geospark/spatialOperator/RangeQuery.java
index cae69e4..b37e7ff 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialOperator/RangeQuery.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialOperator/RangeQuery.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
 import org.apache.spark.api.java.JavaRDD;
 import org.datasyslab.geospark.rangeJudgement.RangeFilter;
 import org.datasyslab.geospark.rangeJudgement.RangeFilterUsingIndex;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/EqualPartitioning.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/EqualPartitioning.java
index 9a2b9dc..ae79175 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/EqualPartitioning.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/EqualPartitioning.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/FlatGridPartitioner.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/FlatGridPartitioner.java
index 26df2b6..cf77f15 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/FlatGridPartitioner.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/FlatGridPartitioner.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.joinJudgement.DedupParams;
 import scala.Tuple2;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/HilbertPartitioning.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/HilbertPartitioning.java
index c2c6eba..66aa2e3 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/HilbertPartitioning.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/HilbertPartitioning.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTree.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTree.java
index 9154e29..20433d9 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTree.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTree.java
@@ -17,7 +17,7 @@
 
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTreePartitioner.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTreePartitioner.java
index 6f33250..ac686fd 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTreePartitioner.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/KDBTreePartitioner.java
@@ -17,9 +17,9 @@
 
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.Point;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.joinJudgement.DedupParams;
 import org.datasyslab.geospark.utils.HalfOpenRectangle;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/QuadtreePartitioning.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/QuadtreePartitioning.java
index 252f739..708ec69 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/QuadtreePartitioning.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/QuadtreePartitioning.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.datasyslab.geospark.spatialPartitioning.quadtree.QuadRectangle;
 import org.datasyslab.geospark.spatialPartitioning.quadtree.StandardQuadTree;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/RtreePartitioning.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/RtreePartitioning.java
index 21b4c0a..6e34308 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/RtreePartitioning.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/RtreePartitioning.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.index.strtree.STRtree;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -52,7 +52,7 @@ public class RtreePartitioning
             strtree.insert(sample, sample);
         }
 
-        List<Envelope> envelopes = strtree.queryBoundary();
+        List<Envelope> envelopes = strtree.findLeafBounds();
         for (Envelope envelope : envelopes) {
             grids.add(envelope);
         }
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/SpatialPartitioner.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/SpatialPartitioner.java
index e4ca81e..a0737ae 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/SpatialPartitioner.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/SpatialPartitioner.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.spark.Partitioner;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.joinJudgement.DedupParams;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/VoronoiPartitioning.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/VoronoiPartitioning.java
index 6ace1be..94fec11 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/VoronoiPartitioning.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/VoronoiPartitioning.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.spatialPartitioning;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.MultiPoint;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.triangulate.VoronoiDiagramBuilder;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.MultiPoint;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.triangulate.VoronoiDiagramBuilder;
 
 import java.io.Serializable;
 import java.util.ArrayList;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadRectangle.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadRectangle.java
index 2240758..fd0ee8a 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadRectangle.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadRectangle.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialPartitioning.quadtree;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 
 import java.io.Serializable;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioner.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioner.java
index adbd8b0..a24659b 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioner.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioner.java
@@ -16,9 +16,9 @@
  */
 package org.datasyslab.geospark.spatialPartitioning.quadtree;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.Point;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.joinJudgement.DedupParams;
 import org.datasyslab.geospark.spatialPartitioning.SpatialPartitioner;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/StandardQuadTree.java b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/StandardQuadTree.java
index d99b276..157058e 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/StandardQuadTree.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialPartitioning/quadtree/StandardQuadTree.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.spatialPartitioning.quadtree;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import java.io.Serializable;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/CircleRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/CircleRDD.java
index 949127f..58d5068 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/CircleRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/CircleRDD.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.function.Function;
 import org.datasyslab.geospark.geometryObjects.Circle;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/LineStringRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/LineStringRDD.java
index 8726ed2..72345e0 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/LineStringRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/LineStringRDD.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.LineString;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.LineString;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.spark.api.java.function.FlatMapFunction;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/PointRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/PointRDD.java
index 07bb607..d8b549d 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/PointRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/PointRDD.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Point;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.spark.api.java.function.FlatMapFunction;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/PolygonRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/PolygonRDD.java
index 03b4403..74154b6 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/PolygonRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/PolygonRDD.java
@@ -16,14 +16,14 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.geom.PrecisionModel;
-import com.vividsolutions.jts.precision.GeometryPrecisionReducer;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.geom.PrecisionModel;
+import org.locationtech.jts.precision.GeometryPrecisionReducer;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.spark.api.java.function.FlatMapFunction;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/RectangleRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/RectangleRDD.java
index e5ede02..a3694b9 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/RectangleRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/RectangleRDD.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.api.java.JavaRDD;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.apache.spark.api.java.function.FlatMapFunction;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRDD/SpatialRDD.java b/core/src/main/java/org/datasyslab/geospark/spatialRDD/SpatialRDD.java
index 809de62..7f4f623 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRDD/SpatialRDD.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRDD/SpatialRDD.java
@@ -16,15 +16,15 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.index.SpatialIndex;
-import com.vividsolutions.jts.io.WKBWriter;
-import com.vividsolutions.jts.io.WKTWriter;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.index.SpatialIndex;
+import org.locationtech.jts.io.WKBWriter;
+import org.locationtech.jts.io.WKTWriter;
 import org.apache.commons.lang.NullArgumentException;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.JavaRDD;
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRddTool/IndexBuilder.java b/core/src/main/java/org/datasyslab/geospark/spatialRddTool/IndexBuilder.java
index 8ccfb93..1fb181e 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRddTool/IndexBuilder.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRddTool/IndexBuilder.java
@@ -17,11 +17,11 @@
 
 package org.datasyslab.geospark.spatialRddTool;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.index.SpatialIndex;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.index.SpatialIndex;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.api.java.function.FlatMapFunction;
 import org.datasyslab.geospark.enums.IndexType;
 
diff --git a/core/src/main/java/org/datasyslab/geospark/spatialRddTool/StatCalculator.java b/core/src/main/java/org/datasyslab/geospark/spatialRddTool/StatCalculator.java
index 9f63150..ed37f86 100644
--- a/core/src/main/java/org/datasyslab/geospark/spatialRddTool/StatCalculator.java
+++ b/core/src/main/java/org/datasyslab/geospark/spatialRddTool/StatCalculator.java
@@ -17,8 +17,8 @@
 
 package org.datasyslab.geospark.spatialRddTool;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/core/src/main/java/org/datasyslab/geospark/utils/CRSTransformation.java b/core/src/main/java/org/datasyslab/geospark/utils/CRSTransformation.java
index 44b16e8..1d67900 100644
--- a/core/src/main/java/org/datasyslab/geospark/utils/CRSTransformation.java
+++ b/core/src/main/java/org/datasyslab/geospark/utils/CRSTransformation.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geospark.utils;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.geotools.geometry.jts.JTS;
 import org.geotools.referencing.CRS;
 import org.opengis.geometry.MismatchedDimensionException;
diff --git a/core/src/main/java/org/datasyslab/geospark/utils/GeoSparkConf.java b/core/src/main/java/org/datasyslab/geospark/utils/GeoSparkConf.java
index 7c2a5ec..4b6fefc 100644
--- a/core/src/main/java/org/datasyslab/geospark/utils/GeoSparkConf.java
+++ b/core/src/main/java/org/datasyslab/geospark/utils/GeoSparkConf.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.utils;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.spark.SparkConf;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
diff --git a/core/src/main/java/org/datasyslab/geospark/utils/HalfOpenRectangle.java b/core/src/main/java/org/datasyslab/geospark/utils/HalfOpenRectangle.java
index 60e7a22..f7403a4 100644
--- a/core/src/main/java/org/datasyslab/geospark/utils/HalfOpenRectangle.java
+++ b/core/src/main/java/org/datasyslab/geospark/utils/HalfOpenRectangle.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geospark.utils;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Point;
 
 public class HalfOpenRectangle
 {
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/EnvelopeAdapter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/EnvelopeAdapter.scala
index ef62bf3..90a36a1 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/EnvelopeAdapter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/EnvelopeAdapter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.Envelope
+import org.locationtech.jts.geom.Envelope
 import net.razorvine.pickle.Unpickler
 import net.razorvine.pickle.objects.ClassDict
 import scala.collection.JavaConverters._
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeoSparkPythonConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeoSparkPythonConverter.scala
index 849d488..31d9723 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeoSparkPythonConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeoSparkPythonConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.{JavaPairRDD, JavaRDD}
 import org.datasyslab.geospark.python.translation.{FlatPairRddConverter, GeometryRddConverter, GeometrySeqToPythonConverter, HashSetPairRddConverter, PythonGeometrySerializer, PythonRDDToJavaConverter}
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeometryAdapter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeometryAdapter.scala
index b0de400..03939d3 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeometryAdapter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/GeometryAdapter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.datasyslab.geospark.python.translation.PythonGeometrySerializer
 
 object GeometryAdapter extends GeomSerializer{
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/PythonRddToJavaRDDAdapter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/PythonRddToJavaRDDAdapter.scala
index 083e2b9..de04c75 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/PythonRddToJavaRDDAdapter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/PythonRddToJavaRDDAdapter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.{Geometry, LineString, Point, Polygon}
+import org.locationtech.jts.geom.{Geometry, LineString, Point, Polygon}
 import net.razorvine.pickle.Unpickler
 import net.razorvine.pickle.objects.ClassDict
 import org.apache.spark.api.java.JavaRDD
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/RawJvmIndexRDDAdapter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/RawJvmIndexRDDAdapter.scala
index a567fae..c8659d5 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/RawJvmIndexRDDAdapter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/RawJvmIndexRDDAdapter.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.index.SpatialIndex
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.index.SpatialIndex
 import org.apache.spark.api.java.JavaRDD
 import org.datasyslab.geospark.spatialRDD.SpatialRDD
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/adapters/SpatialObjectLoaderAdapter.scala b/core/src/main/scala/org/datasyslab/geospark/python/adapters/SpatialObjectLoaderAdapter.scala
index 5b7a11a..d2441bb 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/adapters/SpatialObjectLoaderAdapter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/adapters/SpatialObjectLoaderAdapter.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geospark.python.adapters
 
-import com.vividsolutions.jts.geom.{Geometry, LineString, Point, Polygon}
-import com.vividsolutions.jts.index.SpatialIndex
+import org.locationtech.jts.geom.{Geometry, LineString, Point, Polygon}
+import org.locationtech.jts.index.SpatialIndex
 import org.apache.spark.api.java.{JavaRDD, JavaSparkContext}
 import org.datasyslab.geospark.spatialRDD.{LineStringRDD, PointRDD, PolygonRDD, SpatialRDD}
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/CircleSerializer.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/CircleSerializer.scala
index e5afa71..b516879 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/CircleSerializer.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/CircleSerializer.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.io.WKBWriter
+import org.locationtech.jts.io.WKBWriter
 import org.datasyslab.geospark.geometryObjects.Circle
 import org.datasyslab.geospark.python.utils.implicits._
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/FlatPairRddConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/FlatPairRddConverter.scala
index 872ae84..be000c0 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/FlatPairRddConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/FlatPairRddConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.{JavaPairRDD, JavaRDD}
 import org.datasyslab.geospark.python.utils.implicits._
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometryRddConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometryRddConverter.scala
index 01f0498..d51df48 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometryRddConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometryRddConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.JavaRDD
 import org.datasyslab.geospark.python.utils.implicits._
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySeqToPythonConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySeqToPythonConverter.scala
index b577f1d..b89c82c 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySeqToPythonConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySeqToPythonConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.datasyslab.geospark.python.utils.implicits._
 
 case class GeometrySeqToPythonConverter(spatialData: scala.collection.convert.Wrappers.SeqWrapper[Geometry],
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySerializer.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySerializer.scala
index ea201aa..b4e61eb 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySerializer.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/GeometrySerializer.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.io.WKBWriter
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.io.WKBWriter
 import org.datasyslab.geospark.python.utils.implicits._
 
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/HashSetPairRddConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/HashSetPairRddConverter.scala
index 72c408c..77440ae 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/HashSetPairRddConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/HashSetPairRddConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.{JavaPairRDD, JavaRDD}
 import org.datasyslab.geospark.python.utils.implicits._
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonGeometrySerializer.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonGeometrySerializer.scala
index 4d1dcd7..7e2a159 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonGeometrySerializer.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonGeometrySerializer.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.io.WKBReader
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.io.WKBReader
 import org.datasyslab.geospark.geometryObjects.Circle
 import org.datasyslab.geospark.python.SerializationException
 import java.nio.ByteBuffer
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRDDToJavaConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRDDToJavaConverter.scala
index 24812f5..81d8d91 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRDDToJavaConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRDDToJavaConverter.scala
@@ -2,7 +2,7 @@ package org.datasyslab.geospark.python.translation
 
 import java.io.{ByteArrayInputStream, DataInputStream}
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.JavaRDD
 import org.datasyslab.geospark.geometryObjects.Circle
 import org.datasyslab.geospark.python.SerializationException
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRddToJavaRDDConverter.scala b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRddToJavaRDDConverter.scala
index db7ee1e..c19de10 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRddToJavaRDDConverter.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/translation/PythonRddToJavaRDDConverter.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python.translation
 
-import com.vividsolutions.jts.geom.{Geometry, LineString, Point, Polygon}
+import org.locationtech.jts.geom.{Geometry, LineString, Point, Polygon}
 import net.razorvine.pickle.Unpickler
 import net.razorvine.pickle.objects.ClassDict
 import org.apache.spark.api.java.JavaRDD
diff --git a/core/src/main/scala/org/datasyslab/geospark/python/utils/implicits.scala b/core/src/main/scala/org/datasyslab/geospark/python/utils/implicits.scala
index c6f4bb1..a8a099b 100644
--- a/core/src/main/scala/org/datasyslab/geospark/python/utils/implicits.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/python/utils/implicits.scala
@@ -4,7 +4,7 @@ import java.nio.charset.StandardCharsets
 import java.nio.{ByteBuffer, ByteOrder}
 import java.util
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 
 object implicits {
 
diff --git a/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaEarthdataMapperRunnableExample.scala b/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaEarthdataMapperRunnableExample.scala
index f59edc4..ce5bafb 100644
--- a/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaEarthdataMapperRunnableExample.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaEarthdataMapperRunnableExample.scala
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.showcase
 
-import com.vividsolutions.jts.geom.Envelope
+import org.locationtech.jts.geom.Envelope
 import org.apache.log4j.{Level, Logger}
 import org.apache.spark.{SparkConf, SparkContext}
 import org.apache.spark.storage.StorageLevel
diff --git a/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaExample.scala b/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaExample.scala
index 8c28823..16ffd57 100644
--- a/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaExample.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/showcase/ScalaExample.scala
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geospark.showcase
 
-import com.vividsolutions.jts.geom.{Coordinate, Envelope, GeometryFactory}
+import org.locationtech.jts.geom.{Coordinate, Envelope, GeometryFactory}
 import org.apache.log4j.{Level, Logger}
 import org.apache.spark.serializer.KryoSerializer
 import org.apache.spark.storage.StorageLevel
diff --git a/core/src/main/scala/org/datasyslab/geospark/showcase/SpatialJoinShp.scala b/core/src/main/scala/org/datasyslab/geospark/showcase/SpatialJoinShp.scala
index 0d98964..7d81e4e 100644
--- a/core/src/main/scala/org/datasyslab/geospark/showcase/SpatialJoinShp.scala
+++ b/core/src/main/scala/org/datasyslab/geospark/showcase/SpatialJoinShp.scala
@@ -17,7 +17,7 @@
 
 package org.datasyslab.geospark.showcase
 
-import com.vividsolutions.jts.geom.Polygon
+import org.locationtech.jts.geom.Polygon
 import org.apache.log4j.{Level, Logger}
 import org.apache.spark.storage.StorageLevel
 import org.apache.spark.{SparkConf, SparkContext}
diff --git a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
index fdc6a3c..5836f39 100644
--- a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/GeometrySerdeTest.java
@@ -29,10 +29,10 @@ package org.datasyslab.geospark.formatMapper.shapefileParser.shapes;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryCollection;
-import com.vividsolutions.jts.io.ParseException;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryCollection;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
 import org.datasyslab.geospark.geometryObjects.Circle;
 import org.datasyslab.geospark.geometryObjects.GeometrySerde;
 import org.junit.Assert;
diff --git a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
index 7ae05aa..c01f536 100644
--- a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileRDDTest.java
@@ -25,11 +25,11 @@
  */
 package org.datasyslab.geospark.formatMapper.shapefileParser.shapes;
 
-import com.vividsolutions.jts.geom.Envelope;
-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.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
index 607dd16..b40b663 100644
--- a/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/formatMapper/shapefileParser/shapes/ShapefileReaderTest.java
@@ -26,10 +26,10 @@
 
 package org.datasyslab.geospark.formatMapper.shapefileParser.shapes;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.MultiPolygon;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.fs.LocatedFileStatus;
diff --git a/core/src/test/java/org/datasyslab/geospark/geometryObjects/CircleTest.java b/core/src/test/java/org/datasyslab/geospark/geometryObjects/CircleTest.java
index fcee1fb..f00c8eb 100644
--- a/core/src/test/java/org/datasyslab/geospark/geometryObjects/CircleTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/geometryObjects/CircleTest.java
@@ -25,13 +25,13 @@
  */
 package org.datasyslab.geospark.geometryObjects;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.io.ParseException;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
diff --git a/core/src/test/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerdeTest.java b/core/src/test/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerdeTest.java
index ddce34e..6098f96 100644
--- a/core/src/test/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerdeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/geometryObjects/SpatialIndexSerdeTest.java
@@ -29,13 +29,13 @@ package org.datasyslab.geospark.geometryObjects;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.index.SpatialIndex;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.index.SpatialIndex;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
diff --git a/core/src/test/java/org/datasyslab/geospark/io/EarthdataHDFTest.java b/core/src/test/java/org/datasyslab/geospark/io/EarthdataHDFTest.java
index 35454e2..1fa36dd 100644
--- a/core/src/test/java/org/datasyslab/geospark/io/EarthdataHDFTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/io/EarthdataHDFTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.io;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinQueryCorrectnessChecker.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinQueryCorrectnessChecker.java
index a806faf..9127c1a 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinQueryCorrectnessChecker.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinQueryCorrectnessChecker.java
@@ -25,12 +25,12 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.GeoSparkTestBase;
 import org.datasyslab.geospark.enums.GridType;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinTestBase.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinTestBase.java
index 56a6557..f2d58cf 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinTestBase.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/JoinTestBase.java
@@ -25,8 +25,8 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.GeoSparkTestBase;
 import org.datasyslab.geospark.enums.FileDataSplitter;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringJoinTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringJoinTest.java
index 5d3c21c..5ccf180 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringJoinTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringJoinTest.java
@@ -25,8 +25,8 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Polygon;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
 import org.datasyslab.geospark.enums.JoinBuildSide;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringKnnTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringKnnTest.java
index 87cc7b5..5a099d8 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringKnnTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringKnnTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringRangeTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringRangeTest.java
index 61657d4..ef3928d 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringRangeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/LineStringRangeTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointJoinTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointJoinTest.java
index dbd155d..f369674 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointJoinTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointJoinTest.java
@@ -25,8 +25,8 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
 import org.datasyslab.geospark.enums.JoinBuildSide;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointKnnTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointKnnTest.java
index 61b150e..ce1bd72 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointKnnTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointKnnTest.java
@@ -25,9 +25,9 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointRangeTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointRangeTest.java
index 488fe64..c77cdd5 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointRangeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PointRangeTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonJoinTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonJoinTest.java
index 6b05223..b761850 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonJoinTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonJoinTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Polygon;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
 import org.datasyslab.geospark.enums.JoinBuildSide;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonKnnTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonKnnTest.java
index f7dfd6b..4d58395 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonKnnTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonKnnTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonRangeTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonRangeTest.java
index c9b8184..818899c 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonRangeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/PolygonRangeTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleJoinTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleJoinTest.java
index b7d8f4c..dd566a5 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleJoinTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleJoinTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Polygon;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
 import org.datasyslab.geospark.enums.JoinBuildSide;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleKnnTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleKnnTest.java
index b5a5978..ebae96d 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleKnnTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleKnnTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleRangeTest.java b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleRangeTest.java
index bafe363..7ed00a8 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleRangeTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialOperator/RectangleRangeTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialOperator;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioningTest.java b/core/src/test/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
index 12f2e84..d1b481e 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialPartitioning/quadtree/QuadTreePartitioningTest.java
@@ -26,10 +26,10 @@
 
 package org.datasyslab.geospark.spatialPartitioning.quadtree;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.datasyslab.geospark.spatialPartitioning.QuadtreePartitioning;
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAggregationTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAggregationTest.java
index bea5c13..543ab02 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAggregationTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAggregationTest.java
@@ -25,13 +25,13 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.io.ParseException;
-import com.vividsolutions.jts.io.WKTReader;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
 import org.datasyslab.geospark.spatialRddTool.StatCalculator;
 import org.junit.Test;
 
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAndCountAggregationTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAndCountAggregationTest.java
index 5158d56..87c5ef1 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAndCountAggregationTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/BoundaryAndCountAggregationTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
 import org.datasyslab.geospark.spatialRddTool.StatCalculator;
 import org.junit.Test;
 
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/LineStringRDDTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/LineStringRDDTest.java
index ee94b54..bcb6d80 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/LineStringRDDTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/LineStringRDDTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/PointRDDTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/PointRDDTest.java
index 0c106a5..2d355f9 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/PointRDDTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/PointRDDTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/PolygonRDDTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/PolygonRDDTest.java
index 231856a..48c38f3 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/PolygonRDDTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/PolygonRDDTest.java
@@ -25,11 +25,11 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.Polygon;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.Polygon;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.enums.FileDataSplitter;
 import org.datasyslab.geospark.enums.GridType;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/RectangleRDDTest.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/RectangleRDDTest.java
index e73cdfe..6144ab5 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/RectangleRDDTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/RectangleRDDTest.java
@@ -25,10 +25,10 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.index.quadtree.Quadtree;
-import com.vividsolutions.jts.index.strtree.STRtree;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.index.quadtree.Quadtree;
+import org.locationtech.jts.index.strtree.STRtree;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.enums.GridType;
 import org.datasyslab.geospark.enums.IndexType;
diff --git a/core/src/test/java/org/datasyslab/geospark/spatialRDD/SpatialRDDTestBase.java b/core/src/test/java/org/datasyslab/geospark/spatialRDD/SpatialRDDTestBase.java
index 858e8db..dd3cc61 100644
--- a/core/src/test/java/org/datasyslab/geospark/spatialRDD/SpatialRDDTestBase.java
+++ b/core/src/test/java/org/datasyslab/geospark/spatialRDD/SpatialRDDTestBase.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geospark.spatialRDD;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.datasyslab.geospark.GeoSparkTestBase;
 import org.datasyslab.geospark.enums.FileDataSplitter;
 import org.datasyslab.geospark.enums.GridType;
diff --git a/core/src/test/java/org/datasyslab/geospark/utils/CRSTransformationTest.java b/core/src/test/java/org/datasyslab/geospark/utils/CRSTransformationTest.java
index 85c8a4d..a151639 100644
--- a/core/src/test/java/org/datasyslab/geospark/utils/CRSTransformationTest.java
+++ b/core/src/test/java/org/datasyslab/geospark/utils/CRSTransformationTest.java
@@ -25,12 +25,12 @@
  */
 package org.datasyslab.geospark.utils;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/java/org/datasyslab/geospark/utils/testGeoJSON.java b/core/src/test/java/org/datasyslab/geospark/utils/testGeoJSON.java
index a4e270f..397e3d8 100644
--- a/core/src/test/java/org/datasyslab/geospark/utils/testGeoJSON.java
+++ b/core/src/test/java/org/datasyslab/geospark/utils/testGeoJSON.java
@@ -25,9 +25,9 @@
  */
 package org.datasyslab.geospark.utils;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/core/src/test/scala/org/datasyslab/geospark/python/GeometrySample.scala b/core/src/test/scala/org/datasyslab/geospark/python/GeometrySample.scala
index 098c6bb..a22493f 100644
--- a/core/src/test/scala/org/datasyslab/geospark/python/GeometrySample.scala
+++ b/core/src/test/scala/org/datasyslab/geospark/python/GeometrySample.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geospark.python
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 
 import scala.tools.nsc.interpreter.InputStream
 
diff --git a/core/src/test/scala/org/datasyslab/geospark/python/PythonTestSpec.scala b/core/src/test/scala/org/datasyslab/geospark/python/PythonTestSpec.scala
index 1fc273e..d1cb390 100644
--- a/core/src/test/scala/org/datasyslab/geospark/python/PythonTestSpec.scala
+++ b/core/src/test/scala/org/datasyslab/geospark/python/PythonTestSpec.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geospark.python
 
-import com.vividsolutions.jts.geom.GeometryFactory
-import com.vividsolutions.jts.io.WKTReader
+import org.locationtech.jts.geom.GeometryFactory
+import org.locationtech.jts.io.WKTReader
 import org.datasyslab.geospark.python.translation.PythonGeometrySerializer
 
 trait PythonTestSpec {
diff --git a/core/src/test/scala/org/datasyslab/geospark/scalaTest.scala b/core/src/test/scala/org/datasyslab/geospark/scalaTest.scala
index 2282190..54147a3 100644
--- a/core/src/test/scala/org/datasyslab/geospark/scalaTest.scala
+++ b/core/src/test/scala/org/datasyslab/geospark/scalaTest.scala
@@ -26,7 +26,7 @@
 
 package org.datasyslab.geospark
 
-import com.vividsolutions.jts.geom.{Coordinate, Envelope, GeometryFactory}
+import org.locationtech.jts.geom.{Coordinate, Envelope, GeometryFactory}
 import org.apache.spark.storage.StorageLevel
 import org.datasyslab.geospark.enums.{FileDataSplitter, GridType, IndexType, JoinBuildSide}
 import org.datasyslab.geospark.formatMapper.EarthdataHDFPointMapper
diff --git a/jts b/jts
new file mode 160000
index 0000000..41df452
--- /dev/null
+++ b/jts
@@ -0,0 +1 @@
+Subproject commit 41df452efc4ce7c76499e35a0bf4526d771165f9
diff --git a/pom.xml b/pom.xml
index 143a9c1..f34c442 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,6 +9,7 @@
 	<url>http://maven.apache.org</url>
     <description>Apache Spark geospatial extention: SpatialRDD, SpatialSQL and map visualization</description>
   <modules>
+    <module>jts/modules/core</module>
     <module>core</module>
     <module>sql</module>    
     <module>viz</module>
@@ -45,7 +46,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <scala.version>2.12.8</scala.version>
         <scala.compat.version>2.12</scala.compat.version>
-        <geotools.version>17.0</geotools.version>
+        <geotools.version>23.2</geotools.version>
         <spark.version>3.0.0</spark.version>
     </properties>
     <dependencies>
@@ -141,6 +142,12 @@
             <version>3.1.1</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-compiler</artifactId>
+            <version>${scala.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <repositories>
         <repository>
diff --git a/python/geospark/core/formatMapper/disc_utils.py b/python/geospark/core/formatMapper/disc_utils.py
index 2df9437..b6cd019 100644
--- a/python/geospark/core/formatMapper/disc_utils.py
+++ b/python/geospark/core/formatMapper/disc_utils.py
@@ -41,10 +41,10 @@ class PointRDDDiscLoader(DiscLoader):
     @require(["SpatialObjectLoaderAdapter"])
     def load(cls, sc: SparkContext, path: str) -> SpatialRDD:
         jvm = sc._jvm
-        polygon_rdd = PointRDD()
+        point_rdd = PointRDD()
         srdd = SpatialObjectLoaderAdapter(jvm).load_point_spatial_rdd(sc._jsc, path)
-        polygon_rdd.set_srdd(srdd)
-        return polygon_rdd
+        point_rdd.set_srdd(srdd)
+        return point_rdd
 
 
 class LineStringRDDDiscLoader(DiscLoader):
diff --git a/python/geospark/register/java_libs.py b/python/geospark/register/java_libs.py
index 5bc61cd..4ecab9a 100644
--- a/python/geospark/register/java_libs.py
+++ b/python/geospark/register/java_libs.py
@@ -7,7 +7,7 @@ class GeoSparkLib(Enum):
     JoinQuery = "org.datasyslab.geospark.spatialOperator.JoinQuery"
     KNNQuery = "org.datasyslab.geospark.spatialOperator.KNNQuery"
     RangeQuery = "org.datasyslab.geospark.spatialOperator.RangeQuery"
-    Envelope = "com.vividsolutions.jts.geom.Envelope"
+    Envelope = "org.locationtech.jts.geom.Envelope"
     GeoSerializerData = "org.datasyslab.geospark.python.adapters.GeoSparkPythonConverter"
     GeometryAdapter = "org.datasyslab.geospark.python.adapters.GeometryAdapter"
     PointRDD = "org.datasyslab.geospark.spatialRDD.PointRDD"
diff --git a/python/tests/properties/linestring_properties.py b/python/tests/properties/linestring_properties.py
index 3488588..836d689 100644
--- a/python/tests/properties/linestring_properties.py
+++ b/python/tests/properties/linestring_properties.py
@@ -19,5 +19,5 @@ input_boundary_2 = Envelope(minx=-123.393766, maxx=-65.649956, miny=17.982169, m
 match_count = 535
 match_with_origin_with_duplicates_count = 875
 
-transformed_envelope = Envelope(14313844.29433424, 16791709.85358734, 942450.5989896542, 8474779.278028419)
-transformed_envelope_2 = Envelope(14313844.29433424, 16791709.85358734, 942450.5989896542, 8474645.488977494)
+transformed_envelope = Envelope(14313844.294334238, 16791709.853587367, 942450.5989896103, 8474779.278028358)
+transformed_envelope_2 = Envelope(14313844.294334238, 16791709.853587367, 942450.5989896103, 8474645.488977432)
diff --git a/python/tests/properties/point_properties.py b/python/tests/properties/point_properties.py
index 0fd1cfa..a069885 100644
--- a/python/tests/properties/point_properties.py
+++ b/python/tests/properties/point_properties.py
@@ -25,7 +25,7 @@ rectangle_with_original_duplicates_count = 103
 polygon_match_count = 472
 polygon_match_with_original_duplicates_count = 562
 
-transformed_envelope = Envelope(14313844.29433424, 16587207.463797055, 942450.5989896542, 6697987.652517834)
+transformed_envelope = Envelope(14313844.294334238, 16587207.463797076, 942450.5989896103, 6697987.652517772)
 crs_point_test = os.path.join(tests_path, "resources/crs-test-point.csv")
 crs_envelope = Envelope(26.992172, 71.35513400000001, -179.147236, 179.475569)
-crs_envelope_transformed = Envelope(-5446655.086752228, 1983668.382852457, 534241.8622328962, 6143259.02554563)
\ No newline at end of file
+crs_envelope_transformed = Envelope(-5446655.086752236, 1983668.3828524568, 534241.8622328975, 6143259.025545624)
\ No newline at end of file
diff --git a/python/tests/properties/polygon_properties.py b/python/tests/properties/polygon_properties.py
index 79d1d83..45a24ff 100644
--- a/python/tests/properties/polygon_properties.py
+++ b/python/tests/properties/polygon_properties.py
@@ -14,7 +14,7 @@ num_partitions = 5
 distance = 0.01
 input_location_query_polygon = os.path.join(tests_path, "resources/crs-test-polygon.csv")
 query_polygon_count = 13361
-query_envelope = Envelope(14313844.29433424, 16802290.85383074, 942450.5989896542, 8631908.270651951)
+query_envelope = Envelope(14313844.294334238, 16802290.853830762, 942450.5989896103, 8631908.270651892)
 query_polygon_set = os.path.join(tests_path, "resources/primaryroads-polygon.csv")
 input_location_geo_json = os.path.join(tests_path, "resources/testPolygon.json")
 input_location_wkt = os.path.join(tests_path, "resources/county_small.tsv")
diff --git a/python/tests/resources/spatial_objects/line_string/.part-00000.crc b/python/tests/resources/spatial_objects/line_string/.part-00000.crc
index 8cd7f5f..905669b 100644
Binary files a/python/tests/resources/spatial_objects/line_string/.part-00000.crc and b/python/tests/resources/spatial_objects/line_string/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string/.part-00001.crc b/python/tests/resources/spatial_objects/line_string/.part-00001.crc
index 7ad2bb8..fad55f5 100644
Binary files a/python/tests/resources/spatial_objects/line_string/.part-00001.crc and b/python/tests/resources/spatial_objects/line_string/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string/.part-00002.crc b/python/tests/resources/spatial_objects/line_string/.part-00002.crc
index cbf5c73..1f840e3 100644
Binary files a/python/tests/resources/spatial_objects/line_string/.part-00002.crc and b/python/tests/resources/spatial_objects/line_string/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string/.part-00003.crc b/python/tests/resources/spatial_objects/line_string/.part-00003.crc
index 08f70cd..ad9626c 100644
Binary files a/python/tests/resources/spatial_objects/line_string/.part-00003.crc and b/python/tests/resources/spatial_objects/line_string/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string/.part-00004.crc b/python/tests/resources/spatial_objects/line_string/.part-00004.crc
index 2c1c382..208376f 100644
Binary files a/python/tests/resources/spatial_objects/line_string/.part-00004.crc and b/python/tests/resources/spatial_objects/line_string/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string/part-00000 b/python/tests/resources/spatial_objects/line_string/part-00000
index 3ea04d7..fc1d7a2 100644
Binary files a/python/tests/resources/spatial_objects/line_string/part-00000 and b/python/tests/resources/spatial_objects/line_string/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/line_string/part-00001 b/python/tests/resources/spatial_objects/line_string/part-00001
index 6cf4bee..e3ab6e1 100644
Binary files a/python/tests/resources/spatial_objects/line_string/part-00001 and b/python/tests/resources/spatial_objects/line_string/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/line_string/part-00002 b/python/tests/resources/spatial_objects/line_string/part-00002
index e96eff7..b875dbf 100644
Binary files a/python/tests/resources/spatial_objects/line_string/part-00002 and b/python/tests/resources/spatial_objects/line_string/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/line_string/part-00003 b/python/tests/resources/spatial_objects/line_string/part-00003
index bf9a06f..6225a1f 100644
Binary files a/python/tests/resources/spatial_objects/line_string/part-00003 and b/python/tests/resources/spatial_objects/line_string/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/line_string/part-00004 b/python/tests/resources/spatial_objects/line_string/part-00004
index c841624..87742f5 100644
Binary files a/python/tests/resources/spatial_objects/line_string/part-00004 and b/python/tests/resources/spatial_objects/line_string/part-00004 differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/.part-00000.crc b/python/tests/resources/spatial_objects/line_string_index/.part-00000.crc
index 24cbbd2..d229f92 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/.part-00000.crc and b/python/tests/resources/spatial_objects/line_string_index/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/.part-00001.crc b/python/tests/resources/spatial_objects/line_string_index/.part-00001.crc
index 928c15c..766e40c 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/.part-00001.crc and b/python/tests/resources/spatial_objects/line_string_index/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/.part-00002.crc b/python/tests/resources/spatial_objects/line_string_index/.part-00002.crc
index 12792c4..6713db5 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/.part-00002.crc and b/python/tests/resources/spatial_objects/line_string_index/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/.part-00003.crc b/python/tests/resources/spatial_objects/line_string_index/.part-00003.crc
index a9623ca..7a1872c 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/.part-00003.crc and b/python/tests/resources/spatial_objects/line_string_index/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/.part-00004.crc b/python/tests/resources/spatial_objects/line_string_index/.part-00004.crc
index f3af082..610eb8c 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/.part-00004.crc and b/python/tests/resources/spatial_objects/line_string_index/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/part-00000 b/python/tests/resources/spatial_objects/line_string_index/part-00000
index 8bf8ae8..ef02ee5 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/part-00000 and b/python/tests/resources/spatial_objects/line_string_index/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/part-00001 b/python/tests/resources/spatial_objects/line_string_index/part-00001
index cdd0998..df7eb0c 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/part-00001 and b/python/tests/resources/spatial_objects/line_string_index/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/part-00002 b/python/tests/resources/spatial_objects/line_string_index/part-00002
index 75fbb78..b60c69f 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/part-00002 and b/python/tests/resources/spatial_objects/line_string_index/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/part-00003 b/python/tests/resources/spatial_objects/line_string_index/part-00003
index 8e41c2f..5f3f381 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/part-00003 and b/python/tests/resources/spatial_objects/line_string_index/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/line_string_index/part-00004 b/python/tests/resources/spatial_objects/line_string_index/part-00004
index 22f41b9..07580cb 100644
Binary files a/python/tests/resources/spatial_objects/line_string_index/part-00004 and b/python/tests/resources/spatial_objects/line_string_index/part-00004 differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00000.crc b/python/tests/resources/spatial_objects/point/.part-00000.crc
index 75a79d4..9c6c9f0 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00000.crc and b/python/tests/resources/spatial_objects/point/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00001.crc b/python/tests/resources/spatial_objects/point/.part-00001.crc
index c47899d..4fbd636 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00001.crc and b/python/tests/resources/spatial_objects/point/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00002.crc b/python/tests/resources/spatial_objects/point/.part-00002.crc
index f7ba341..bb87b65 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00002.crc and b/python/tests/resources/spatial_objects/point/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00003.crc b/python/tests/resources/spatial_objects/point/.part-00003.crc
index ee69f82..8ffbac2 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00003.crc and b/python/tests/resources/spatial_objects/point/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00004.crc b/python/tests/resources/spatial_objects/point/.part-00004.crc
index cea8bc7..75e160f 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00004.crc and b/python/tests/resources/spatial_objects/point/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00005.crc b/python/tests/resources/spatial_objects/point/.part-00005.crc
index 478c50f..ca97418 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00005.crc and b/python/tests/resources/spatial_objects/point/.part-00005.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00006.crc b/python/tests/resources/spatial_objects/point/.part-00006.crc
index 8bcc672..8c3c26a 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00006.crc and b/python/tests/resources/spatial_objects/point/.part-00006.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00007.crc b/python/tests/resources/spatial_objects/point/.part-00007.crc
index 0fe67a1..45e5e56 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00007.crc and b/python/tests/resources/spatial_objects/point/.part-00007.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00008.crc b/python/tests/resources/spatial_objects/point/.part-00008.crc
index 5a11d7c..d11ba86 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00008.crc and b/python/tests/resources/spatial_objects/point/.part-00008.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00009.crc b/python/tests/resources/spatial_objects/point/.part-00009.crc
index 02213f2..06b26c8 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00009.crc and b/python/tests/resources/spatial_objects/point/.part-00009.crc differ
diff --git a/python/tests/resources/spatial_objects/point/.part-00010.crc b/python/tests/resources/spatial_objects/point/.part-00010.crc
index c168756..39655f3 100644
Binary files a/python/tests/resources/spatial_objects/point/.part-00010.crc and b/python/tests/resources/spatial_objects/point/.part-00010.crc differ
diff --git a/python/tests/resources/spatial_objects/point/part-00000 b/python/tests/resources/spatial_objects/point/part-00000
index cbda6c4..d8a6c71 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00000 and b/python/tests/resources/spatial_objects/point/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00001 b/python/tests/resources/spatial_objects/point/part-00001
index 1fcaf60..685afd3 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00001 and b/python/tests/resources/spatial_objects/point/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00002 b/python/tests/resources/spatial_objects/point/part-00002
index 83a17f4..51fae51 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00002 and b/python/tests/resources/spatial_objects/point/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00003 b/python/tests/resources/spatial_objects/point/part-00003
index a810c8d..3dde069 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00003 and b/python/tests/resources/spatial_objects/point/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00004 b/python/tests/resources/spatial_objects/point/part-00004
index cbccf88..912d545 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00004 and b/python/tests/resources/spatial_objects/point/part-00004 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00005 b/python/tests/resources/spatial_objects/point/part-00005
index bad4756..2228433 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00005 and b/python/tests/resources/spatial_objects/point/part-00005 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00006 b/python/tests/resources/spatial_objects/point/part-00006
index 2f17fbb..bbb0304 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00006 and b/python/tests/resources/spatial_objects/point/part-00006 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00007 b/python/tests/resources/spatial_objects/point/part-00007
index e05e2a6..70fae53 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00007 and b/python/tests/resources/spatial_objects/point/part-00007 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00008 b/python/tests/resources/spatial_objects/point/part-00008
index 0543bff..c612cc2 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00008 and b/python/tests/resources/spatial_objects/point/part-00008 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00009 b/python/tests/resources/spatial_objects/point/part-00009
index 6b02076..30d68eb 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00009 and b/python/tests/resources/spatial_objects/point/part-00009 differ
diff --git a/python/tests/resources/spatial_objects/point/part-00010 b/python/tests/resources/spatial_objects/point/part-00010
index 72c994d..dba2c36 100644
Binary files a/python/tests/resources/spatial_objects/point/part-00010 and b/python/tests/resources/spatial_objects/point/part-00010 differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00000.crc b/python/tests/resources/spatial_objects/point_index/.part-00000.crc
index c895289..9807afe 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00000.crc and b/python/tests/resources/spatial_objects/point_index/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00001.crc b/python/tests/resources/spatial_objects/point_index/.part-00001.crc
index dff8630..c200e0f 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00001.crc and b/python/tests/resources/spatial_objects/point_index/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00002.crc b/python/tests/resources/spatial_objects/point_index/.part-00002.crc
index 9cfd702..65f57fe 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00002.crc and b/python/tests/resources/spatial_objects/point_index/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00003.crc b/python/tests/resources/spatial_objects/point_index/.part-00003.crc
index 16ed55a..8562587 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00003.crc and b/python/tests/resources/spatial_objects/point_index/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00004.crc b/python/tests/resources/spatial_objects/point_index/.part-00004.crc
index 0883adb..1a35eb4 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00004.crc and b/python/tests/resources/spatial_objects/point_index/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00005.crc b/python/tests/resources/spatial_objects/point_index/.part-00005.crc
index 9b280e5..64d67e0 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00005.crc and b/python/tests/resources/spatial_objects/point_index/.part-00005.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00006.crc b/python/tests/resources/spatial_objects/point_index/.part-00006.crc
index 4fd502a..7b6fb59 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00006.crc and b/python/tests/resources/spatial_objects/point_index/.part-00006.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00007.crc b/python/tests/resources/spatial_objects/point_index/.part-00007.crc
index 12c9f30..f7ffd1d 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00007.crc and b/python/tests/resources/spatial_objects/point_index/.part-00007.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00008.crc b/python/tests/resources/spatial_objects/point_index/.part-00008.crc
index f3506be..5264d0f 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00008.crc and b/python/tests/resources/spatial_objects/point_index/.part-00008.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00009.crc b/python/tests/resources/spatial_objects/point_index/.part-00009.crc
index 0d278f9..19b838d 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00009.crc and b/python/tests/resources/spatial_objects/point_index/.part-00009.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/.part-00010.crc b/python/tests/resources/spatial_objects/point_index/.part-00010.crc
index c6c03cb..06eefb8 100644
Binary files a/python/tests/resources/spatial_objects/point_index/.part-00010.crc and b/python/tests/resources/spatial_objects/point_index/.part-00010.crc differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00000 b/python/tests/resources/spatial_objects/point_index/part-00000
index 9fc04a3..fe075b6 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00000 and b/python/tests/resources/spatial_objects/point_index/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00001 b/python/tests/resources/spatial_objects/point_index/part-00001
index 4fa3bdd..8951e9c 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00001 and b/python/tests/resources/spatial_objects/point_index/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00002 b/python/tests/resources/spatial_objects/point_index/part-00002
index 0dd17a2..b19d54c 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00002 and b/python/tests/resources/spatial_objects/point_index/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00003 b/python/tests/resources/spatial_objects/point_index/part-00003
index d76fa4c..845553f 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00003 and b/python/tests/resources/spatial_objects/point_index/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00004 b/python/tests/resources/spatial_objects/point_index/part-00004
index df7be0e..4618fc5 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00004 and b/python/tests/resources/spatial_objects/point_index/part-00004 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00005 b/python/tests/resources/spatial_objects/point_index/part-00005
index 03d8343..37874c3 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00005 and b/python/tests/resources/spatial_objects/point_index/part-00005 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00006 b/python/tests/resources/spatial_objects/point_index/part-00006
index 29f5216..1bf73b0 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00006 and b/python/tests/resources/spatial_objects/point_index/part-00006 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00007 b/python/tests/resources/spatial_objects/point_index/part-00007
index 67095ac..8dffbf6 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00007 and b/python/tests/resources/spatial_objects/point_index/part-00007 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00008 b/python/tests/resources/spatial_objects/point_index/part-00008
index 4493ffe..21a57de 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00008 and b/python/tests/resources/spatial_objects/point_index/part-00008 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00009 b/python/tests/resources/spatial_objects/point_index/part-00009
index b432a29..66a54a4 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00009 and b/python/tests/resources/spatial_objects/point_index/part-00009 differ
diff --git a/python/tests/resources/spatial_objects/point_index/part-00010 b/python/tests/resources/spatial_objects/point_index/part-00010
index e4d63bb..dcef107 100644
Binary files a/python/tests/resources/spatial_objects/point_index/part-00010 and b/python/tests/resources/spatial_objects/point_index/part-00010 differ
diff --git a/python/tests/resources/spatial_objects/polygon/.part-00000.crc b/python/tests/resources/spatial_objects/polygon/.part-00000.crc
index a5a6309..b61923f 100644
Binary files a/python/tests/resources/spatial_objects/polygon/.part-00000.crc and b/python/tests/resources/spatial_objects/polygon/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon/.part-00001.crc b/python/tests/resources/spatial_objects/polygon/.part-00001.crc
index 634224c..5578602 100644
Binary files a/python/tests/resources/spatial_objects/polygon/.part-00001.crc and b/python/tests/resources/spatial_objects/polygon/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon/.part-00002.crc b/python/tests/resources/spatial_objects/polygon/.part-00002.crc
index 855a4ea..e9e2567 100644
Binary files a/python/tests/resources/spatial_objects/polygon/.part-00002.crc and b/python/tests/resources/spatial_objects/polygon/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon/.part-00003.crc b/python/tests/resources/spatial_objects/polygon/.part-00003.crc
index 5e262dc..8b90d28 100644
Binary files a/python/tests/resources/spatial_objects/polygon/.part-00003.crc and b/python/tests/resources/spatial_objects/polygon/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon/.part-00004.crc b/python/tests/resources/spatial_objects/polygon/.part-00004.crc
index 6bc4af7..5f2d3cb 100644
Binary files a/python/tests/resources/spatial_objects/polygon/.part-00004.crc and b/python/tests/resources/spatial_objects/polygon/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon/part-00000 b/python/tests/resources/spatial_objects/polygon/part-00000
index fd32306..8d8666b 100644
Binary files a/python/tests/resources/spatial_objects/polygon/part-00000 and b/python/tests/resources/spatial_objects/polygon/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/polygon/part-00001 b/python/tests/resources/spatial_objects/polygon/part-00001
index f399f85..e09412d 100644
Binary files a/python/tests/resources/spatial_objects/polygon/part-00001 and b/python/tests/resources/spatial_objects/polygon/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/polygon/part-00002 b/python/tests/resources/spatial_objects/polygon/part-00002
index 211b94d..92ed42e 100644
Binary files a/python/tests/resources/spatial_objects/polygon/part-00002 and b/python/tests/resources/spatial_objects/polygon/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/polygon/part-00003 b/python/tests/resources/spatial_objects/polygon/part-00003
index 2f747a3..8ca826e 100644
Binary files a/python/tests/resources/spatial_objects/polygon/part-00003 and b/python/tests/resources/spatial_objects/polygon/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/polygon/part-00004 b/python/tests/resources/spatial_objects/polygon/part-00004
index c1ef4db..eb615e0 100644
Binary files a/python/tests/resources/spatial_objects/polygon/part-00004 and b/python/tests/resources/spatial_objects/polygon/part-00004 differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/.part-00000.crc b/python/tests/resources/spatial_objects/polygon_index/.part-00000.crc
index 1071209..2325384 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/.part-00000.crc and b/python/tests/resources/spatial_objects/polygon_index/.part-00000.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/.part-00001.crc b/python/tests/resources/spatial_objects/polygon_index/.part-00001.crc
index 76697e4..dcff8e0 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/.part-00001.crc and b/python/tests/resources/spatial_objects/polygon_index/.part-00001.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/.part-00002.crc b/python/tests/resources/spatial_objects/polygon_index/.part-00002.crc
index a942364..593b459 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/.part-00002.crc and b/python/tests/resources/spatial_objects/polygon_index/.part-00002.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/.part-00003.crc b/python/tests/resources/spatial_objects/polygon_index/.part-00003.crc
index ffa43e4..04f65de 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/.part-00003.crc and b/python/tests/resources/spatial_objects/polygon_index/.part-00003.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/.part-00004.crc b/python/tests/resources/spatial_objects/polygon_index/.part-00004.crc
index fa037ed..a114196 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/.part-00004.crc and b/python/tests/resources/spatial_objects/polygon_index/.part-00004.crc differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/part-00000 b/python/tests/resources/spatial_objects/polygon_index/part-00000
index eeb1115..c9e0d00 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/part-00000 and b/python/tests/resources/spatial_objects/polygon_index/part-00000 differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/part-00001 b/python/tests/resources/spatial_objects/polygon_index/part-00001
index 3b69dda..89f7461 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/part-00001 and b/python/tests/resources/spatial_objects/polygon_index/part-00001 differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/part-00002 b/python/tests/resources/spatial_objects/polygon_index/part-00002
index 2096ff4..8b60549 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/part-00002 and b/python/tests/resources/spatial_objects/polygon_index/part-00002 differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/part-00003 b/python/tests/resources/spatial_objects/polygon_index/part-00003
index 2005dd4..6154490 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/part-00003 and b/python/tests/resources/spatial_objects/polygon_index/part-00003 differ
diff --git a/python/tests/resources/spatial_objects/polygon_index/part-00004 b/python/tests/resources/spatial_objects/polygon_index/part-00004
index 20d660d..247a692 100644
Binary files a/python/tests/resources/spatial_objects/polygon_index/part-00004 and b/python/tests/resources/spatial_objects/polygon_index/part-00004 differ
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/GeometryUDT.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/GeometryUDT.scala
index f14ffa0..56c3348 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/GeometryUDT.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/GeometryUDT.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.UDT
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.sql.catalyst.util.{ArrayData, GenericArrayData}
 import org.apache.spark.sql.types._
 import org.datasyslab.geosparksql.utils.GeometrySerializer
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/IndexUDT.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/IndexUDT.scala
index 93f2046..be07600 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/IndexUDT.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/IndexUDT.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.UDT
 
-import com.vividsolutions.jts.index.SpatialIndex
+import org.locationtech.jts.index.SpatialIndex
 import org.apache.spark.sql.catalyst.util.{ArrayData, GenericArrayData}
 import org.apache.spark.sql.types.{ArrayType, ByteType, DataType, UserDefinedType}
 import org.datasyslab.geosparksql.utils.IndexSerializer
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/UdtRegistratorWrapper.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/UdtRegistratorWrapper.scala
index b950d38..016d427 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/UdtRegistratorWrapper.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/UDT/UdtRegistratorWrapper.scala
@@ -16,8 +16,8 @@
  */
 package org.apache.spark.sql.geosparksql.UDT
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.index.SpatialIndex
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.index.SpatialIndex
 import org.apache.spark.sql.types.UDTRegistration
 
 object UdtRegistratorWrapper {
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/AggregateFunctions.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/AggregateFunctions.scala
index 0d84158..dd8abef 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/AggregateFunctions.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/AggregateFunctions.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.expressions
 
-import com.vividsolutions.jts.geom.{Coordinate, Geometry, GeometryFactory}
+import org.locationtech.jts.geom.{Coordinate, Geometry, GeometryFactory}
 import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
 import org.apache.spark.sql.expressions.Aggregator
 
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Constructors.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Constructors.scala
index 9d01b40..a7d7c2d 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Constructors.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Constructors.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.expressions
 
-import com.vividsolutions.jts.geom.{Coordinate, GeometryFactory}
+import org.locationtech.jts.geom.{Coordinate, GeometryFactory}
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.Expression
 import org.apache.spark.sql.catalyst.expressions.codegen.CodegenFallback
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Functions.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Functions.scala
index 31c64e1..53b5a75 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Functions.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/Functions.scala
@@ -18,12 +18,12 @@ package org.apache.spark.sql.geosparksql.expressions
 
 import java.util
 
-import com.vividsolutions.jts.geom.{PrecisionModel, _}
-import com.vividsolutions.jts.operation.IsSimpleOp
-import com.vividsolutions.jts.operation.linemerge.LineMerger
-import com.vividsolutions.jts.operation.valid.IsValidOp
-import com.vividsolutions.jts.precision.GeometryPrecisionReducer
-import com.vividsolutions.jts.simplify.TopologyPreservingSimplifier
+import org.locationtech.jts.geom.{PrecisionModel, _}
+import org.locationtech.jts.operation.IsSimpleOp
+import org.locationtech.jts.operation.linemerge.LineMerger
+import org.locationtech.jts.operation.valid.IsValidOp
+import org.locationtech.jts.precision.GeometryPrecisionReducer
+import org.locationtech.jts.simplify.TopologyPreservingSimplifier
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.codegen.CodegenFallback
 import org.apache.spark.sql.catalyst.expressions.{Expression, Generator}
@@ -42,7 +42,7 @@ import scala.collection.mutable.ArrayBuffer
 import org.apache.spark.internal.Logging
 import org.apache.spark.sql.types.ArrayType
 import implicits._
-import org.geotools.factory.Hints
+import org.geotools.util.factory.Hints
 import org.opengis.referencing.crs.CoordinateReferenceSystem
 
 import scala.util.{Failure, Success, Try}
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/implicits.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/implicits.scala
index 915c803..5912483 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/implicits.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/expressions/implicits.scala
@@ -1,6 +1,6 @@
 package org.apache.spark.sql.geosparksql.expressions
 
-import com.vividsolutions.jts.geom.{Geometry, GeometryFactory, Point}
+import org.locationtech.jts.geom.{Geometry, GeometryFactory, Point}
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.Expression
 import org.apache.spark.sql.catalyst.util.{ArrayData, GenericArrayData}
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/DistanceJoinExec.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/DistanceJoinExec.scala
index 3509161..5e5a1f8 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/DistanceJoinExec.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/DistanceJoinExec.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.strategy.join
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.internal.Logging
 import org.apache.spark.rdd.RDD
 import org.apache.spark.sql.catalyst.expressions.{BindReferences, Expression, UnsafeRow}
diff --git a/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/TraitJoinQueryExec.scala b/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/TraitJoinQueryExec.scala
index 40c5aa4..a69cdc8 100644
--- a/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/TraitJoinQueryExec.scala
+++ b/sql/src/main/scala/org/apache/spark/sql/geosparksql/strategy/join/TraitJoinQueryExec.scala
@@ -16,7 +16,7 @@
  */
 package org.apache.spark.sql.geosparksql.strategy.join
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.rdd.RDD
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.codegen.GenerateUnsafeRowJoiner
diff --git a/sql/src/main/scala/org/datasyslab/geosparksql/UDF/Catalog.scala b/sql/src/main/scala/org/datasyslab/geosparksql/UDF/Catalog.scala
index a519f6a..2959d16 100644
--- a/sql/src/main/scala/org/datasyslab/geosparksql/UDF/Catalog.scala
+++ b/sql/src/main/scala/org/datasyslab/geosparksql/UDF/Catalog.scala
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geosparksql.UDF
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.sql.catalyst.analysis.FunctionRegistry.FunctionBuilder
 import org.apache.spark.sql.expressions.{Aggregator}
 import org.apache.spark.sql.geosparksql.expressions._
diff --git a/sql/src/main/scala/org/datasyslab/geosparksql/utils/Adapter.scala b/sql/src/main/scala/org/datasyslab/geosparksql/utils/Adapter.scala
index 0eac1a2..b0beb76 100644
--- a/sql/src/main/scala/org/datasyslab/geosparksql/utils/Adapter.scala
+++ b/sql/src/main/scala/org/datasyslab/geosparksql/utils/Adapter.scala
@@ -17,7 +17,7 @@
 package org.datasyslab.geosparksql.utils
 
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.{JavaPairRDD, JavaRDD}
 import org.apache.spark.rdd.RDD
 //import org.apache.spark.sql.geosparksql.GeometryWrapper
diff --git a/sql/src/main/scala/org/datasyslab/geosparksql/utils/GeometrySerializer.scala b/sql/src/main/scala/org/datasyslab/geosparksql/utils/GeometrySerializer.scala
index 20ef004..82959ce 100644
--- a/sql/src/main/scala/org/datasyslab/geosparksql/utils/GeometrySerializer.scala
+++ b/sql/src/main/scala/org/datasyslab/geosparksql/utils/GeometrySerializer.scala
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geosparksql.utils
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.io.{WKBReader, WKBWriter}
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.io.{WKBReader, WKBWriter}
 import org.apache.spark.sql.catalyst.util.ArrayData
-import com.vividsolutions.jts.io.{WKBReader, WKBWriter}
+import org.locationtech.jts.io.{WKBReader, WKBWriter}
 
 /**
   * SerDe using the WKB reader and writer objects
diff --git a/sql/src/main/scala/org/datasyslab/geosparksql/utils/IndexSerializer.scala b/sql/src/main/scala/org/datasyslab/geosparksql/utils/IndexSerializer.scala
index 6ac6ef9..2b2bbd0 100644
--- a/sql/src/main/scala/org/datasyslab/geosparksql/utils/IndexSerializer.scala
+++ b/sql/src/main/scala/org/datasyslab/geosparksql/utils/IndexSerializer.scala
@@ -20,7 +20,7 @@ import java.io.{ByteArrayInputStream, ByteArrayOutputStream}
 
 import com.esotericsoftware.kryo.Kryo
 import com.esotericsoftware.kryo.io.{Input, Output}
-import com.vividsolutions.jts.index.SpatialIndex
+import org.locationtech.jts.index.SpatialIndex
 import org.apache.spark.sql.catalyst.util.ArrayData
 
 // This is a wrapper of GeoSpark core kryo serializer
diff --git a/sql/src/main/scala/org/datasyslab/geosparksql/utils/PythonAdapterWrapper.scala b/sql/src/main/scala/org/datasyslab/geosparksql/utils/PythonAdapterWrapper.scala
index de0337c..8ea6f5f 100644
--- a/sql/src/main/scala/org/datasyslab/geosparksql/utils/PythonAdapterWrapper.scala
+++ b/sql/src/main/scala/org/datasyslab/geosparksql/utils/PythonAdapterWrapper.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geosparksql.utils
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.apache.spark.api.java.JavaPairRDD
 import org.apache.spark.sql.{DataFrame, SparkSession}
 import org.datasyslab.geospark.spatialRDD.SpatialRDD
diff --git a/sql/src/test/java/org/datasyslab/geosparksql/adapterTestJava.java b/sql/src/test/java/org/datasyslab/geosparksql/adapterTestJava.java
index c55ff2d..b62105a 100644
--- a/sql/src/test/java/org/datasyslab/geosparksql/adapterTestJava.java
+++ b/sql/src/test/java/org/datasyslab/geosparksql/adapterTestJava.java
@@ -26,7 +26,7 @@
 
 package org.datasyslab.geosparksql;
 
-import com.vividsolutions.jts.geom.Geometry;
+import org.locationtech.jts.geom.Geometry;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
@@ -83,98 +83,77 @@ public class adapterTestJava
     public void testReadCsv()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", "\t").option("header", "false").load(csvPointInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_PointFromText(inputtable._c0,\",\") as arealandmark from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadCsvUsingCoordinates()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_Point(cast(inputtable._c0 as Decimal(24,20)),cast(inputtable._c1 as Decimal(24,20))) as arealandmark from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadCsvWithIdUsingCoordinates()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_Point(cast(inputtable._c0 as Decimal(24,20)),cast(inputtable._c1 as Decimal(24,20))) as arealandmark from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadWkt()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_GeomFromWKT(inputtable._c0) as usacounty from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadWktWithId()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_GeomFromWKT(inputtable._c0) as usacounty from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadWkb()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", "\t").option("header", "false").load(mixedWkbGeometryInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_GeomFromWKB(inputtable._c0) as usacounty from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
     public void testReadWkbWithId()
     {
         Dataset<Row> df = sparkSession.read().format("csv").option("delimiter", "\t").option("header", "false").load(mixedWkbGeometryInputLocation);
-        df.show();
         df.createOrReplaceTempView("inputtable");
         Dataset<Row> spatialDf = sparkSession.sql("select ST_GeomFromWKB(inputtable._c0) as usacounty from inputtable");
-        spatialDf.show();
-        spatialDf.printSchema();
         SpatialRDD spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty");
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
@@ -182,7 +161,7 @@ public class adapterTestJava
     {
         SpatialRDD spatialRDD = ShapefileReader.readToGeometryRDD(JavaSparkContext.fromSparkContext(sparkSession.sparkContext()), shapefileInputLocation);
         spatialRDD.analyze();
-        Adapter.toDf(spatialRDD, sparkSession).show();
+        Adapter.toDf(spatialRDD, sparkSession).show(1);
     }
 
     @Test
@@ -210,7 +189,7 @@ public class adapterTestJava
 
         Dataset joinResultDf = Adapter.toDf(joinResultPairRDD, sparkSession);
 
-        joinResultDf.show();
+        joinResultDf.show(1);
     }
 
     @Test
@@ -240,7 +219,7 @@ public class adapterTestJava
 
         Dataset joinResultDf = Adapter.toDf(joinResultPairRDD, sparkSession);
 
-        joinResultDf.show();
+        joinResultDf.show(1);
     }
 
     /**
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/GeometrySample.scala b/sql/src/test/scala/org/datasyslab/geosparksql/GeometrySample.scala
index ffda3e5..eabc52c 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/GeometrySample.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/GeometrySample.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geosparksql
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.io.WKTReader
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.io.WKTReader
 import org.apache.spark.sql.{Dataset, Row}
 
 import scala.tools.nsc.interpreter.InputStream
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/adapterTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/adapterTestScala.scala
index a592a3d..f3d338e 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/adapterTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/adapterTestScala.scala
@@ -38,112 +38,84 @@ class adapterTestScala extends TestBaseScala {
 
     it("Read CSV point into a SpatialRDD") {
       var df = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(arealmPointInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select ST_PointFromText(inputtable._c0,\",\") as arealandmark from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark")
       spatialRDD.analyze()
-      Adapter.toDf(spatialRDD, sparkSession).show()
+      Adapter.toDf(spatialRDD, sparkSession).show(1)
     }
 
     it("Read CSV point at a different column id into a SpatialRDD") {
       var df = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(arealmPointInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select \'123\', \'456\', ST_PointFromText(inputtable._c0,\",\") as arealandmark, \'789\' from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, 2)
       spatialRDD.analyze()
       val newDf = Adapter.toDf(spatialRDD, sparkSession)
-      newDf.show()
       assert(newDf.schema.toList.map(f=>f.name).mkString("\t").equals("geometry\t123\t456\t789"))
     }
 
     it("Read CSV point at a different column col name into a SpatialRDD") {
       var df = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(arealmPointInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select \'123\', \'456\', ST_PointFromText(inputtable._c0,\",\") as arealandmark, \'789\' from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark")
       spatialRDD.analyze()
       val newDf = Adapter.toDf(spatialRDD, sparkSession)
-      newDf.show()
       assert(newDf.schema.toList.map(f=>f.name).mkString("\t").equals("geometry\t123\t456\t789"))
     }
 
     it("Read CSV point into a SpatialRDD by passing coordinates") {
       var df = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(arealmPointInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select ST_Point(cast(inputtable._c0 as Decimal(24,20)),cast(inputtable._c1 as Decimal(24,20))) as arealandmark from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark")
       assert(Adapter.toDf(spatialRDD, sparkSession).columns.length==1)
-      Adapter.toDf(spatialRDD, sparkSession).show()
+//      Adapter.toDf(spatialRDD, sparkSession).show(1)
     }
 
     it("Read CSV point into a SpatialRDD with unique Id by passing coordinates") {
       var df = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(arealmPointInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       // Use Column _c0 as the unique Id but the id can be anything in the same row
       var spatialDf = sparkSession.sql("select ST_Point(cast(inputtable._c0 as Decimal(24,20)),cast(inputtable._c1 as Decimal(24,20))) as arealandmark from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "arealandmark")
       spatialRDD.analyze()
       assert(Adapter.toDf(spatialRDD, sparkSession).columns.length==1)
-      Adapter.toDf(spatialRDD, sparkSession).show()
+//      Adapter.toDf(spatialRDD, sparkSession).show(1)
     }
 
 
     it("Read mixed WKT geometries into a SpatialRDD") {
       var df = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select ST_GeomFromWKT(inputtable._c0) as usacounty from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty")
       spatialRDD.analyze()
-      Adapter.toDf(spatialRDD, sparkSession).show()
       assert(Adapter.toDf(spatialRDD, sparkSession).columns.length==1)
-      Adapter.toDf(spatialRDD, sparkSession).show()
     }
 
     it("Read mixed WKT geometries into a SpatialRDD with uniqueId") {
       var df = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
-      df.show()
       df.createOrReplaceTempView("inputtable")
       var spatialDf = sparkSession.sql("select ST_GeomFromWKT(inputtable._c0) as usacounty, inputtable._c3, inputtable._c5 from inputtable")
-      spatialDf.show()
-      spatialDf.printSchema()
       var spatialRDD = Adapter.toSpatialRdd(spatialDf, "usacounty")
       spatialRDD.analyze()
       assert(Adapter.toDf(spatialRDD, sparkSession).columns.length==3)
-      Adapter.toDf(spatialRDD, sparkSession).show()
     }
 
     it("Read shapefile -> DataFrame") {
       var spatialRDD = ShapefileReader.readToGeometryRDD(sparkSession.sparkContext, shapefileInputLocation)
       spatialRDD.analyze()
-      println(spatialRDD.fieldNames)
       var df = Adapter.toDf(spatialRDD, sparkSession)
-      df.show()
+      df.show(1)
     }
 
     it("Read shapefileWithMissing -> DataFrame") {
       var spatialRDD = ShapefileReader.readToGeometryRDD(sparkSession.sparkContext, shapefileWithMissingsTrailingInputLocation)
       spatialRDD.analyze()
-      println(spatialRDD.fieldNames)
       var df = Adapter.toDf(spatialRDD, sparkSession)
-      df.show()
+      df.show(1)
     }
 
     it("Read GeoJSON to DataFrame") {
@@ -151,7 +123,6 @@ class adapterTestScala extends TestBaseScala {
       var spatialRDD = new PolygonRDD(sparkSession.sparkContext, geojsonInputLocation, FileDataSplitter.GEOJSON, true)
       spatialRDD.analyze()
       var df = Adapter.toDf(spatialRDD, sparkSession).withColumn("geometry", callUDF("ST_GeomFromWKT", col("geometry")))
-      df.show()
       assert (df.columns(1) == "STATEFP")
     }
 
@@ -176,10 +147,10 @@ class adapterTestScala extends TestBaseScala {
       val joinResultPairRDD = JoinQuery.SpatialJoinQueryFlat(pointRDD, polygonRDD, true, true)
 
       val joinResultDf = Adapter.toDf(joinResultPairRDD, sparkSession)
-      joinResultDf.show()
+      joinResultDf.show(1)
 
       val joinResultDf2 = Adapter.toDf(joinResultPairRDD, List("abc","def"), List(), sparkSession)
-      joinResultDf2.show()
+      joinResultDf2.show(1)
     }
 
     it("Convert distance join result to DataFrame") {
@@ -204,7 +175,7 @@ class adapterTestScala extends TestBaseScala {
       var joinResultPairRDD = JoinQuery.DistanceJoinQueryFlat(pointRDD, circleRDD, true, true)
 
       var joinResultDf = Adapter.toDf(joinResultPairRDD, sparkSession)
-      joinResultDf.show()
+      joinResultDf.show(1)
     }
 
     it("load id column Data check"){
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/aggregateFunctionTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/aggregateFunctionTestScala.scala
index 26d1337..751a49f 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/aggregateFunctionTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/aggregateFunctionTestScala.scala
@@ -26,10 +26,7 @@
 
 package org.datasyslab.geosparksql
 
-import com.vividsolutions.jts.geom.{Coordinate, Geometry, GeometryFactory}
-import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
-import org.apache.spark.sql.expressions.UserDefinedAggregator
-import org.apache.spark.sql.functions
+import org.locationtech.jts.geom.{Coordinate, Geometry, GeometryFactory}
 
 class aggregateFunctionTestScala extends TestBaseScala {
 
@@ -56,10 +53,8 @@ class aggregateFunctionTestScala extends TestBaseScala {
 
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(unionPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var union = sparkSession.sql("select ST_Union_Aggr(polygondf.polygonshape) from polygondf")
       assert(union.take(1)(0).get(0).asInstanceOf[Geometry].getArea == 10100)
     }
@@ -68,14 +63,12 @@ class aggregateFunctionTestScala extends TestBaseScala {
 
       val twoPolygonsAsWktDf = sparkSession.read.textFile(intersectionPolygonInputLocation).toDF("polygon_wkt")
       twoPolygonsAsWktDf.createOrReplaceTempView("two_polygons_wkt")
-      twoPolygonsAsWktDf.show()
 
       sparkSession
         .sql("select ST_GeomFromWKT(polygon_wkt) as polygon from two_polygons_wkt")
         .createOrReplaceTempView("two_polygons")
 
       val intersectionDF = sparkSession.sql("select ST_Intersection_Aggr(polygon) from two_polygons")
-      intersectionDF.show(false)
 
       assertResult(0.0034700160226227607)(intersectionDF.take(1)(0).get(0).asInstanceOf[Geometry].getArea)
     }
@@ -84,14 +77,12 @@ class aggregateFunctionTestScala extends TestBaseScala {
 
       val twoPolygonsAsWktDf = sparkSession.read.textFile(intersectionPolygonNoIntersectionInputLocation).toDF("polygon_wkt")
       twoPolygonsAsWktDf.createOrReplaceTempView("two_polygons_no_intersection_wkt")
-      twoPolygonsAsWktDf.show()
 
       sparkSession
         .sql("select ST_GeomFromWKT(polygon_wkt) as polygon from two_polygons_no_intersection_wkt")
         .createOrReplaceTempView("two_polygons_no_intersection")
 
       val intersectionDF = sparkSession.sql("select ST_Intersection_Aggr(polygon) from two_polygons_no_intersection")
-      intersectionDF.show(false)
 
       assertResult(0.0)(intersectionDF.take(1)(0).get(0).asInstanceOf[Geometry].getArea)
     }
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/constructorTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/constructorTestScala.scala
index ca6fc57..ffcb94e 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/constructorTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/constructorTestScala.scala
@@ -26,7 +26,7 @@
 
 package org.datasyslab.geosparksql
 
-import com.vividsolutions.jts.geom.Geometry
+import org.locationtech.jts.geom.Geometry
 import org.datasyslab.geospark.formatMapper.GeoJsonReader
 import org.datasyslab.geospark.formatMapper.shapefileParser.ShapefileReader
 import org.datasyslab.geosparksql.utils.Adapter
@@ -51,14 +51,12 @@ class constructorTestScala extends TestBaseScala {
 
     it ("Passed ST_PolygonFromEnvelope") {
       val polygonDF = sparkSession.sql("select ST_PolygonFromEnvelope(double(1.234),double(2.234),double(3.345),double(3.345))")
-      polygonDF.show(false)
       assert(polygonDF.count() == 1)
     }
 
     it("Passed ST_PointFromText") {
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(arealmPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show(false)
 
       var pointDf = sparkSession.sql("select ST_PointFromText(concat(_c0,',',_c1),',') as arealandmark from pointtable")
       assert(pointDf.count() == 121960)
@@ -67,18 +65,14 @@ class constructorTestScala extends TestBaseScala {
     it("Passed ST_GeomFromWKT") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWkt(polygontable._c0) as countyshape from polygontable")
-      polygonDf.show(10)
       assert(polygonDf.count() == 100)
     }
 
     it("Passed ST_GeomFromText") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromText(polygontable._c0) as countyshape from polygontable")
-      polygonDf.show(10)
       assert(polygonDf.count() == 100)
     }
     
@@ -98,39 +92,32 @@ class constructorTestScala extends TestBaseScala {
     it("Passed ST_GeomFromWKB") {
       var polygonWkbDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWkbGeometryInputLocation)
       polygonWkbDf.createOrReplaceTempView("polygontable")
-      polygonWkbDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKB(polygontable._c0) as countyshape from polygontable")
-      polygonDf.show(10)
       assert(polygonDf.count() == 100)
     }
 
     it("Passed ST_GeomFromGeoJSON") {
       val polygonJsonDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(geojsonInputLocation)
       polygonJsonDf.createOrReplaceTempView("polygontable")
-      polygonJsonDf.show()
       val polygonDf = sparkSession.sql("select ST_GeomFromGeoJSON(polygontable._c0) as countyshape from polygontable")
-      polygonDf.show()
       assert(polygonDf.count() == 1000)
     }
 
     it("Passed GeoJsonReader to DataFrame") {
       var spatialRDD = GeoJsonReader.readToGeometryRDD(sparkSession.sparkContext, geojsonInputLocation)
       var spatialDf = Adapter.toDf(spatialRDD, sparkSession)
-      spatialDf.show()
+      assert(spatialDf.count()>0)
     }
 
     it("Read shapefile -> DataFrame > RDD -> DataFrame") {
       var spatialRDD = ShapefileReader.readToGeometryRDD(sparkSession.sparkContext, shapefileInputLocation)
       spatialRDD.analyze()
       var df = Adapter.toDf(spatialRDD, sparkSession)
-      df.show
       assert (df.columns(1) == "STATEFP")
       import org.apache.spark.sql.functions.{callUDF, col}
       df = df.withColumn("geometry", callUDF("ST_GeomFromWKT", col("geometry")))
-      df.show()
       var spatialRDD2 = Adapter.toSpatialRdd(df, "geometry")
-      println(spatialRDD2.rawSpatialRDD.take(1).get(0).getUserData)
-      Adapter.toDf(spatialRDD2, sparkSession).show()
+      Adapter.toDf(spatialRDD2, sparkSession).show(1)
     }
   }
 }
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/functionTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/functionTestScala.scala
index de061ba..29d6402 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/functionTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/functionTestScala.scala
@@ -26,7 +26,7 @@
 
 package org.datasyslab.geosparksql
 
-import com.vividsolutions.jts.geom.{Geometry}
+import org.locationtech.jts.geom.{Geometry}
 import org.geotools.geometry.jts.WKTReader2
 import org.scalatest.{GivenWhenThen, Matchers}
 import implicits._
@@ -42,89 +42,72 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
     it("Passed ST_ConvexHull") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_ConvexHull(polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Buffer") {
       val polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       val polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       val functionDf = sparkSession.sql("select ST_Buffer(polygondf.countyshape, 1) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Envelope") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Envelope(polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Centroid") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Centroid(polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Length") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Length(polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Area") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Area(polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Distance") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Distance(polygondf.countyshape, polygondf.countyshape) from polygondf")
-      functionDf.show()
+      assert(functionDf.count()>0);
     }
 
     it("Passed ST_Transform") {
       var polygonWktDf = sparkSession.read.format("csv").option("delimiter", "\t").option("header", "false").load(mixedWktGeometryInputLocation)
       polygonWktDf.createOrReplaceTempView("polygontable")
-      polygonWktDf.show()
       var polygonDf = sparkSession.sql("select ST_GeomFromWKT(polygontable._c0) as countyshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
       var functionDf = sparkSession.sql("select ST_Transform(polygondf.countyshape, 'epsg:4326','epsg:3857',true, false) from polygondf")
-      functionDf.show()
 
       val polygon = "POLYGON ((110.54671 55.818002, 110.54671 55.143743, 110.940494 55.143743, 110.940494 55.818002, 110.54671 55.818002))"
       val forceXYExpect = "POLYGON ((471596.69167460164 6185916.951191288, 471107.5623640998 6110880.974228167, 496207.109151055 6110788.804712435, 496271.31937046186 6185825.60569904, 471596.69167460164 6185916.951191288))"
@@ -134,10 +117,8 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
         .createOrReplaceTempView("df")
 
       sparkSession.sql("select ST_Transform(geom, 'EPSG:4326', 'EPSG:32649', false, false)  from df")
-        .show(false)
 
       sparkSession.sql("select ST_Transform(geom, 'EPSG:4326', 'EPSG:32649', true, false)  from df")
-        .show(false)
 
       val forceXYResult = sparkSession.sql(s"""select ST_Transform(ST_geomFromWKT('$polygon'),'EPSG:4326', 'EPSG:32649', true, false)""").rdd.map(row => row.getAs[Geometry](0).toString).collect()(0)
       assert(forceXYResult == forceXYExpect)
@@ -199,13 +180,11 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
         """
           |SELECT ST_PrecisionReduce(ST_GeomFromWKT('Point(0.1234567890123456789 0.1234567890123456789)'), 8)
         """.stripMargin)
-      testtable.show(false)
       assert(testtable.take(1)(0).get(0).asInstanceOf[Geometry].getCoordinates()(0).x == 0.12345679)
       testtable = sparkSession.sql(
         """
           |SELECT ST_PrecisionReduce(ST_GeomFromWKT('Point(0.1234567890123456789 0.1234567890123456789)'), 11)
         """.stripMargin)
-      testtable.show(false)
       assert(testtable.take(1)(0).get(0).asInstanceOf[Geometry].getCoordinates()(0).x == 0.12345678901)
 
     }
@@ -351,9 +330,6 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
 
       geometries
         .selectExpr("ST_Azimuth(geomA, geomB)")
-        .show
-      geometries
-        .selectExpr("ST_Azimuth(geomA, geomB)")
         .as[Double]
         .map(180 / math.Pi * _)
         .collect()
@@ -604,7 +580,6 @@ class functionTestScala extends TestBaseScala with Matchers with GeometrySample
 
     When("Using ST_Dumps")
     val dumpedGeometries = geometryDf.selectExpr("ST_Dump(geom) as geom")
-    dumpedGeometries.show(10, false)
     Then("Should return geometries list")
 
     dumpedGeometries.select(explode($"geom")).count shouldBe 14
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/implicits.scala b/sql/src/test/scala/org/datasyslab/geosparksql/implicits.scala
index 52f819d..cc235bb 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/implicits.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/implicits.scala
@@ -1,7 +1,7 @@
 package org.datasyslab.geosparksql
 
-import com.vividsolutions.jts.geom.Geometry
-import com.vividsolutions.jts.io.WKTReader
+import org.locationtech.jts.geom.Geometry
+import org.locationtech.jts.io.WKTReader
 import org.apache.spark.sql.DataFrame
 
 object implicits {
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/predicateJoinTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/predicateJoinTestScala.scala
index cf29863..0026859 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/predicateJoinTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/predicateJoinTestScala.scala
@@ -41,103 +41,67 @@ class predicateJoinTestScala extends TestBaseScala {
 
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Contains(polygondf.polygonshape,pointdf.pointshape) ")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 1000)
     }
 
     it("Passed ST_Intersects in a join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Intersects(polygondf.polygonshape,pointdf.pointshape) ")
-
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 1000)
     }
 
     it("Passed ST_Touches in a join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Touches(polygondf.polygonshape,pointdf.pointshape) ")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 1000)
     }
 
     it("Passed ST_Within in a join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Within(pointdf.pointshape, polygondf.polygonshape) ")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 1000)
     }
     
     it("Passed ST_Overlaps in a join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
@@ -150,33 +114,22 @@ class predicateJoinTestScala extends TestBaseScala {
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, polygonodf where ST_Overlaps(polygondf.polygonshape, polygonodf.polygonshape)")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 57)
     }
 
     it("Passed ST_Crosses in a join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Crosses(pointdf.pointshape, polygondf.polygonshape) ")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 1000)
     }
 
@@ -185,21 +138,16 @@ class predicateJoinTestScala extends TestBaseScala {
 
       var pointCsvDF1 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF1.createOrReplaceTempView("pointtable")
-      pointCsvDF1.show()
       var pointDf1 = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape1 from pointtable")
       pointDf1.createOrReplaceTempView("pointdf1")
-      pointDf1.show()
 
       var pointCsvDF2 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF2.createOrReplaceTempView("pointtable")
-      pointCsvDF2.show()
       var pointDf2 = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape2 from pointtable")
       pointDf2.createOrReplaceTempView("pointdf2")
-      pointDf2.show()
 
       var distanceJoinDf = sparkSession.sql("select * from pointdf1, pointdf2 where ST_Distance(pointdf1.pointshape1,pointdf2.pointshape2) <= 2")
-      distanceJoinDf.explain()
-      distanceJoinDf.show(10)
+
       assert(distanceJoinDf.count() == 2998)
     }
 
@@ -208,47 +156,33 @@ class predicateJoinTestScala extends TestBaseScala {
 
       var pointCsvDF1 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF1.createOrReplaceTempView("pointtable")
-      pointCsvDF1.show()
       var pointDf1 = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape1 from pointtable")
       pointDf1.createOrReplaceTempView("pointdf1")
-      pointDf1.show()
 
       var pointCsvDF2 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF2.createOrReplaceTempView("pointtable")
-      pointCsvDF2.show()
       var pointDf2 = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape2 from pointtable")
       pointDf2.createOrReplaceTempView("pointdf2")
-      pointDf2.show()
 
       var distanceJoinDf = sparkSession.sql("select * from pointdf1, pointdf2 where ST_Distance(pointdf1.pointshape1,pointdf2.pointshape2) < 2")
-      distanceJoinDf.explain()
-      distanceJoinDf.show(10)
+
       assert(distanceJoinDf.count() == 2998)
     }
 
     it("Passed ST_Contains in a range and join") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygonInputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var pointCsvDF = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPointInputLocation)
       pointCsvDF.createOrReplaceTempView("pointtable")
-      pointCsvDF.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20))) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var rangeJoinDf = sparkSession.sql("select * from polygondf, pointdf where ST_Contains(polygondf.polygonshape,pointdf.pointshape) " +
         "and ST_Contains(ST_PolygonFromEnvelope(1.0,101.0,501.0,601.0), polygondf.polygonshape)")
 
-      rangeJoinDf.explain()
-      rangeJoinDf.show(3)
       assert(rangeJoinDf.count() == 500)
     }
 
@@ -263,7 +197,6 @@ class predicateJoinTestScala extends TestBaseScala {
 
       val pointDF = sparkSession.sql("select id, ST_Point(cast(lat as Decimal(24,20)), cast(lon as Decimal(24,20))) AS latlon_point FROM rawPointDf")
       pointDF.createOrReplaceTempView("pointDf")
-      pointDF.show(false)
 
       val rawPolygonDf = sparkSession.createDataFrame(
         sparkSession.sparkContext.parallelize(
@@ -284,101 +217,65 @@ class predicateJoinTestScala extends TestBaseScala {
       assert(withinEnvelopeDF.count() == 1)
     }
     it("Passed ST_Equals in a join for ST_Point") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var pointCsvDf1 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPoint1InputLocation)
       pointCsvDf1.createOrReplaceTempView("pointtable1")
-      pointCsvDf1.show()
       var pointDf1 = sparkSession.sql("select ST_Point(cast(pointtable1._c0 as Decimal(24,20)),cast(pointtable1._c1 as Decimal(24,20)) ) as pointshape1 from pointtable1")
       pointDf1.createOrReplaceTempView("pointdf1")
-      pointDf1.show()
 
       var pointCsvDF2 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPoint2InputLocation)
       pointCsvDF2.createOrReplaceTempView("pointtable2")
-      pointCsvDF2.show()
       var pointDf2 = sparkSession.sql("select ST_Point(cast(pointtable2._c0 as Decimal(24,20)),cast(pointtable2._c1 as Decimal(24,20))) as pointshape2 from pointtable2")
       pointDf2.createOrReplaceTempView("pointdf2")
-      pointDf2.show()
 
       var equalJoinDf = sparkSession.sql("select * from pointdf1, pointdf2 where ST_Equals(pointdf1.pointshape1,pointdf2.pointshape2) ")
 
-      equalJoinDf.explain()
-      equalJoinDf.show(3)
       assert(equalJoinDf.count() == 100, s"Expected 100 but got ${equalJoinDf.count()}")
     }
     it("Passed ST_Equals in a join for ST_Polygon") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf1 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygon1InputLocation)
       polygonCsvDf1.createOrReplaceTempView("polygontable1")
-      polygonCsvDf1.show()
       var polygonDf1 = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable1._c0 as Decimal(24,20)),cast(polygontable1._c1 as Decimal(24,20)), cast(polygontable1._c2 as Decimal(24,20)), cast(polygontable1._c3 as Decimal(24,20))) as polygonshape1 from polygontable1")
       polygonDf1.createOrReplaceTempView("polygondf1")
-      polygonDf1.show()
 
 
       var polygonCsvDf2 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygon2InputLocation)
       polygonCsvDf2.createOrReplaceTempView("polygontable2")
-      polygonCsvDf2.show()
       var polygonDf2 = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable2._c0 as Decimal(24,20)),cast(polygontable2._c1 as Decimal(24,20)), cast(polygontable2._c2 as Decimal(24,20)), cast(polygontable2._c3 as Decimal(24,20))) as polygonshape2 from polygontable2")
       polygonDf2.createOrReplaceTempView("polygondf2")
-      polygonDf2.show()
 
       var equalJoinDf = sparkSession.sql("select * from polygondf1, polygondf2 where ST_Equals(polygondf1.polygonshape1,polygondf2.polygonshape2) ")
 
-      equalJoinDf.explain()
-      equalJoinDf.show(3)
       assert(equalJoinDf.count() == 100, s"Expected 100 but got ${equalJoinDf.count()}")
     }
     it("Passed ST_Equals in a join for ST_Polygon Random Shuffle") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var polygonCsvDf1 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygon1RandomInputLocation)
       polygonCsvDf1.createOrReplaceTempView("polygontable1")
-      polygonCsvDf1.show()
       var polygonDf1 = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable1._c0 as Decimal(24,20)),cast(polygontable1._c1 as Decimal(24,20)), cast(polygontable1._c2 as Decimal(24,20)), cast(polygontable1._c3 as Decimal(24,20))) as polygonshape1 from polygontable1")
       polygonDf1.createOrReplaceTempView("polygondf1")
-      polygonDf1.show()
 
 
       var polygonCsvDf2 = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygon2RandomInputLocation)
       polygonCsvDf2.createOrReplaceTempView("polygontable2")
-      polygonCsvDf2.show()
       var polygonDf2 = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable2._c0 as Decimal(24,20)),cast(polygontable2._c1 as Decimal(24,20)), cast(polygontable2._c2 as Decimal(24,20)), cast(polygontable2._c3 as Decimal(24,20))) as polygonshape2 from polygontable2")
       polygonDf2.createOrReplaceTempView("polygondf2")
-      polygonDf2.show()
 
       var equalJoinDf = sparkSession.sql("select * from polygondf1, polygondf2 where ST_Equals(polygondf1.polygonshape1,polygondf2.polygonshape2) ")
 
-      equalJoinDf.explain()
-      equalJoinDf.show(3)
       assert(equalJoinDf.count() == 100, s"Expected 100 but got ${equalJoinDf.count()}")
     }
     it("Passed ST_Equals in a join for ST_Point and ST_Polygon") {
-      val geosparkConf = new GeoSparkConf(sparkSession.sparkContext.getConf)
-      println(geosparkConf)
-
       var pointCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPoint1InputLocation)
       pointCsvDf.createOrReplaceTempView("pointtable")
-      pointCsvDf.show()
       var pointDf = sparkSession.sql("select ST_Point(cast(pointtable._c0 as Decimal(24,20)),cast(pointtable._c1 as Decimal(24,20)) ) as pointshape from pointtable")
       pointDf.createOrReplaceTempView("pointdf")
-      pointDf.show()
 
       var polygonCsvDf = sparkSession.read.format("csv").option("delimiter", ",").option("header", "false").load(csvPolygon1InputLocation)
       polygonCsvDf.createOrReplaceTempView("polygontable")
-      polygonCsvDf.show()
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       var equalJoinDf = sparkSession.sql("select * from pointdf, polygondf where ST_Equals(pointdf.pointshape,polygondf.polygonshape) ")
 
-      equalJoinDf.explain()
-      equalJoinDf.show(3)
       assert(equalJoinDf.count() == 0, s"Expected 0 but got ${equalJoinDf.count()}")
     }
   }
diff --git a/sql/src/test/scala/org/datasyslab/geosparksql/predicateTestScala.scala b/sql/src/test/scala/org/datasyslab/geosparksql/predicateTestScala.scala
index 954a82a..09f15de 100644
--- a/sql/src/test/scala/org/datasyslab/geosparksql/predicateTestScala.scala
+++ b/sql/src/test/scala/org/datasyslab/geosparksql/predicateTestScala.scala
@@ -37,7 +37,6 @@ class predicateTestScala extends TestBaseScala {
       pointDf.createOrReplaceTempView("pointdf")
 
       var resultDf = sparkSession.sql("select * from pointdf where ST_Contains(ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0), pointdf.arealandmark)")
-      resultDf.show()
       assert(resultDf.count() == 999)
     }
     it("Passed ST_Intersects") {
@@ -47,7 +46,6 @@ class predicateTestScala extends TestBaseScala {
       pointDf.createOrReplaceTempView("pointdf")
 
       var resultDf = sparkSession.sql("select * from pointdf where ST_Intersects(ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0), pointdf.arealandmark)")
-      resultDf.show()
       assert(resultDf.count() == 999)
     }
     it("Passed ST_Within") {
@@ -57,7 +55,6 @@ class predicateTestScala extends TestBaseScala {
       pointDf.createOrReplaceTempView("pointdf")
 
       var resultDf = sparkSession.sql("select * from pointdf where ST_Within(pointdf.arealandmark, ST_PolygonFromEnvelope(1.0,100.0,1000.0,1100.0))")
-      resultDf.show()
       assert(resultDf.count() == 999)
     }
 
@@ -73,7 +70,6 @@ class predicateTestScala extends TestBaseScala {
       pointDf.createOrReplaceTempView("pointdf")
 
       var equaldf = sparkSession.sql("select * from pointdf where ST_Equals(pointdf.point, ST_Point(100.1, 200.1)) ")
-      equaldf.show()
 
       assert(equaldf.count() == 5, s"Expected 5 value but got ${equaldf.count()}")
 
@@ -90,17 +86,14 @@ class predicateTestScala extends TestBaseScala {
       // Convert the polygontable to polygons using ST_PolygonFromEnvelope
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       // Selected polygon is Polygon (100.01,200.01,100.5,200.5)
       var equaldf1 = sparkSession.sql("select * from polygonDf where ST_Equals(polygonDf.polygonshape, ST_PolygonFromEnvelope(100.01,200.01,100.5,200.5)) ")
-      equaldf1.show()
 
       assert(equaldf1.count() == 5, s"Expected 5 value but got ${equaldf1.count()}")
 
       // Change the order of the polygon points (100.5,200.5,100.01,200.01)
       var equaldf2 = sparkSession.sql("select * from polygonDf where ST_Equals(polygonDf.polygonshape, ST_PolygonFromEnvelope(100.5,200.5,100.01,200.01)) ")
-      equaldf2.show()
 
       assert(equaldf2.count() == 5, s"Expected 5 value but got ${equaldf2.count()}")
 
@@ -117,11 +110,9 @@ class predicateTestScala extends TestBaseScala {
       // Convert the polygontable to polygons using ST_PolygonFromEnvelope and cast
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       // Selected point is Point (91.01,191.01)
       var equaldf = sparkSession.sql("select * from polygonDf where ST_Equals(polygonDf.polygonshape, ST_Point(91.01,191.01)) ")
-      equaldf.show()
 
       assert(equaldf.count() == 0, s"Expected 0 value but got ${equaldf.count()}")
 
@@ -138,7 +129,6 @@ class predicateTestScala extends TestBaseScala {
       // Convert the polygontable to polygons using ST_PolygonFromEnvelope and cast
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       /* Selected LineString is ST_LineStringFromText - (100.01,200.01,100.5,200.01,100.5,200.5,100.01,200.5,100.01,200.01)
        * It forms the boundary of the polygon Polygon(100.01,200.01,100.5,200.5)
@@ -153,7 +143,6 @@ class predicateTestScala extends TestBaseScala {
       val string = "100.01,200.01,100.5,200.01,100.5,200.5,100.01,200.5,100.01,200.01"
 
       var equaldf = sparkSession.sql(s"select * from polygonDf where ST_Equals(polygonDf.polygonshape, ST_LineStringFromText(\'$string\', \',\')) ")
-      equaldf.show()
 
       assert(equaldf.count() == 0, s"Expected 0 value but got ${equaldf.count()}")
 
@@ -169,13 +158,11 @@ class predicateTestScala extends TestBaseScala {
       // Convert the polygontable to polygons using ST_PolygonFromEnvelope and cast
       var polygonDf = sparkSession.sql("select ST_PolygonFromEnvelope(cast(polygontable._c0 as Decimal(24,20)),cast(polygontable._c1 as Decimal(24,20)), cast(polygontable._c2 as Decimal(24,20)), cast(polygontable._c3 as Decimal(24,20))) as polygonshape from polygontable")
       polygonDf.createOrReplaceTempView("polygondf")
-      polygonDf.show()
 
       // Selected Polygon is ST_PolygonFromText - Polygon(100.01,200.01,100.5,200.5) formed using ST_PolygonFromText.
       val string = "100.01,200.01,100.5,200.01,100.5,200.5,100.01,200.5,100.01,200.01"
 
       var equaldf = sparkSession.sql(s"select * from polygonDf where ST_Equals(polygonDf.polygonshape, ST_PolygonFromText(\'$string\', \',\')) ")
-      equaldf.show()
 
       assert(equaldf.count() == 5, s"Expected 5 value but got ${equaldf.count()}")
     }
@@ -200,7 +187,6 @@ class predicateTestScala extends TestBaseScala {
       pointDf.createOrReplaceTempView("pointdf")
 
       var resultDf = sparkSession.sql("select * from pointdf where ST_Touches(pointdf.arealandmark, ST_PolygonFromEnvelope(0.0,99.0,1.1,101.1))")
-      resultDf.show()
       assert(resultDf.count() == 1)
     }
     it("Passed ST_Overlaps") {
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/core/GlobalParameter.java b/viz/src/main/java/org/datasyslab/geosparkviz/core/GlobalParameter.java
index 4772f96..03f54b2 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/core/GlobalParameter.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/core/GlobalParameter.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geosparkviz.core;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Logger;
 import org.datasyslab.geosparkviz.extension.coloringRule.ColoringRuleFactory;
 import org.datasyslab.geosparkviz.extension.coloringRule.LinearFunction;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/core/VisualizationOperator.java b/viz/src/main/java/org/datasyslab/geosparkviz/core/VisualizationOperator.java
index 7a78667..e66c298 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/core/VisualizationOperator.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/core/VisualizationOperator.java
@@ -16,10 +16,10 @@
  */
 package org.datasyslab.geosparkviz.core;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaRDD;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ChoroplethMap.java b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ChoroplethMap.java
index 318ebe5..4b907db 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ChoroplethMap.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ChoroplethMap.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geosparkviz.extension.visualizationEffect;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.api.java.JavaSparkContext;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/HeatMap.java b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/HeatMap.java
index 99dfa8b..a84e99e 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/HeatMap.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/HeatMap.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geosparkviz.extension.visualizationEffect;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.datasyslab.geospark.spatialRDD.SpatialRDD;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ScatterPlot.java b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ScatterPlot.java
index 796d6f6..2b54a91 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ScatterPlot.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/extension/visualizationEffect/ScatterPlot.java
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geosparkviz.extension.visualizationEffect;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Logger;
 import org.apache.spark.api.java.JavaSparkContext;
 import org.datasyslab.geospark.spatialRDD.SpatialRDD;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/showcase/Example.java b/viz/src/main/java/org/datasyslab/geosparkviz/showcase/Example.java
index 894a09d..35d6a1c 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/showcase/Example.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/showcase/Example.java
@@ -16,8 +16,8 @@
  */
 package org.datasyslab.geosparkviz.showcase;
 
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/utils/Pixel.java b/viz/src/main/java/org/datasyslab/geosparkviz/utils/Pixel.java
index d956bbc..42bedbf 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/utils/Pixel.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/utils/Pixel.java
@@ -16,9 +16,9 @@
  */
 package org.datasyslab.geosparkviz.utils;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.PrecisionModel;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.PrecisionModel;
 
 import java.io.Serializable;
 
diff --git a/viz/src/main/java/org/datasyslab/geosparkviz/utils/RasterizationUtils.java b/viz/src/main/java/org/datasyslab/geosparkviz/utils/RasterizationUtils.java
index 67f96c9..ac47164 100644
--- a/viz/src/main/java/org/datasyslab/geosparkviz/utils/RasterizationUtils.java
+++ b/viz/src/main/java/org/datasyslab/geosparkviz/utils/RasterizationUtils.java
@@ -16,13 +16,13 @@
  */
 package org.datasyslab.geosparkviz.utils;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.Point;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.Point;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Logger;
 import scala.Tuple2;
 
diff --git a/viz/src/main/scala/org/apache/spark/sql/geosparkviz/expressions/Pixelize.scala b/viz/src/main/scala/org/apache/spark/sql/geosparkviz/expressions/Pixelize.scala
index f7384fb..008de17 100644
--- a/viz/src/main/scala/org/apache/spark/sql/geosparkviz/expressions/Pixelize.scala
+++ b/viz/src/main/scala/org/apache/spark/sql/geosparkviz/expressions/Pixelize.scala
@@ -20,7 +20,7 @@ import java.io.ByteArrayOutputStream
 
 import com.esotericsoftware.kryo.Kryo
 import com.esotericsoftware.kryo.io.Output
-import com.vividsolutions.jts.geom._
+import org.locationtech.jts.geom._
 import org.apache.spark.internal.Logging
 import org.apache.spark.sql.catalyst.InternalRow
 import org.apache.spark.sql.catalyst.expressions.codegen.CodegenFallback
diff --git a/viz/src/main/scala/org/datasyslab/geosparkviz/showcase/ScalaExample.scala b/viz/src/main/scala/org/datasyslab/geosparkviz/showcase/ScalaExample.scala
index 18682c1..809e559 100644
--- a/viz/src/main/scala/org/datasyslab/geosparkviz/showcase/ScalaExample.scala
+++ b/viz/src/main/scala/org/datasyslab/geosparkviz/showcase/ScalaExample.scala
@@ -20,7 +20,7 @@ import java.awt.Color
 import java.io.FileInputStream
 import java.util.Properties
 
-import com.vividsolutions.jts.geom.Envelope
+import org.locationtech.jts.geom.Envelope
 import org.apache.log4j.{Level, Logger}
 import org.apache.spark.storage.StorageLevel
 import org.apache.spark.{SparkConf, SparkContext}
diff --git a/viz/src/main/scala/org/datasyslab/geosparkviz/sql/operator/VizPartitioner.scala b/viz/src/main/scala/org/datasyslab/geosparkviz/sql/operator/VizPartitioner.scala
index fbe5894..c8ce521 100644
--- a/viz/src/main/scala/org/datasyslab/geosparkviz/sql/operator/VizPartitioner.scala
+++ b/viz/src/main/scala/org/datasyslab/geosparkviz/sql/operator/VizPartitioner.scala
@@ -16,7 +16,7 @@
  */
 package org.datasyslab.geosparkviz.sql.operator
 
-import com.vividsolutions.jts.geom.{Envelope, Geometry}
+import org.locationtech.jts.geom.{Envelope, Geometry}
 import org.apache.spark.sql.functions._
 import org.apache.spark.sql.{DataFrame, Row}
 import org.datasyslab.geospark.spatialPartitioning.QuadtreePartitioning
diff --git a/viz/src/test/java/org/datasyslab/geosparkviz/ChoroplethmapTest.java b/viz/src/test/java/org/datasyslab/geosparkviz/ChoroplethmapTest.java
index d027d7f..cc16857 100644
--- a/viz/src/test/java/org/datasyslab/geosparkviz/ChoroplethmapTest.java
+++ b/viz/src/test/java/org/datasyslab/geosparkviz/ChoroplethmapTest.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geosparkviz;
 
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.spark.api.java.JavaPairRDD;
 import org.apache.spark.storage.StorageLevel;
 import org.datasyslab.geospark.enums.GridType;
diff --git a/viz/src/test/java/org/datasyslab/geosparkviz/GeoSparkVizTestBase.java b/viz/src/test/java/org/datasyslab/geosparkviz/GeoSparkVizTestBase.java
index 6776ee4..d5d6881 100644
--- a/viz/src/test/java/org/datasyslab/geosparkviz/GeoSparkVizTestBase.java
+++ b/viz/src/test/java/org/datasyslab/geosparkviz/GeoSparkVizTestBase.java
@@ -25,7 +25,7 @@
  */
 package org.datasyslab.geosparkviz;
 
-import com.vividsolutions.jts.geom.Envelope;
+import org.locationtech.jts.geom.Envelope;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripPointMapper.java b/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripPointMapper.java
index c173fd2..7b72766 100644
--- a/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripPointMapper.java
+++ b/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripPointMapper.java
@@ -25,11 +25,11 @@
  */
 package org.datasyslab.geosparkviz;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.Point;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.Point;
 import org.apache.spark.api.java.function.FlatMapFunction;
 
 import java.util.ArrayList;
diff --git a/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripTest.java b/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripTest.java
index 1420ba8..aa4f587 100644
--- a/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripTest.java
+++ b/viz/src/test/java/org/datasyslab/geosparkviz/NYCTripTest.java
@@ -25,15 +25,15 @@
  */
 package org.datasyslab.geosparkviz;
 
-import com.vividsolutions.jts.geom.Coordinate;
-import com.vividsolutions.jts.geom.Envelope;
-import com.vividsolutions.jts.geom.Geometry;
-import com.vividsolutions.jts.geom.GeometryFactory;
-import com.vividsolutions.jts.geom.LineString;
-import com.vividsolutions.jts.geom.LinearRing;
-import com.vividsolutions.jts.geom.MultiLineString;
-import com.vividsolutions.jts.geom.MultiPolygon;
-import com.vividsolutions.jts.geom.Polygon;
+import org.locationtech.jts.geom.Coordinate;
+import org.locationtech.jts.geom.Envelope;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.geom.GeometryFactory;
+import org.locationtech.jts.geom.LineString;
+import org.locationtech.jts.geom.LinearRing;
+import org.locationtech.jts.geom.MultiLineString;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Polygon;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.apache.spark.SparkConf;
diff --git a/viz/src/test/scala/org/datasyslab/geosparkviz/rdd/scalaTest.scala b/viz/src/test/scala/org/datasyslab/geosparkviz/rdd/scalaTest.scala
index 76cc400..3bea4a1 100644
--- a/viz/src/test/scala/org/datasyslab/geosparkviz/rdd/scalaTest.scala
+++ b/viz/src/test/scala/org/datasyslab/geosparkviz/rdd/scalaTest.scala
@@ -30,7 +30,7 @@ import java.awt.Color
 import java.io.FileInputStream
 import java.util.Properties
 
-import com.vividsolutions.jts.geom.Envelope
+import org.locationtech.jts.geom.Envelope
 import org.apache.log4j.{Level, Logger}
 import org.apache.spark.serializer.KryoSerializer
 import org.apache.spark.storage.StorageLevel
diff --git a/viz/src/test/scala/org/datasyslab/geosparkviz/sql/optVizOperatorTest.scala b/viz/src/test/scala/org/datasyslab/geosparkviz/sql/optVizOperatorTest.scala
index 9b71916..9f86cd5 100644
--- a/viz/src/test/scala/org/datasyslab/geosparkviz/sql/optVizOperatorTest.scala
+++ b/viz/src/test/scala/org/datasyslab/geosparkviz/sql/optVizOperatorTest.scala
@@ -1,6 +1,6 @@
 package org.datasyslab.geosparkviz.sql
 
-import com.vividsolutions.jts.geom.Envelope
+import org.locationtech.jts.geom.Envelope
 import org.apache.spark.sql.functions._
 import org.datasyslab.geosparkviz.sql.operator.{AggregateWithinPartitons, VizPartitioner}
 import org.datasyslab.geosparkviz.sql.utils.{Conf, LineageDecoder}
@@ -52,7 +52,7 @@ class optVizOperatorTest extends TestBaseScala {
           |SELECT pixel, ${Conf.PrimaryPID}, ${Conf.SecondaryPID}, ST_Colorize(weight, (SELECT max(weight) FROM pixelaggregates))
           |FROM pixelaggregates
         """.stripMargin)
-      spark.table("colors").show()
+      spark.table("colors").show(1)
     }
 
     it("Passed full pipeline - aggregate:avg - color:uniform") {
@@ -98,7 +98,7 @@ class optVizOperatorTest extends TestBaseScala {
            |SELECT pixel, ${Conf.PrimaryPID}, ${Conf.SecondaryPID}, ST_Colorize(weight, 0, 'red')
            |FROM pixelaggregates
         """.stripMargin)
-      spark.table("colors").show()
+      spark.table("colors").show(1)
     }
 
     it("Passed lineage decoder"){
diff --git a/viz/src/test/scala/org/datasyslab/geosparkviz/sql/standardVizOperatorTest.scala b/viz/src/test/scala/org/datasyslab/geosparkviz/sql/standardVizOperatorTest.scala
index 4614750..6da5481 100644
--- a/viz/src/test/scala/org/datasyslab/geosparkviz/sql/standardVizOperatorTest.scala
+++ b/viz/src/test/scala/org/datasyslab/geosparkviz/sql/standardVizOperatorTest.scala
@@ -51,7 +51,7 @@ class standardVizOperatorTest extends TestBaseScala {
           |SELECT ST_EncodeImage(image)
           |FROM images
         """.stripMargin)
-      spark.table("imagestring").show()
+      spark.table("imagestring").show(1)
     }
 
     it("Generate a single image using a fat query") {
@@ -94,7 +94,7 @@ class standardVizOperatorTest extends TestBaseScala {
           |SELECT ST_EncodeImage(ST_Render(pixel, ST_Colorize(weight, (SELECT max(weight) FROM pixelaggregates)))) AS image, (SELECT ST_AsText(bound) FROM boundtable) AS boundary
           |FROM pixelaggregates
         """.stripMargin)
-      spark.table("images").show()
+      spark.table("images").show(1)
     }
 
     it("Passed the pipeline on points") {
@@ -127,7 +127,7 @@ class standardVizOperatorTest extends TestBaseScala {
           |GROUP BY pixel
         """.stripMargin)
       val pixelaggregates = spark.table("pixelaggregates")
-      pixelaggregates.show()
+      pixelaggregates.show(1)
     }
 
     it("Passed the pipeline on polygons") {
@@ -218,7 +218,7 @@ class standardVizOperatorTest extends TestBaseScala {
           |FROM pixelaggregates
           |GROUP BY pid
         """.stripMargin).explain()
-      spark.table("images").show()
+      spark.table("images").show(1)
     }
   }
 }