Как сделать так, чтобы строка читалась как многоугольник в Scala (на Databricks) - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть набор данных с 2 столбцами: один столбец содержит названия местоположений, а другой столбец - полигоны с координатами, которые обозначают соответствующие местоположения.Этот набор данных взят из CSV-файла, который я загрузил в Databricks с помощью Scala.Используя это, мне нужно поместить другой набор данных, содержащий точки широты / долготы внутри полигонов, указанных для каждого местоположения (вероятно, с использованием библиотеки 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...|
+-------------+--------------------+

, поэтому мне просто нужно преобразовать второй столбец из строки в фактический многоугольник.

Мне нужен второй столбец (контур)фактический многоугольник (не строка), чтобы я мог размещать точки внутри многоугольников.

1 Ответ

1 голос
/ 15 апреля 2019

Вы уже пробовали библиотеку magellan.Polygon ?, это пример преобразования Polygon в 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@...|
+--------------------+
...