Ich habe folgende Fallklasse:des nächstgelegenen Punkt mit Slick
case class Block(
id: Option[Int] = None,
blockId: Int,
name: String,
location: Option[Point] = None,
geometry: Option[Geometry] = None,
)
In Postgres habe ich eine Tabelle Subblock contient id: int, block_id: Int, name: String, geom_location: Geographie, sub_block_geom: Geographie
Und ich definiere eine Funktion ein Subblock nächste von einem bestimmten Punkt zurückzukehren
override def getNearestSubBlock(point: Point): Future[SubBlock] = {
val query = sql"""SELECT sub_block_id,block_id,name,ST_AsText(geom_location),sub_block_geom from now.sub_block order by ST_Distance(geom_location, ST_MakePoint(${point.getX()}, ${point.getY()})::geography) limit 1""".as[SubBlock].head
db.run(query)
}
implicit val getSubBlock = GetResult(r => SubBlock(r.nextIntOption(), r.nextInt(), r.nextString(), Option(Location.location2Point(Location.fromWKT(r.nextString()))), Option(new WKTReader().read(r.nextString())))
Und meine Anfrage gibt das richtige Ergebnis zurück, aber nachdem ich "Ausnahme im Thread" main "java.lang.NullPointerException" bekam, weil der sub_block_geom in meiner Datenbank null ist, so denke ich, dass die Lösung implizit val getSubBlock oder ändern soll Abfrage schreiben mit Filter, sortedBy, ... und ich weiß nicht, wie man das macht
Nun ... das Ding ist t = Ihre Frage ist so ziemlich unantastbar, wie es jetzt ist. Die hier benötigten Informationen sind - was ist Ihre 'SubBlock' Klasse ?, Was ist Ihre genaue Fehler Stack Trace? –
Die Lösung besteht nur darin, die Möglichkeit von 'null' in Ihrem' getSubBlock' angemessen zu behandeln. –