Skip to content

Commit 9b12ca8

Browse files
committed
Add Relation scopes to SpatialTrait
Tests to come...
1 parent cfa1ff1 commit 9b12ca8

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

src/Eloquent/SpatialTrait.php

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)