
geotrellis.spark.io.json.KeyFormats.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of geotrellis-spark_2.10 Show documentation
Show all versions of geotrellis-spark_2.10 Show documentation
GeoTrellis is an open source geographic data processing engine for high performance applications.
The newest version!
package geotrellis.spark.io.json
import geotrellis.spark._
import spray.json._
import spray.json.DefaultJsonProtocol._
object KeyFormats extends KeyFormats
trait KeyFormats {
implicit object SpatialKeyFormat extends RootJsonFormat[SpatialKey] {
def write(key: SpatialKey) =
JsObject(
"col" -> JsNumber(key.col),
"row" -> JsNumber(key.row)
)
def read(value: JsValue): SpatialKey =
value.asJsObject.getFields("col", "row") match {
case Seq(JsNumber(col), JsNumber(row)) =>
SpatialKey(col.toInt, row.toInt)
case _ =>
throw new DeserializationException("SpatialKey expected")
}
}
implicit object SpaceTimeKeyFormat extends RootJsonFormat[SpaceTimeKey] {
def write(key: SpaceTimeKey) =
JsObject(
"col" -> JsNumber(key.col),
"row" -> JsNumber(key.row),
"instant" -> JsNumber(key.instant)
)
def read(value: JsValue): SpaceTimeKey =
value.asJsObject.getFields("col", "row", "instant") match {
case Seq(JsNumber(col), JsNumber(row), JsNumber(time)) =>
SpaceTimeKey(col.toInt, row.toInt, time.toLong)
case _ =>
throw new DeserializationException("SpatialKey expected")
}
}
implicit object TemporalKeyFormat extends RootJsonFormat[TemporalKey] {
def write(key: TemporalKey) =
JsObject(
"instant" -> JsNumber(key.instant)
)
def read(value: JsValue): TemporalKey =
value.asJsObject.getFields("instant") match {
case Seq(JsNumber(time)) =>
TemporalKey(time.toLong)
case _ =>
throw new DeserializationException("TemporalKey expected")
}
}
implicit def keyBoundsFormat[K: JsonFormat]: RootJsonFormat[KeyBounds[K]] =
new RootJsonFormat[KeyBounds[K]] {
def write(keyBounds: KeyBounds[K]) =
JsObject(
"minKey" -> keyBounds.minKey.toJson,
"maxKey" -> keyBounds.maxKey.toJson
)
def read(value: JsValue): KeyBounds[K] =
value.asJsObject.getFields("minKey", "maxKey") match {
case Seq(minKey, maxKey) =>
KeyBounds(minKey.convertTo[K], maxKey.convertTo[K])
case _ =>
throw new DeserializationException("${classOf[KeyBounds[K]] expected")
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy