getkirby / geo
Kirby Geo
1.0.2
2022-10-05 10:20 UTC
Requires
- php: >=7.4.0
- getkirby/composer-installer: ^1.2
Requires (Dev)
- getkirby/cms: ^3.3
README
此插件为Kirby添加了基本的地理搜索和转换功能。
地理类选项
Geo::point($lat, $lng)
创建一个新的Kirby Geo点。
示例
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]);
之后,您可以像这样获取点的纬度和经度值
$point = Geo::point(49.4883333, 8.4647222); echo $point->lat(); echo $point->lng();
Geo::distance($pointA, $pointB)
返回两个地理点之间的距离。
$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);
您也可以以英里为单位返回距离,而不是公里。
echo 'The distance between Mannheim and Hamburg is: ' . Geo::distance($mannheim, $hamburg, 'mi');
Geo::niceDistance($pointA, $pointB)
以人类可读的方式返回两个地理点之间的距离(例如,461.32公里)。
$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);
您也可以以英里为单位返回“友好距离”,而不是公里。
echo 'The distance between Mannheim and Hamburg is: ' . Geo::niceDistance($mannheim, $hamburg, 'mi');
Geo::kilometersToMiles($km)
将公里转换为英里。
echo Geo::kilometersToMiles(1000);
Geo::milesToKilometers($mi)
将英里转换为公里。
echo Geo::milesToKilometers(1000);
半径过滤器
插件自动为所有集合添加了一个新的过滤器,可用于进行半径搜索。
$addresses = page('addresses')->children()->filterBy('location', 'radius', [ 'lat' => 49.4883333, 'lng' => 8.4647222, 'radius' => 10 ]);
为此,每个地址页面的位置字段必须采用以下格式
location: {lat},{lng}
或使用实际生活示例
location: 49.4883333,8.4647222
您也可以用英里进行筛选
$addresses = page('addresses')->children()->filterBy('location', 'radius', [ 'lat' => 49.4883333, 'lng' => 8.4647222, 'radius' => 10, 'unit' => 'mi' ]);
字段方法
插件还添加了一组字段方法,这些方法对于处理位置非常有用。
$field->coordinates()
将具有值格式 {lat},{lng} 的字段转换为有效的Kirby Geo Point 对象。
$page->location()->coordinates()->lat(); $page->location()->coordinates()->lng();
$field->distance($point)
计算位置字段与另一个Kirby Geo Point 之间的距离。
$hamburg = Geo::point(53.553436, 9.992247); echo $page->location()->distance($hamburg);
当然,您也可以再次以英里为单位运行此操作。
$hamburg = Geo::point(53.553436, 9.992247); echo $page->location()->distance($hamburg, 'mi');
$field->niceDistance($point)
以更友好的格式返回距离。
$hamburg = Geo::point(53.553436, 9.992247); echo $page->location()->niceDistance($hamburg);
什么是Kirby?
- getkirby.com – 了解CMS。
- 试用 – 使用我们的在线演示进行测试。或者下载我们的套件开始使用。
- 文档 – 阅读官方指南、参考和食谱。
- 问题 – 报告错误和其他问题。
- 反馈 – 您对Kirby有什么想法?分享它。
- 论坛 – 遇到困难时,不要犹豫,寻求问题和支持。
- Discord – 加入社区。
- Mastodon – 传播信息。
- Instagram – 分享您的创作:#madewithkirby。
许可证
https://open-source.org.cn/licenses/mit-license.php