如何在 Scala 中将字符串读取为多边形(在 Databricks 上)



我有一个包含 2 列的数据集:一列是位置名称,另一列是多边形,其坐标勾勒出相应位置。 这个数据集来自我使用 Scala 加载到 Databricks 中的 csv 文件。 使用它,我需要将另一个包含经度/经度点的数据集放置在为每个位置指定的多边形内(可能使用 Magellan 库(,但是当第二列需要以某种方式转换为多边形以使麦哲伦操作工作时,文件中的两列都被读取为字符串。

我已经尝试过转换为多边形/形状,但到目前为止没有任何效果。 数据集的格式如下:

+-------------+--------------------+
|     location|             outline|
+-------------+--------------------+
|   Location A|POLYGON ((-111.11...|
|   Location B|POLYGON ((-99.111...|
|   Location C|POLYGON ((-99.111...|
|   Location D|POLYGON ((-99.111...|
|   Location E|POLYGON ((-99.111...|
|   Location F|POLYGON ((-111.11...|
|   Location G|POLYGON ((-99.111...|
|   Location H|POLYGON ((-99.111...|
|   Location I|POLYGON ((-111.11...|
|   Location J|POLYGON ((-111.11...|
|   Location K|POLYGON ((-99.111...|
|   Location L|POLYGON ((-99.111...|
|   Location M|POLYGON ((-99.111...|
|   Location N|POLYGON ((-99.111...|
|   Location O|POLYGON ((-111.11...|
|   Location P|POLYGON ((-99.111...|
|   Location Q|POLYGON ((-99.111...|
|   Location R|POLYGON ((-99.111...|
|   Location S|POLYGON ((-111.11...|
+-------------+--------------------+

所以我只需要将第二列从字符串转换为实际多边形。

我需要第二列(轮廓(是实际的多边形(而不是字符串(,以便我可以在多边形内放置点。

你已经尝试过麦哲伦图书馆了吗?多边形?,这是将多边形转换为 DF 的示例:

import magellan.Polygon
case class PolygonExample(polygon: Polygon)
val ring = Array(Point(1.0, 1.0), Point(1.0, -1.0),
      Point(-1.0, -1.0), Point(-1.0, 1.0), Point(1.0, 1.0))
val polygon = Polygon(Array(0), ring)
val polygons = sc.parallelize(Seq(
      PolygonExample(Polygon(Array(0), ring))
    )).toDF()

结果:

polygons.show()
+--------------------+
|             polygon|
+--------------------+
|magellan.Polygon@...|
+--------------------+

最新更新