Как вы проецируете геометрию из одной EPSG в другую с помощью Spark/Geomesa?

Я перевожу некоторый код Postgis в Geomesa, и у меня есть такой код Postgis:

select ST_Transform(ST_SetSRID(ST_Point(longitude, latitude), 4326), 27700)

который преобразует точечную геометрию, например, из 4326 в 27700.

В документации Geomesa-Spark-sql https://www.geomesa.org/documentation/user/spark/sparksql_functions.html Я вижу ST_Point, но не могу найти эквивалентную ST_Transform функцию. Есть идеи?


person Randomize    schedule 24.06.2020    source источник


Ответы (3)


Я использовал библиотеку sedona для геообработки, и у нее есть функция st_transform, которую я использовал, и она работает нормально, поэтому, если хотите, вы можете ее использовать. Ниже приведена ссылка на официальную документацию — https://sedona.apache.org/api/sql/GeoSparkSQL-Function/#st_transform

Даже Geomesa теперь поддерживает эту функцию — https://www.geomesa.org/documentation/3.1.2/user/spark/sparksql_functions.html#st-transform

person yogesh garud    schedule 30.04.2021

Для GeoMesa 1.x, 2.x и предстоящего выпуска 3.0 в настоящее время нет ST_Transform. Можно создать свою собственную UDF, используя GeoTools (или другую библиотеку) для преобразования.

Правда, это потребует некоторой работы.

person GeoMesaJim    schedule 24.06.2020

Недавно я столкнулся с той же проблемой в Azure Databricks. Я смог сделать это вручную, установив библиотеку JAR из здесь.

А затем запустите следующий код Scala.


%scala
    
import org.locationtech.jts.geom._
import org.locationtech.geomesa.spark.jts._
import org.locationtech.geomesa.spark.geotools._
    
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
import spark.implicits._
    
spark.withJTS

data_points = (
  data_points
  .withColumn("geom", st_makePoint(col("LONGITUDE"), col("LATITUDE")))
  .withColumn("geom_5347", st_transform(col("geom"), lit("EPSG:4326"), lit("EPSG:5347")))
)

display(data_points)

Удачи.

person andrés ab    schedule 03.03.2021