【问题标题】:Get Nearest Point with slick用光滑的方法获取最近点
【发布时间】:2017-04-12 11:20:26
【问题描述】:

我有以下案例类:

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

在 postgres 我有一个表 SubBlock contient id:整数, 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())))

我的请求返回了正确的结果,但是在我得到 « 线程“main” java.lang.NullPointerException 中的异常« 因为 sub_block_geom 在我的数据库中为空,所以我认为解决方案是更改隐式 val getSubBlock 或用过滤器、sortedBy 编写查询……我不知道该怎么做

【问题讨论】:

  • 嗯...问题是 t=您的问题现在几乎无法回答。这里需要的信息是 - 你的 SubBlock 类是什么?,你的确切错误堆栈跟踪是什么?
  • 解决办法就是在你的getSubBlock中适当处理null的可能性。

标签: scala postgis slick


【解决方案1】:

嗯...我不太确定您的问题,因为缺少许多必需的详细信息。但据我所知,您只需要在您的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)
}

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多