sjaakp/yii2-spatial
最新稳定版本:1.1.2
Composer 安装命令:
composer require sjaakp/yii2-spatial
包简介
Yii2 ActiveRecord supporting MySQL spatial data
README 文档
README
ActiveRecord with spatial attributes. Those attributes are transformed from the internal MySQL format to GeoJSON format after finding, and vice versa before storing.
Yii2-spatial can also be used to find the model or models which are nearest to a given location.
Notice that this extension is intended to be used with a MySQL or MariaDB database exclusively.
Version 1.1.0 is compatible with MySQL 5.7 and MariaDB 10.3.
Installation
Install Yii2-spatial with Composer. Either add the following to the require section of your composer.json file:
"sjaakp/yii2-spatial": "*"
Or run:
composer require sjaakp/yii2-spatial "*"
You can manually install Yii2-spatial by downloading the source in ZIP-format.
Usage
Simply use a sjaakp\spatial\ActiveRecord as base class for your models, like so:
<?php
use sjaakp\spatial\ActiveRecord;
class MySpatialModel extends ActiveRecord
{
// ...
}
Notice: if you override find() in a sjaakp\spatial\ActiveRecord-derived class, be sure to return a sjaakp\spatial\ActiveQuery and not an 'ordinary' yii\db\ActiveQuery.
ActiveRecord method
featureProperties()
public function featureProperties($field, $geometry)
Override this function to add properties to the GeoJSON encoded attribute.
$fieldis the attribute name.$geometryis an array with the GeoJSON-information, like decoded JSON.- Return:
arrayofproperty => value.
The default implementation adds the ActiveRecord's primary key as the property 'id'.
ActiveQuery method
nearest()
public function nearest($from, $attribute, $radius)
Change the query so that it finds the model(s) nearest to the point given by $from.
$from-string|arraystring: GeoJSON representation of searchPointorFeature.array: location in the form[<lng>, <lat>](twofloats).
$attribute-stringattribute name ofPointin the model.$radius-numbersearch radius in kilometers. Default100.- Return:
$this.
Example usages:
$here = [4.9, 52.3]; // longitude and latitude of my place
$here2 = '{"type":"Point","coordinates":[4.9,52.3]}'; // another representation
$nearestModel = <model>::find()->nearest($here, <attributeName>, 200)->one(); // search radius is 200 km
$fiveNearestModels = <model>::find()->nearest($here, <attributeName>)->limit(5)->all(); // search radius is 100 km (default)
$dataProvider = new ActiveDataProvider([ 'query' => <model>::find()->nearest($here, <attributeName>) ]);
Thanks
- fpolito for finding a very subtle bug.
统计信息
- 总下载量: 70.31k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 18
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-06-17