Skip to content

Commit 65f6ab1

Browse files
committed
Added documentation. Updated readme. Updated composer.json.
1 parent fe4f638 commit 65f6ab1

File tree

4 files changed

+72
-21
lines changed

4 files changed

+72
-21
lines changed

README.md

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,23 @@ Laravel package to easily work with [MySQL Spatial Data Types](https://dev.mysql
1111

1212
Please check the documentation for your MySQL version. MySQL's Extension for Spatial Data was added in MySQL 5.5 but many Spatial Functions were changed in 5.6 and 5.7.
1313

14+
**Versions**
15+
16+
- `1.x.x`: MySQL 5.6 (also supports MySQL 5.5 but not all spatial analysis functions)
17+
- `2.x.x`: MySQL 5.7 and 8.0
18+
1419
## Installation
1520

1621
Add the package using composer:
1722

1823
```shell
19-
composer require astrogin/laravel-mysql-spatial
24+
composer require grimzy/laravel-mysql-spatial
25+
```
26+
27+
For MySQL 5.6 and 5.5:
28+
29+
```shell
30+
composer require grimzy/laravel-mysql-spatial:^1.0
2031
```
2132

2233
Register the service provider in `config/app.php`:
@@ -211,14 +222,35 @@ class UpdatePlacesTable extends Migration
211222

212223
Available geometry classes:
213224

214-
- Point
215-
- LineString
216-
- Polygon
217-
- MultiPoint
218-
- MultiLineString
219-
- MultiPolygon
220-
- GeometryCollection
221-
225+
- `Point($lat, $lng)`
226+
- `MultiPoint(Point[])`
227+
- `LineString(Point[])`
228+
- `MultiLineString(LineString[])`
229+
- `Polygon(LineString[])`
230+
- `MultiPolygon(Polygon[])`
231+
- `GeometryCollection(Geometry[])` *(a collection of spatial models)*
232+
233+
## Scopes: Spatial analysis functions
234+
235+
Spatial analysis functions are implemented using [Eloquent Local Scopes](https://laravel.com/docs/5.4/eloquent#local-scopes).
236+
237+
Available scopes:
238+
239+
- `distance($geometryColumn, $geometry, $distance)`
240+
- `distanceExcludingSelf($geometryColumn, $geometry, $distance)`
241+
- `distanceSphere($geometryColumn, $geometry, $distance)`
242+
- `distanceSphereExcludingSelf($geometryColumn, $geometry, $distance)`
243+
- `comparison($geometryColumn, $geometry, $relationship)`
244+
- `within($geometryColumn, $polygon)`
245+
- `crosses($geometryColumn, $geometry)`
246+
- `contains($geometryColumn, $geometry)`
247+
- `disjoint($geometryColumn, $geometry)`
248+
- `equals($geometryColumn, $geometry)`
249+
- `intersects($geometryColumn, $geometry)`
250+
- `overlaps($geometryColumn, $geometry)`
251+
- `touches($geometryColumn, $geometry)`
252+
253+
*Note that behavior and availability of MySQL spatial analysis functions differs in each MySQL version (cf. [documentation](https://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html)).*
222254

223255
## Credits
224256

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"jmikola/geojson": "^1.0"
1717
},
1818
"require-dev": {
19-
"phpunit/phpunit": "~4.5||5.6.5",
19+
"phpunit/phpunit": "~5.7",
2020
"mockery/mockery": "^0.9.9",
2121
"laravel/laravel": "^5.2",
2222
"codeclimate/php-test-reporter": "dev-master",
@@ -35,7 +35,7 @@
3535
},
3636
"extra": {
3737
"branch-alias": {
38-
"dev-master": "1.0.x-dev"
38+
"dev-master": "2.0.x-dev"
3939
}
4040
}
4141
}

src/Eloquent/SpatialTrait.php

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,25 @@
77
use Grimzy\LaravelMysqlSpatial\Types\GeometryInterface;
88
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
99

10+
/**
11+
* Trait SpatialTrait
12+
*
13+
* @package Grimzy\LaravelMysqlSpatial\Eloquent
14+
*
15+
* @method static distance($geometryColumn, $geometry, $distance)
16+
* @method static distanceExcludingSelf($geometryColumn, $geometry, $distance)
17+
* @method static distanceSphere($geometryColumn, $geometry, $distance)
18+
* @method static distanceSphereExcludingSelf($geometryColumn, $geometry, $distance)
19+
* @method static comparison($geometryColumn, $geometry, $relationship)
20+
* @method static within($geometryColumn, $polygon)
21+
* @method static crosses($geometryColumn, $geometry)
22+
* @method static contains($geometryColumn, $geometry)
23+
* @method static disjoint($geometryColumn, $geometry)
24+
* @method static equals($geometryColumn, $geometry)
25+
* @method static intersects($geometryColumn, $geometry)
26+
* @method static overlaps($geometryColumn, $geometry)
27+
* @method static touches($geometryColumn, $geometry)
28+
*/
1029
trait SpatialTrait
1130
{
1231
/*
@@ -170,4 +189,4 @@ public function scopeDoesTouch($query, $geometryColumn, $geometry)
170189
{
171190
return $this->scopeComparison($query, $geometryColumn, $geometry, 'touches');
172191
}
173-
}
192+
}

tests/Unit/Eloquent/SpatialTraitTest.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ private function buildTestPolygon()
306306

307307
public function testScopeComparison()
308308
{
309-
$query = TestModel::Comparison('point', $this->buildTestPolygon(), 'within');
309+
$query = TestModel::comparison('point', $this->buildTestPolygon(), 'within');
310310

311311
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
312312
$q = $query->getQuery();
@@ -316,7 +316,7 @@ public function testScopeComparison()
316316

317317
public function testScopeWithin()
318318
{
319-
$query = TestModel::Within('point', $this->buildTestPolygon());
319+
$query = TestModel::within('point', $this->buildTestPolygon());
320320

321321
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
322322
$q = $query->getQuery();
@@ -326,7 +326,7 @@ public function testScopeWithin()
326326

327327
public function testScopeCrosses()
328328
{
329-
$query = TestModel::Crosses('point', $this->buildTestPolygon());
329+
$query = TestModel::crosses('point', $this->buildTestPolygon());
330330

331331
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
332332
$q = $query->getQuery();
@@ -336,7 +336,7 @@ public function testScopeCrosses()
336336

337337
public function testScopeContains()
338338
{
339-
$query = TestModel::Contains('point', $this->buildTestPolygon());
339+
$query = TestModel::contains('point', $this->buildTestPolygon());
340340

341341
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
342342
$q = $query->getQuery();
@@ -346,7 +346,7 @@ public function testScopeContains()
346346

347347
public function testScopeDisjoint()
348348
{
349-
$query = TestModel::Disjoint('point', $this->buildTestPolygon());
349+
$query = TestModel::disjoint('point', $this->buildTestPolygon());
350350

351351
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
352352
$q = $query->getQuery();
@@ -356,7 +356,7 @@ public function testScopeDisjoint()
356356

357357
public function testScopeEquals()
358358
{
359-
$query = TestModel::Equals('point', $this->buildTestPolygon());
359+
$query = TestModel::equals('point', $this->buildTestPolygon());
360360

361361
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
362362
$q = $query->getQuery();
@@ -366,7 +366,7 @@ public function testScopeEquals()
366366

367367
public function testScopeIntersects()
368368
{
369-
$query = TestModel::Intersects('point', $this->buildTestPolygon());
369+
$query = TestModel::intersects('point', $this->buildTestPolygon());
370370

371371
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
372372
$q = $query->getQuery();
@@ -376,7 +376,7 @@ public function testScopeIntersects()
376376

377377
public function testScopeOverlaps()
378378
{
379-
$query = TestModel::Overlaps('point', $this->buildTestPolygon());
379+
$query = TestModel::overlaps('point', $this->buildTestPolygon());
380380

381381
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
382382
$q = $query->getQuery();
@@ -386,7 +386,7 @@ public function testScopeOverlaps()
386386

387387
public function testScopeDoesTouch()
388388
{
389-
$query = TestModel::DoesTouch('point', $this->buildTestPolygon());
389+
$query = TestModel::doesTouch('point', $this->buildTestPolygon());
390390

391391
$this->assertInstanceOf(\Grimzy\LaravelMysqlSpatial\Eloquent\Builder::class, $query);
392392
$q = $query->getQuery();

0 commit comments

Comments
 (0)