GeoTrellis/Scala: найдите недостающие неявные доказательства для анализа Json

Какой импорт необходим, чтобы найти неявные доказательства для компиляции вызова GeoJson.parse из GeoTrellis?

geotrellis.vector.io.json.Geometry использует spray.json для анализа и должен иметь возможность находить экземпляр JsonReader или JsonFormats, настроенный на классы WithCrs и Geometry.

Доказательства определены в FeatureFormats; но как фрагмент кода ниже может использовать его?

Следующее не разрешает доказательства:

  1. Импортируйте все в geotrellis.vector.io.json.* пакет
  2. Импорт имплицитов специально import geotrellis.vector.io.json.Implicits
  3. Импортируйте FeatureFormats напрямую import geotrellis.vector.io.json.FeatureFormats
  4. Обеспечить правильный импорт, особенно без импорта com.vividsolutions.jts.Geometry который бы маскировал целевой объект

Вот код, о котором идет речь

import geotrellis.vector.Geometry
import geotrellis.proj4.CRS
import geotrellis.vector.io.json.*
import geotrellis.vector.io.json.{GeoJson, WithCrs}
import org.json4s.{DefaultFormats, Formats}
import scala.util.{Failure, Success, Try}
val exampleQueryJson =
  """
|{
|   "type": "Polygon",
|   "crs": {
|       "type": "name",
|       "properties": {
|           "name": "EPSG:4326"
|       }
|   },
|   "coordinates": [
|       [
|           [....]
|       ]
|   ]
|}
  """.stripMargin

class GeometryReader extends FeatureFormats {
  implicit val jsonFormats: Formats = DefaultFormats
}

object GeometryReader {

  def parseGeometry(request: String): Geometry = {

    GeoJson.parse[Geometry](request)
  }
}

val g = GeometryReader.parseGeometry(exampleQueryJson)

Ошибка компиляции показывает невозможность найти правильное доказательство с учетом того, что в настоящее время доступно

[error] /path/redacted/GeometryReader.scala:19: Cannot find JsonReader or JsonFormat type class for geotrellis.vector.io.json.WithCrs[geotrellis.vector.Geometry]
[error]       val geometryWithCrs: WithCrs[Geometry] = GeoJson.parse[WithCrs[Geometry]](request)
[error]                                                                                ^
[error] /path/redacted/GeometryReader.scala:25: Cannot find JsonReader or JsonFormat type class for geotrellis.vector.Geometry
[error]       Try(GeoJson.parse[Geometry](request)) match {
[error]                                  ^
[error] two errors found
[error] (compile:compileIncremental) Compilation failed

1 ответ

Краткий ответ: Добавить

import geotrellis.vector.io._

Создатели этой библиотеки использовали объекты пакета для публикации этих последствий. Объект пакета (исходный код ниже) расширяет g.io.json.Implicits, и это приводит их в область видимости.

https://github.com/locationtech/geotrellis/blob/master/vector/src/main/scala/geotrellis/vector/io/package.scala

Подробнее об объектах упаковки:

https://www.scala-lang.org/docu/files/packageobjects/packageobjects.html

Другие вопросы по тегам