2017-04-12 11 views
0

でゲット最寄りのポイントは、私は、次のケースクラスを持っています sub_block_geom:地理滑らかな

そして私は、指定された点の最も近いサブブロックを返すように関数を定義

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()))) 

私の要求は正しい結果を返しますが、サブスレッドの "例外"(メインスレッド "java.lang.NullPointerException")が発生した後、データベース内でsub_block_geomがnullであるため、暗黙のval getSubBlockまたはfilter、sortedBy、...とクエリを書くにはどうすればいいのかわかりません。

+0

さて、あなたの質問は、今のところほとんど答えることができません。ここで必要な情報は、あなたの 'SubBlock'クラスは何ですか?正確なエラースタックトレースは何ですか? –

+0

あなたの 'getSubBlock'で' null'の可能性を適切に処理するだけです。 –

答えて

0

まあ...必要な情報がたくさんあるので、あなたの問題についてはあまりよく分かりません。しかし、私が見ることから、の可能性を適切に処理するだけでgetSubBlockにする必要があります。

implicit val getSubBlock = GetResult(r => { 
    val id = r.nextIntOption() 
    val blockId = r.nextInt() 
    val location: Option[Point] = r.nextStringOption().map(s => Location.location2Point(Location.fromWKT(s))) 
    val geometry: Option[Geometry] = r.nextStringOption().map(s => new WKTReader().read(s))) 

    SubBlock(id, blockId, location, geometry) 
} 
+0

ありがとう、あなたの解決策は私の問題を解決する – Salma