@@ -118,4 +118,50 @@ public function scopeBounding($query, Geometry $bounds, $column_name)
118118 {
119119 return $ query ->whereRaw ("st_intersects(GeomFromText(' {$ bounds ->toWkt ()}'), ` {$ column_name }`) " );
120120 }
121+
122+ public function scopeComparison ($ query , $ geometry_column , $ geometry , $ relationship )
123+ {
124+ $ query ->whereRaw ("st_ {$ relationship }(` {$ geometry_column }`, GeomFromText(' {$ geometry ->toWkt ()}')) " );
125+ return $ query ;
126+ }
127+
128+ public function scopeWithin ($ query , $ geometry_column , $ polygon )
129+ {
130+ return $ this ->scopeComparison ($ query , $ geometry_column , $ polygon , 'within ' );
131+ }
132+
133+ public function scopeCrosses ($ query , $ geometry_column , $ geometry )
134+ {
135+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'crosses ' );
136+ }
137+
138+ public function scopeContains ($ query , $ geometry_column , $ geometry )
139+ {
140+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'contains ' );
141+ }
142+
143+ public function scopeDisjoint ($ query , $ geometry_column , $ geometry )
144+ {
145+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'disjoint ' );
146+ }
147+
148+ public function scopeEquals ($ query , $ geometry_column , $ geometry )
149+ {
150+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'equals ' );
151+ }
152+
153+ public function scopeIntersects ($ query , $ geometry_column , $ geometry )
154+ {
155+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'intersects ' );
156+ }
157+
158+ public function scopeOverlaps ($ query , $ geometry_column , $ geometry )
159+ {
160+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'overlaps ' );
161+ }
162+
163+ public function scopeTouches ($ query , $ geometry_column , $ geometry )
164+ {
165+ return $ this ->scopeComparison ($ query , $ geometry_column , $ geometry , 'touches ' );
166+ }
121167}
0 commit comments