https://github.com/chris48s/cakephp-geodistance
:cake: A CakePHP 3 geodistance model behavior :earth_africa:
https://github.com/chris48s/cakephp-geodistance
cakephp distance geo
Last synced: 4 months ago
JSON representation
:cake: A CakePHP 3 geodistance model behavior :earth_africa:
- Host: GitHub
- URL: https://github.com/chris48s/cakephp-geodistance
- Owner: chris48s
- License: mit
- Created: 2016-01-21T18:59:54.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2018-05-06T14:08:25.000Z (over 7 years ago)
- Last Synced: 2025-07-18T05:26:55.442Z (4 months ago)
- Topics: cakephp, distance, geo
- Language: PHP
- Homepage: https://packagist.org/packages/chris48s/cakephp-geodistance
- Size: 20.5 KB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
[](https://travis-ci.org/chris48s/cakephp-geodistance)
[](https://coveralls.io/github/chris48s/cakephp-geodistance?branch=master)
# CakePHP GeoDistance Plugin
## A CakePHP 3 Behavior for querying geocoded data by distance.
CakePHP-GeoDistance is a CakePHP 3 behavior for querying geocoded data based on
cartographic distance using the spherical cosine law. It is great for 'find my
nearest X' or 'find Y near me' type queries. If your database doesn't already
have latitude/longitude co-ordinates attached to your geographic data, you can
add them using a geocoding plugin. Try
[this one](https://github.com/chris48s/cakephp-geocoder).
## Installation
Install from [packagist](https://packagist.org/packages/chris48s/cakephp-geodistance) using [composer](https://getcomposer.org/).
Add the following to your `composer.json`:
```
"require": {
"chris48s/cakephp-geodistance": "^2.0.0"
}
```
and run `composer install` or `composer update`, as applicable.
## Supported databases
Only MySQL and Postgres are supported.
## Usage
### Loading the plugin
Add the code `Plugin::load('Chris48s/GeoDistance');` to your `bootstrap.php`.
### Using the Behavior
Add the behavior in your table class.
```php
addBehavior('Chris48s/GeoDistance.GeoDistance');
}
}
```
#### Configuration
By default, the behavior assumes your table contains columns called `latitude`
and `longitude`, and you want to perform queries in miles. These can be changed
though. Simply pass an array of options when attaching the behavior:
```php
addBehavior('Chris48s/GeoDistance.GeoDistance', [
'latitudeColumn' => 'lat',
'longitudeColumn' => 'lng',
'units' => 'km'
]);
}
}
```
Supported units are miles or kilometres.
#### Querying data
Having added the behavior to a table class, you now have access to the query
method `find('bydistance')`, which you can use to find database records within
`radius` of a given point:
```php
51.3984830139,
'longitude' => -0.236298886484,
'radius' => 10
];
$query = $myTable
->find('bydistance', $options)
->select(['address', 'lat', 'lng']);
```
`latitude`, `longitude` and `radius` are required parameters. If required
parameters are missing or invalid, an exception of class `GeoDistanceInvalidArgumentException`
will be thrown.
You can also pass additional conditions or parameters to the query and
override the default for 'units', for example:
```php
51.3984830139,
'longitude' => -0.236298886484,
'radius' => 10,
'units' => 'kilometres',
'conditions' => [ 'active' => 1 ]
];
$query = $myTable
->find('bydistance', $options)
->select(['address', 'lat', 'lng']);
```
The method `find('bydistance')` returns a CakePHP query object, so you can chain
additional methods on to this (e.g: `->order()`, `->limit()`, etc).
## Reporting Issues
If you have any issues with this plugin then please feel free to create a new
[Issue](https://github.com/chris48s/cakephp-geodistance/issues) on the
[GitHub repository](https://github.com/chris48s/cakephp-geodistance).
This plugin is licensed under the MIT License.