使用 slick 获取最近点
Get Nearest Point with slick
我有以下案例class:
case class Block(
id: Option[Int] = None,
blockId: Int,
name: String,
location: Option[Point] = None,
geometry: Option[Geometry] = None,
)
在 postgres 中我有一个 table SubBlock contient
编号:整数,
block_id: 整数,
名称:字符串,
geom_location: 地理,
sub_block_geom:地理
然后我定义了一个函数来return一个离指定点最近的子块
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())))
我的请求 return 得到了正确的结果,但是在我得到 « 线程中的异常 "main" java.lang.NullPointerException « 因为 sub_block_geom 在我的数据库中为空,所以我认为解决方案是更改隐式 val getSubBlock 或使用过滤器编写查询, sortedBy ,......我不知道该怎么做
嗯...我不太确定你的问题,因为缺少很多必需的细节。但是据我所知,您只需要正确处理 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)
}
我有以下案例class:
case class Block(
id: Option[Int] = None,
blockId: Int,
name: String,
location: Option[Point] = None,
geometry: Option[Geometry] = None,
)
在 postgres 中我有一个 table SubBlock contient 编号:整数, block_id: 整数, 名称:字符串, geom_location: 地理, sub_block_geom:地理
然后我定义了一个函数来return一个离指定点最近的子块
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())))
我的请求 return 得到了正确的结果,但是在我得到 « 线程中的异常 "main" java.lang.NullPointerException « 因为 sub_block_geom 在我的数据库中为空,所以我认为解决方案是更改隐式 val getSubBlock 或使用过滤器编写查询, sortedBy ,......我不知道该怎么做
嗯...我不太确定你的问题,因为缺少很多必需的细节。但是据我所知,您只需要正确处理 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)
}