getkirby / geo
Kirby Geo
Fund package maintenance!
getkirby.com/buy
Installs: 1 502
Dependents: 0
Suggesters: 0
Security: 0
Stars: 18
Watchers: 9
Forks: 1
Open Issues: 1
Type:kirby-plugin
Requires
- php: >=7.4.0
- getkirby/composer-installer: ^1.2
Requires (Dev)
- getkirby/cms: ^3.3
README
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);
What’s Kirby?
- getkirby.com – Get to know the CMS.
- Try it – Take a test ride with our online demo. Or download one of our kits to get started.
- Documentation – Read the official guide, reference and cookbook recipes.
- Issues – Report bugs and other problems.
- Feedback – You have an idea for Kirby? Share it.
- Forum – Whenever you get stuck, don't hesitate to reach out for questions and support.
- Discord – Hang out and meet the community.
- Mastodon – Spread the word.
- Instagram – Share your creations: #madewithkirby.
License
http://www.opensource.org/licenses/mit-license.php