Преобразование геометрии из широты и долготы в MTM в Databricks Azure

на самом деле у меня есть конвейер в Azure DataBricks, и я загружаю файлы csv и txt. Эти файлы содержат координаты по широте и долготе.

С помощью этих координат и библиотеки Geomesa конвейер создает геометрию точек и геометрию линий с помощью st_makeLine и st_makePoint. Все хорошо.

Но проекция не очень. Мне нужно преобразовать проекцию широты/долготы в MTM над 83 зоной 8. Я пытаюсь использовать ST_TRANSFORM (Geomesa), но это не работает.

Кто-нибудь может мне помочь. Другие инструменты, кроме Geomesa, если необходимо.

Спасибо всем.


person AGagnon    schedule 17.02.2021    source источник
comment
Не могли бы вы уточнить, что не работает с st_transform? Благодарность,   -  person Emilio Lahr-Vivaz    schedule 17.02.2021
comment
@Emilio Lahr-Vivaz: В Geomesa do., где написано «Geometry st_transform (Geometry a, String fromCRS, String toCRS)»   -  person AGagnon    schedule 18.02.2021
comment
Вы получаете какую-либо ошибку? Или геометрия не в том CRS? Другими словами, что именно происходит не так?   -  person Emilio Lahr-Vivaz    schedule 19.02.2021
comment
Я пытаюсь написать crs с кавычками и без кавычек. Та же ошибка: команда-799411979510920:2: ошибка: не найдено: значение st_transform val DF_geo2 = df_geo1.withColumn(геометрия, st_transform(st_makePoint(col(shape_pt_lon), col(shape_pt_lat)), 4326, 31288))   -  person AGagnon    schedule 22.02.2021
comment
Может быть, конкретная библиотека для импорта?   -  person AGagnon    schedule 22.02.2021
comment
Фактически: %scala import org.locationtech.jts.geom._ import org.locationtech.geomesa.spark.jts._ import org.apache.spark.sql.functions._ spark.withJTS   -  person AGagnon    schedule 22.02.2021


Ответы (2)


@Эмилио Лар-Виваз

Я пробовал это:

Цитата

%скала

val DF_geo = df_b.withColumn(geometryP, st_makePoint(col(shape_pt_lon), col(shape_pt_lat)))

DF_geo.createOrReplaceTempView(temp_final)

Цитата

%скала

val df_geo2 = spark.sql( ВЫБЕРИТЕ shape_id,

st_makeline(max(line)) as geometry,   

cast(st_length(st_makeline(max(line))) as double) as length,

st_transform(t_makeline(max(line)), '4326', '32188') as proj_geometry

ИЗ (

SELECT  shape_id, 

        collect_list(last(geometryP)) OVER (PARTITION BY shape_id ORDER BY shape_pt_sequence) line,

        shape_pt_sequence

FROM temp_final

GROUP BY shape_id, shape_pt_sequence

)

СГРУППИРОВАТЬ ПО shape_id

)

df_geo2.show()

df_geo2.createOrReplaceTempView(temp_linestring)

person AGagnon    schedule 18.02.2021

Чтобы получить доступ к st_transform через Spark SQL, вам нужно вызвать org.apache.spark.sql.SQLTypes.init(context: SQLContext). Это будет сделано автоматически при использовании отношения GeoMesa (т. е. при использовании SpatialRDDProvider), в противном случае его необходимо вызывать вручную. Затем вы можете сделать что-то вроде:

sparkSession.sql("select st_transform(geom,'EPSG:4326','EPSG:32188') from data where st_intersects(geom, st_makeBbox(-179, -79, 179, 79))").show
person Emilio Lahr-Vivaz    schedule 22.02.2021