2017-04-12 65 views
0

最近點我有以下的情況下類:獲取用油滑

case class Block(
       
id: Option[Int] = None,
       
blockId: Int,
       
name: String,
       
location: Option[Point] = None,
       
geometry: Option[Geometry] = None,
           
) 

Postgres裏我有一個表的子塊contient ID:INT, BLOCK_ID:詮釋, 名稱:字符串, geom_location:地理, 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在我的數據庫中爲空,所以我認爲解決方案是改變隱式val getSubBlock或用篩選器編寫查詢,sortedBy,...我不知道該怎麼做

+0

那麼......事情是t =你的問題幾乎不可回答,因爲它是現在。這裏需要的信息位是 - 你的SubBlock類是什麼?你確切的錯誤堆棧跟蹤是什麼? –

+0

解決的辦法就是恰當地處理'getSubBlock'中'null'的可能性。 –

回答

0

嗯......我不太清楚你的問題,因爲缺少很多必需的細節。但從我所看到的情況來看,您只需要在getSubBlock中妥善處理null的可能性。

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