magutti / magutti-spatial
Laravel Builder MySQL 空间扩展
V5.0.0
2024-03-16 15:18 UTC
Requires
- php: ^7.4|^8.0|^8.1|^8.2
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
README
Laravel Builder MySQL 空间扩展
Laravel Builder 扩展,使用 MySQL 原生函数 ST_Distance_Sphere
来计算两个空间点之间的距离。
ST_Distance_Sphere
默认的单位是米。
安装
您可以通过 composer 安装此包
composer require magutti/magutti-spatial
使用方法
在您的模型中添加
use Magutti\MaguttiSpatial\Builders\SpatialBuilder; class Location extends Model { ....... // you can override the default longitude and latitude fields protected $spatialFields = [ 'lng', 'lat' ]; function newEloquentBuilder($query): SpatialBuilder { return new SpatialBuilder($query); } ....... }
使用示例
获取所有距离给定位置小于 1 公里的点
Location::select(['id','lng','lat']) ->whitDistance([8.9246844, 45.4152695]) // return distance in meters (default) ->whereDistance([8.9246844, 45.4152695],1000) ->get()
其中 8.9246844 (经度), 45.4152695 (纬度) 是您的位置,1000 是最大距离(单位:米)。
SELECT `id`, `lng`, `lat`, St_distance_sphere(Point(8.9246844, 45.4152695), Point(lng, lat)) * 1 AS distance FROM `locations` WHERE St_distance_sphere(Point(8.9246844, 45.4152695), Point(lng, lat)) < 1000
使用英里
Location::select(['id','lat','lng']) ->whitDistanceInMiles([8.9246844, 45.4152695]) // return distance in Miles ->whereDistance([8.9246844, 45.4152695],10,'mi') ->get()
找到您最近的点(单位:公里)
Location::select(['id','lat','lng']) ->whitDistanceInKm([8.9246844, 45.4152695]) ->whereDistance([8.9246844, 45.4152695],10,'km') ->closest()
辅助工具
该包提供了一些预构建的方法来计算千米、英里或英尺的距离。
whitDistanceInKm(array $point) -> return distance in Km; whitDistanceInMiles(array $point) -> return distance in Miles (mi); whitDistanceInFeet(array $point) -> return distance in Feet (ft); and for filtering by distance whereDistanceInKm(array $point, float $distance) -> filter point by a given distance in Km whereDistanceInMiles(array $point, float $distance) -> filter point by a given distance in Miles whereDistanceInFeet(array $point, float $distance) -> filter point by a given distance in Miles
更新日志
请参阅 CHANGELOG 了解最近的变化。
贡献
请参阅 CONTRIBUTING 了解详细信息。
安全性
如果您发现任何安全问题,请通过电子邮件 marco@magutti.com 联系,而不是使用问题跟踪器。
致谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。