Skip to content
Geo Plugin for Kirby 3
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Add unit tests Dec 10, 2019
tests Add unit tests Dec 10, 2019
.editorconfig Add a editorconfig Dec 10, 2019
.gitignore Add unit tests Dec 10, 2019
.php_cs first version Dec 9, 2019
LICENSE Create LICENSE Dec 10, 2019
README.md Update README.md Dec 10, 2019
composer.json Add license to composer.json Dec 10, 2019
index.php Update readme Dec 10, 2019
phpunit.xml.dist Add unit tests Dec 10, 2019

README.md

Kirby GEO Plugin

This plugin adds basic geo search and conversion functionalities to Kirby

Geo Class Option

Geo::point($lat, $lng)

Creates a new Kirby Geo Point

Example:

Geo::point(49.4883333, 8.4647222);
Geo::point('49.4883333, 8.4647222');
Geo::point([49.4883333, 8.4647222]);
Geo::point(['lat' => 49.4883333, 'lng' => 8.4647222]);

Afterwards you can get the latitude and longitude values of the point like this:

$point = Geo::point(49.4883333, 8.4647222);
echo $point->lat();
echo $point->lng();

Geo::distance($pointA, $pointB)

Returns the distance between two geo points.

$mannheim = Geo::point(49.4883333, 8.4647222);
$hamburg  = Geo::point(53.553436, 9.992247);

echo 'The distance between Mannheim and Hamburg is: ' . Geo::distance($mannheim, $hamburg);

You can also return the distance in miles instead of kilometers

echo 'The distance between Mannheim and Hamburg is: ' . Geo::distance($mannheim, $hamburg, 'mi');

Geo::niceDistance($pointA, $pointB)

Returns the distance between two geo points in a human readable way (i.e. 461.32 km)

$mannheim = Geo::point(49.4883333, 8.4647222);
$hamburg  = Geo::point(53.553436, 9.992247);

echo 'The distance between Mannheim and Hamburg is: ' . Geo::niceDistance($mannheim, $hamburg);

You can also return the "nice distance" in miles instead of kilometers

echo 'The distance between Mannheim and Hamburg is: ' . Geo::niceDistance($mannheim, $hamburg, 'mi');

Geo::kilometersToMiles($km)

Converts kilometers into miles:

echo Geo::kilometersToMiles(1000);

Geo::milesToKilometers($mi)

Converts miles into kilometers:

echo Geo::milesToKilometers(1000);

Radius Filter

The plugin automatically adds a new filter for all collections, which can be used to do a radius search:

$addresses = page('addresses')->children()->filterBy('location', 'radius', [
  'lat'    => 49.4883333,
  'lng'    => 8.4647222,
  'radius' => 10
]);

To make this work, the location field for each address page must be in the following format:

location: {lat},{lng}

or with a real life example:

location: 49.4883333,8.4647222

You can also filter in miles

$addresses = page('addresses')->children()->filterBy('location', 'radius', [
  'lat'    => 49.4883333,
  'lng'    => 8.4647222,
  'radius' => 10,
  'unit'   => 'mi'
]);

Field Methods

The plugin also adds a set of field methods, which can be handy to work with locations

$field->coordinates()

Converts a field with the value format {lat},{lng} into a valid Kirby Geo Point Object:

$page->location()->coordinates()->lat();
$page->location()->coordinates()->lng();

$field->distance($point)

Calculates the distance between a location field and another Kirby Geo Point:

$hamburg = Geo::point(53.553436, 9.992247);

echo $page->location()->distance($hamburg);

Of course you can run this in miles again:

$hamburg = Geo::point(53.553436, 9.992247);

echo $page->location()->distance($hamburg, 'mi');

$field->niceDistance($point)

Returns the distance in a more human friendly format:

$hamburg = Geo::point(53.553436, 9.992247);

echo $page->location()->niceDistance($hamburg);

License

http://www.opensource.org/licenses/mit-license.php

Credits

Bastian Allgeier

You can’t perform that action at this time.