GeoTrellis/Scala: найдите недостающие неявные доказательства для анализа Json
Какой импорт необходим, чтобы найти неявные доказательства для компиляции вызова GeoJson.parse из GeoTrellis?
geotrellis.vector.io.json.Geometry использует spray.json для анализа и должен иметь возможность находить экземпляр JsonReader или JsonFormats, настроенный на классы WithCrs и Geometry.
Доказательства определены в FeatureFormats; но как фрагмент кода ниже может использовать его?
Следующее не разрешает доказательства:
- Импортируйте все в
geotrellis.vector.io.json.*
пакет - Импорт имплицитов специально
import geotrellis.vector.io.json.Implicits
- Импортируйте FeatureFormats напрямую
import geotrellis.vector.io.json.FeatureFormats
- Обеспечить правильный импорт, особенно без импорта
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://www.scala-lang.org/docu/files/packageobjects/packageobjects.html