chris48s/cakephp-geodistance 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

chris48s/cakephp-geodistance

最新稳定版本:2.0.0

Composer 安装命令:

composer require chris48s/cakephp-geodistance

包简介

CakePHP 3 model behavior for querying geocoded data based on distance

README 文档

README

Build Status Coverage Status

CakePHP GeoDistance Plugin

A CakePHP 3 Behavior for querying geocoded data by distance.

CakePHP-GeoDistance is a CakePHP 3 behavior for querying geocoded data based on cartographic distance using the spherical cosine law. It is great for 'find my nearest X' or 'find Y near me' type queries. If your database doesn't already have latitude/longitude co-ordinates attached to your geographic data, you can add them using a geocoding plugin. Try this one.

Installation

Install from packagist using composer. Add the following to your composer.json:

"require": {
    "chris48s/cakephp-geodistance": "^2.0.0"
}

and run composer install or composer update, as applicable.

Supported databases

Only MySQL and Postgres are supported.

Usage

Loading the plugin

Add the code Plugin::load('Chris48s/GeoDistance'); to your bootstrap.php.

Using the Behavior

Add the behavior in your table class.

<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/GeoDistance.GeoDistance');
    }
}

Configuration

By default, the behavior assumes your table contains columns called latitude and longitude, and you want to perform queries in miles. These can be changed though. Simply pass an array of options when attaching the behavior:

<?php
namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/GeoDistance.GeoDistance', [
            'latitudeColumn' => 'lat',
            'longitudeColumn' => 'lng',
            'units' => 'km'
        ]);
    }
}

Supported units are miles or kilometres.

Querying data

Having added the behavior to a table class, you now have access to the query method find('bydistance'), which you can use to find database records within radius of a given point:

<?php

use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$options = [
    'latitude' => 51.3984830139,
    'longitude' => -0.236298886484,
    'radius' => 10
];
$query = $myTable
    ->find('bydistance', $options)
    ->select(['address', 'lat', 'lng']);

latitude, longitude and radius are required parameters. If required parameters are missing or invalid, an exception of class GeoDistanceInvalidArgumentException will be thrown.

You can also pass additional conditions or parameters to the query and override the default for 'units', for example:

<?php

use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$options = [
    'latitude' => 51.3984830139,
    'longitude' => -0.236298886484,
    'radius' => 10,
    'units' => 'kilometres',
    'conditions' => [ 'active' => 1 ]
];
$query = $myTable
    ->find('bydistance', $options)
    ->select(['address', 'lat', 'lng']);

The method find('bydistance') returns a CakePHP query object, so you can chain additional methods on to this (e.g: ->order(), ->limit(), etc).

Reporting Issues

If you have any issues with this plugin then please feel free to create a new Issue on the GitHub repository. This plugin is licensed under the MIT License.

统计信息

  • 总下载量: 7.43k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 5
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-01-29