title: No Encoder found for org.locationtech.jts.geom.Point
body: <p>While using Geomesa and Scala, I have been attempting to encode 2 columns in a Spark Dataframe using the below snippets, but I am continually receiving an issue where it appears that Scala cannot serialize the returned objects into a Dataframe.  When using Postgres and PostGIS, life is easy - is this an easy issue, or is there a better library which can handle Geospatial querying coming from a Spark Dataframe that contains latitute and longitude in Double format?</p>
  
  <p>The versions that I am using in my SBT are:</p>
  
  <ul>
  <li>spark:    2.3.0</li>
  <li>scala:    2.11.12</li>
  <li>geomesa:  2.2.1</li>
  <li>jst-*:    1.17.0-SNAPSHOT</li>
  </ul>
  
  <blockquote>
    <p>Exception in thread "main" java.lang.UnsupportedOperationException: No Encoder found for org.locationtech.jts.geom.Point</p>
  </blockquote>
  
  <pre><code>import org.apache.spark.sql.SparkSession
  import org.locationtech.jts.geom.{Coordinate, GeometryFactory}
  import org.apache.spark.sql.functions.col
  
  import org.apache.spark.sql.types._
  import org.locationtech.geomesa.spark.jts._
  
  
  object GetRandomData {
  
  
    def main(sysArgs: Array[String]) {
  
      @transient val spark: SparkSession = {
        SparkSession
          .builder()
          .config("spark.ui.enabled", "false")
          .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
          .config("spark.kryoserializer.buffer.mb","24")
          .appName("GetRandomData")
          .master("local[*]")
          .getOrCreate()
      }
      val sc = spark.sparkContext
      sc.setLogLevel("ERROR")
      import spark.sqlContext.implicits._
  
      var coordinates = sc.parallelize(
        List(
          (35.40466, -80.905458),
          (35.344079, -80.872267),
          (35.139606, -80.840845),
          (35.537786, -80.780051),
          (35.525361, -83.031932),
          (34.928323, -80.766732),
          (35.533865, -82.72344),
          (35.50997,  -80.588572),
          (35.286251, -83.150514),
          (35.558519, -81.067069),
          (35.569311, -80.916993),
          (35.835867, -81.067904),
          (35.221695, -82.662141)
        )
      ).
      toDS().
      toDF("geo_lat", "geo_lng")
  
      coordinates = coordinates.select(coordinates.columns.map(c =&gt; col(c).cast(DoubleType)) : _*)
      coordinates.show()
      val testing = coordinates.map(r =&gt; new GeometryFactory().createPoint(new Coordinate(3.4, 5.6)))
      val coordinatesPointDf = coordinates.withColumn("point", st_makePoint(col("geo_lat"), col("geo_lng")))
  
    }
  }
  </code></pre>
  
  <p>The exception is:</p>
  
  <pre><code>    Exception in thread "main" java.lang.UnsupportedOperationException: No Encoder found for org.locationtech.jts.geom.Point
  - root class: "org.locationtech.jts.geom.Point"
    at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$org$apache$spark$sql$catalyst$ScalaReflection$$serializerFor$1.apply(ScalaReflection.scala:643)
    at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$org$apache$spark$sql$catalyst$ScalaReflection$$serializerFor$1.apply(ScalaReflection.scala:445)
    at scala.reflect.internal.tpe.TypeConstraints$UndoLog.undo(TypeConstraints.scala:56)
    at org.apache.spark.sql.catalyst.ScalaReflection$class.cleanUpReflectionObjects(ScalaReflection.scala:824)
    at org.apache.spark.sql.catalyst.ScalaReflection$.cleanUpReflectionObjects(ScalaReflection.scala:39)
    at org.apache.spark.sql.catalyst.ScalaReflection$.org$apache$spark$sql$catalyst$ScalaReflection$$serializerFor(ScalaReflection.scala:445)
    at org.apache.spark.sql.catalyst.ScalaReflection$.serializerFor(ScalaReflection.scala:434)
    at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$.apply(ExpressionEncoder.scala:71)
    at org.locationtech.geomesa.spark.jts.encoders.SpatialEncoders$class.jtsPointEncoder(SpatialEncoders.scala:21)
    at org.locationtech.geomesa.spark.jts.package$.jtsPointEncoder(package.scala:17)
    at GetRandomData$.main(Main.scala:50)
    at GetRandomData.main(Main.scala)
  </code></pre>