1
- package com .github .slickpg
1
+ package com .github .tminglei . slickpg
2
2
3
3
import com .vividsolutions .jts .io ._
4
4
import com .vividsolutions .jts .geom ._
5
5
import java .sql .SQLException
6
6
import scala .slick .driver .{BasicProfile , PostgresDriver }
7
- import scala .slick .lifted .{ BaseTypeMapper , TypeMapperDelegate , ExtensionMethods , Column }
7
+ import scala .slick .lifted ._
8
8
import scala .slick .ast .Library .{SqlFunction , SqlOperator }
9
9
import scala .slick .ast .{LiteralNode , Node }
10
10
import scala .slick .session .{PositionedResult , PositionedParameters }
@@ -33,6 +33,41 @@ trait PostGISSupport { driver: PostgresDriver =>
33
33
}
34
34
}
35
35
36
+ trait PostGISAssistants extends PostGISImplicits {
37
+ /** Geometry Constructors */
38
+ def geomFromText [P , R ](wkt : Column [P ], srid : Option [Int ] = None )(
39
+ implicit om : OptionMapperDSL .arg[String , P ]# to[Geometry , R ]) = srid match {
40
+ case Some (srid) => om(PostGISLibrary .GeomFromText .column[Geometry ](Node (wkt), LiteralNode (srid)))
41
+ case None => om(PostGISLibrary .GeomFromText .column[Geometry ](Node (wkt)))
42
+ }
43
+ def geomFromWKB [P , R ](wkb : Column [P ], srid : Option [Int ] = None )(
44
+ implicit om : OptionMapperDSL .arg[Array [Byte ], P ]# to[Geometry , R ]) = srid match {
45
+ case Some (srid) => om(PostGISLibrary .GeomFromWKB .column[Geometry ](Node (wkb), LiteralNode (srid)))
46
+ case None => om(PostGISLibrary .GeomFromWKB .column[Geometry ](Node (wkb)))
47
+ }
48
+ def geomFromEWKT [P , R ](ewkt : Column [P ])(
49
+ implicit om : OptionMapperDSL .arg[String , P ]# to[Geometry , R ]) = {
50
+ om(PostGISLibrary .GeomFromEWKT .column[Geometry ](Node (ewkt)))
51
+ }
52
+ def geomFromEWKB [P , R ](ewkb : Column [P ])(
53
+ implicit om : OptionMapperDSL .arg[Array [Byte ], P ]# to[Geometry , R ]) = {
54
+ om(PostGISLibrary .GeomFromEWKB .column[Geometry ](Node (ewkb)))
55
+ }
56
+ def geomFromGML [P , R ](gml : Column [P ], srid : Option [Int ] = None )(
57
+ implicit om : OptionMapperDSL .arg[String , P ]# to[Geometry , R ]) = srid match {
58
+ case Some (srid) => om(PostGISLibrary .GeomFromGML .column[Geometry ](Node (gml), LiteralNode (srid)))
59
+ case None => om(PostGISLibrary .GeomFromGML .column[Geometry ](Node (gml)))
60
+ }
61
+ def geomFromKML [P , R ](kml : Column [P ])(
62
+ implicit om : OptionMapperDSL .arg[String , P ]# to[Geometry , R ]) = {
63
+ om(PostGISLibrary .GeomFromKML .column[Geometry ](Node (kml)))
64
+ }
65
+ def geomFromGeoJSON [P , R ](json : Column [P ])(
66
+ implicit om : OptionMapperDSL .arg[String , P ]# to[Geometry , R ]) = {
67
+ om(PostGISLibrary .GeomFromGeoJSON .column[Geometry ](Node (json)))
68
+ }
69
+ }
70
+
36
71
// ////////////////////////////////////////////////////////////////////////////////
37
72
38
73
object PostGISLibrary {
@@ -41,7 +76,7 @@ trait PostGISSupport { driver: PostgresDriver =>
41
76
val BoxIntersects3D = new SqlOperator (" &&&" )
42
77
val BoxContains = new SqlOperator (" ~" )
43
78
val BoxContainedBy = new SqlOperator (" @" )
44
- val BoxEquals = new SqlOperator (" =" )
79
+ // val BoxEquals = new SqlOperator("=") // it's not necessary
45
80
val PointDistance = new SqlOperator (" <->" )
46
81
val BoxDistance = new SqlOperator (" <#>" )
47
82
@@ -54,6 +89,15 @@ trait PostGISSupport { driver: PostgresDriver =>
54
89
val BoxLooseAbove = new SqlOperator (" |&>" )
55
90
val BoxStrictAbove = new SqlOperator (" |>>" )
56
91
92
+ /** Geometry Constructors */
93
+ val GeomFromText = new SqlFunction (" ST_GeomFromText" )
94
+ val GeomFromWKB = new SqlFunction (" ST_GeomFromWKB" )
95
+ val GeomFromEWKT = new SqlFunction (" ST_GeomFromEWKT" )
96
+ val GeomFromEWKB = new SqlFunction (" ST_GeomFromEWKB" )
97
+ val GeomFromGML = new SqlFunction (" ST_GeomFromGML" )
98
+ val GeomFromKML = new SqlFunction (" ST_GeomFromKML" )
99
+ val GeomFromGeoJSON = new SqlFunction (" ST_GeomFromGeoJSON" )
100
+
57
101
/** Geometry Accessors */
58
102
val GeometryType = new SqlFunction (" ST_GeometryType" )
59
103
val SRID = new SqlFunction (" ST_SRID" )
@@ -146,10 +190,10 @@ trait PostGISSupport { driver: PostgresDriver =>
146
190
def <@ [G2 , P2 , R ](geom : Column [P2 ])(implicit om : o# arg[G2 , P2 ]# to[Boolean , R ]) = {
147
191
om(PostGISLibrary .BoxContainedBy .column(n, Node (geom)))
148
192
}
149
- def <-> [G2 , P2 , R ](geom : Column [P2 ])(implicit om : o# arg[G2 , P2 ]# to[Boolean , R ]) = {
193
+ def <-> [G2 , P2 , R ](geom : Column [P2 ])(implicit om : o# arg[G2 , P2 ]# to[Double , R ]) = {
150
194
om(PostGISLibrary .PointDistance .column(n, Node (geom)))
151
195
}
152
- def <#> [G2 , P2 , R ](geom : Column [P2 ])(implicit om : o# arg[G2 , P2 ]# to[Boolean , R ]) = {
196
+ def <#> [G2 , P2 , R ](geom : Column [P2 ])(implicit om : o# arg[G2 , P2 ]# to[Double , R ]) = {
153
197
om(PostGISLibrary .BoxDistance .column(n, Node (geom)))
154
198
}
155
199
0 commit comments