• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

brick / geo / 14057076899

25 Mar 2025 10:14AM UTC coverage: 52.154% (-13.7%) from 65.828%
14057076899

push

github

BenMorel
Wip

0 of 383 new or added lines in 14 files covered. (0.0%)

141 existing lines in 12 files now uncovered.

1634 of 3133 relevant lines covered (52.15%)

396.62 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Engine/DatabaseEngine.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Brick\Geo\Engine;
6

7
use Brick\Geo\Curve;
8
use Brick\Geo\Engine\Database\DatabasePlatform;
9
use Brick\Geo\Engine\Internal\GeometryParameter;
10
use Brick\Geo\Engine\Internal\TypeChecker;
11
use Brick\Geo\Exception\GeometryEngineException;
12
use Brick\Geo\Geometry;
13
use Brick\Geo\LineString;
14
use Brick\Geo\MultiCurve;
15
use Brick\Geo\MultiPoint;
16
use Brick\Geo\MultiSurface;
17
use Brick\Geo\Point;
18
use Brick\Geo\Surface;
19
use Override;
20

21
/**
22
 * Base class for database engines.
23
 */
24
abstract readonly class DatabaseEngine implements GeometryEngine
25
{
26
    /**
27
     * Queries a GIS function returning a boolean value.
28
     *
29
     * @param string          $function      The SQL GIS function to execute.
30
     * @param Geometry|scalar ...$parameters The Geometry objects or scalar values to pass as parameters.
31
     *
32
     * @throws GeometryEngineException
33
     */
34
    abstract protected function queryBool(string $function, Geometry|string|float|int|bool ...$parameters) : bool;
35

36
    /**
37
     * Queries a GIS function returning a floating point value.
38
     *
39
     * @param string          $function      The SQL GIS function to execute.
40
     * @param Geometry|scalar ...$parameters The Geometry objects or scalar values to pass as parameters.
41
     *
42
     * @throws GeometryEngineException
43
     */
44
    abstract protected function queryFloat(string $function, Geometry|string|float|int|bool ...$parameters) : float;
45

46
    /**
47
     * Queries a GIS function returning a Geometry object.
48
     *
49
     * @param string             $function   The SQL GIS function to execute.
50
     * @param Geometry|scalar ...$parameters The Geometry objects or scalar values to pass as parameters.
51
     *
52
     * @throws GeometryEngineException
53
     */
54
    abstract protected function queryGeometry(string $function, Geometry|string|float|int|bool ...$parameters) : Geometry;
55

56
    #[Override]
57
    public function contains(Geometry $a, Geometry $b) : bool
58
    {
NEW
59
        return $this->queryBool('ST_Contains', $a, $b);
×
60
    }
61

62
    #[Override]
63
    public function intersects(Geometry $a, Geometry $b) : bool
64
    {
NEW
65
        return $this->queryBool('ST_Intersects', $a, $b);
×
66
    }
67

68
    #[Override]
69
    public function union(Geometry $a, Geometry $b) : Geometry
70
    {
UNCOV
71
        return $this->queryGeometry('ST_Union', $a, $b);
×
72
    }
73

74
    #[Override]
75
    public function intersection(Geometry $a, Geometry $b) : Geometry
76
    {
UNCOV
77
        return $this->queryGeometry('ST_Intersection', $a, $b);
×
78
    }
79

80
    #[Override]
81
    public function difference(Geometry $a, Geometry $b) : Geometry
82
    {
UNCOV
83
        return $this->queryGeometry('ST_Difference', $a, $b);
×
84
    }
85

86
    #[Override]
87
    public function envelope(Geometry $g) : Geometry
88
    {
UNCOV
89
        return $this->queryGeometry('ST_Envelope', $g);
×
90
    }
91

92
    #[Override]
93
    public function centroid(Geometry $g) : Point
94
    {
UNCOV
95
        $centroid = $this->queryGeometry('ST_Centroid', $g);
×
UNCOV
96
        TypeChecker::check($centroid, Point::class);
×
97

UNCOV
98
        return $centroid;
×
99
    }
100

101
    #[Override]
102
    public function pointOnSurface(Surface|MultiSurface $g) : Point
103
    {
UNCOV
104
        $pointOnSurface = $this->queryGeometry('ST_PointOnSurface', $g);
×
UNCOV
105
        TypeChecker::check($pointOnSurface, Point::class);
×
106

UNCOV
107
        return $pointOnSurface;
×
108
    }
109

110
    #[Override]
111
    public function length(Curve|MultiCurve $g) : float
112
    {
UNCOV
113
        return $this->queryFloat('ST_Length', $g);
×
114
    }
115

116
    #[Override]
117
    public function area(Surface|MultiSurface $g) : float
118
    {
UNCOV
119
        return $this->queryFloat('ST_Area', $g);
×
120
    }
121

122
    #[Override]
123
    public function azimuth(Point $observer, Point $subject) : float
124
    {
UNCOV
125
        return $this->queryFloat('ST_Azimuth', $observer, $subject);
×
126
    }
127

128
    #[Override]
129
    public function boundary(Geometry $g) : Geometry
130
    {
UNCOV
131
        return $this->queryGeometry('ST_Boundary', $g);
×
132
    }
133

134
    #[Override]
135
    public function isValid(Geometry $g) : bool
136
    {
NEW
137
        return $this->queryBool('ST_IsValid', $g);
×
138
    }
139

140
    #[Override]
141
    public function isClosed(Geometry $g) : bool
142
    {
NEW
143
        return $this->queryBool('ST_IsClosed', $g);
×
144
    }
145

146
    #[Override]
147
    public function isSimple(Geometry $g) : bool
148
    {
NEW
149
        return $this->queryBool('ST_IsSimple', $g);
×
150
    }
151

152
    #[Override]
153
    public function isRing(Curve $curve) : bool
154
    {
NEW
155
        return $this->queryBool('ST_IsRing', $curve);
×
156
    }
157

158
    #[Override]
159
    public function makeValid(Geometry $g) : Geometry
160
    {
UNCOV
161
        return $this->queryGeometry('ST_MakeValid', $g);
×
162
    }
163

164
    #[Override]
165
    public function equals(Geometry $a, Geometry $b) : bool
166
    {
NEW
167
        return $this->queryBool('ST_Equals', $a, $b);
×
168
    }
169

170
    #[Override]
171
    public function disjoint(Geometry $a, Geometry $b) : bool
172
    {
NEW
173
        return $this->queryBool('ST_Disjoint', $a, $b);
×
174
    }
175

176
    #[Override]
177
    public function touches(Geometry $a, Geometry $b) : bool
178
    {
NEW
179
        return $this->queryBool('ST_Touches', $a, $b);
×
180
    }
181

182
    #[Override]
183
    public function crosses(Geometry $a, Geometry $b) : bool
184
    {
NEW
185
        return $this->queryBool('ST_Crosses', $a, $b);
×
186
    }
187

188
    #[Override]
189
    public function within(Geometry $a, Geometry $b) : bool
190
    {
NEW
191
        return $this->queryBool('ST_Within', $a, $b);
×
192
    }
193

194
    #[Override]
195
    public function overlaps(Geometry $a, Geometry $b) : bool
196
    {
NEW
197
        return $this->queryBool('ST_Overlaps', $a, $b);
×
198
    }
199

200
    #[Override]
201
    public function relate(Geometry $a, Geometry $b, string $matrix) : bool
202
    {
NEW
203
        return $this->queryBool('ST_Relate', $a, $b, $matrix);
×
204
    }
205

206
    #[Override]
207
    public function locateAlong(Geometry $g, float $mValue) : Geometry
208
    {
UNCOV
209
        return $this->queryGeometry('ST_LocateAlong', $g, $mValue);
×
210
    }
211

212
    #[Override]
213
    public function locateBetween(Geometry $g, float $mStart, float $mEnd) : Geometry
214
    {
UNCOV
215
        return $this->queryGeometry('ST_LocateBetween', $g, $mStart, $mEnd);
×
216
    }
217

218
    #[Override]
219
    public function distance(Geometry $a, Geometry $b) : float
220
    {
UNCOV
221
        return $this->queryFloat('ST_Distance', $a, $b);
×
222
    }
223

224
    #[Override]
225
    public function buffer(Geometry $g, float $distance) : Geometry
226
    {
UNCOV
227
        return $this->queryGeometry('ST_Buffer', $g, $distance);
×
228
    }
229

230
    #[Override]
231
    public function convexHull(Geometry $g) : Geometry
232
    {
UNCOV
233
        return $this->queryGeometry('ST_ConvexHull', $g);
×
234
    }
235

236
    #[Override]
237
    public function concaveHull(Geometry $g, float $convexity, bool $allowHoles) : Geometry
238
    {
UNCOV
239
        return $this->queryGeometry('ST_ConcaveHull', $g, $convexity, $allowHoles);
×
240
    }
241

242
    #[Override]
243
    public function symDifference(Geometry $a, Geometry $b) : Geometry
244
    {
UNCOV
245
        return $this->queryGeometry('ST_SymDifference', $a, $b);
×
246
    }
247

248
    #[Override]
249
    public function snapToGrid(Geometry $g, float $size) : Geometry
250
    {
UNCOV
251
        return $this->queryGeometry('ST_SnapToGrid', $g, $size);
×
252
    }
253

254
    #[Override]
255
    public function simplify(Geometry $g, float $tolerance) : Geometry
256
    {
UNCOV
257
        return $this->queryGeometry('ST_Simplify', $g, $tolerance);
×
258
    }
259

260
    #[Override]
261
    public function maxDistance(Geometry $a, Geometry $b) : float
262
    {
UNCOV
263
        return $this->queryFloat('ST_MaxDistance', $a, $b);
×
264
    }
265

266
    #[Override]
267
    public function transform(Geometry $g, int $srid) : Geometry
268
    {
UNCOV
269
        return $this->queryGeometry('ST_Transform', $g, $srid);
×
270
    }
271

272
    #[Override]
273
    public function split(Geometry $g, Geometry $blade) : Geometry
274
    {
UNCOV
275
        return $this->queryGeometry('ST_Split', $g, $blade);
×
276
    }
277

278
    #[Override]
279
    public function lineInterpolatePoint(LineString $lineString, float $fraction) : Point
280
    {
UNCOV
281
        $result = $this->queryGeometry('ST_LineInterpolatePoint', $lineString, $fraction);
×
UNCOV
282
        TypeChecker::check($result, Point::class);
×
283

UNCOV
284
        return $result;
×
285
    }
286

287
    #[Override]
288
    public function lineInterpolatePoints(LineString $lineString, float $fraction) : MultiPoint
289
    {
UNCOV
290
        $result = $this->queryGeometry('ST_LineInterpolatePoints', $lineString, $fraction);
×
291

UNCOV
292
        if ($result instanceof MultiPoint) {
×
UNCOV
293
            return $result;
×
294
        }
295

UNCOV
296
        TypeChecker::check($result, Point::class);
×
297

298
        // POINT EMPTY
UNCOV
299
        if ($result->isEmpty()) {
×
UNCOV
300
            return new MultiPoint($result->coordinateSystem());
×
301
        }
302

303
        // POINT
UNCOV
304
        return MultiPoint::of($result);
×
305
    }
306
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc