Databricks Azure 中从纬度/经度到 MTM 的几何转换

问题描述

实际上,我在 Azure DataBricks 中有一个管道并正在加载 csv 和 txt 文件。此文件包含经纬度坐标。

使用此坐标和 Geomesa 库,管道使用 st_makeLine 和 st_makePoint 创建点几何图形和线几何图形。一切都很好。

但是,投影不好。我需要将 Lat/Long 投影转换为 MTM nad 83 zone 8。我尝试使用 ST_TRANSFORM (Geomesa) 但那不起作用。

有人可以帮助我。如果需要,可以使用 Geomesa 以外的其他工具。

谢谢大家。

解决方法

@Emilio Lahr-Vivaz

我试过了:

块引用

%scala

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

DF_geo.createOrReplaceTempView("temp_final")

块引用

%scala

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")

,

要通过 Spark SQL 访问 st_transform,您需要调用 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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...