Kirby Geo

资助包维护!
getkirby.com/buy

安装量: 1,314

依赖: 0

建议者: 0

安全性: 0

星标: 19

关注者: 9

分支: 1

开放问题: 1

类型:kirby-plugin

1.0.2 2022-10-05 10:20 UTC

This package is auto-updated.

Last update: 2024-09-12 15:13:41 UTC


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

致谢

Bastian Allgeier