becklyn / postal-code-proximity
计算附近的邮政编码(假设存在预先生成的邮政编码查找数据库)。
v0.1.1
2015-03-06 11:39 UTC
Requires
- php: >=5.3
This package is auto-updated.
Last update: 2024-09-07 05:21:56 UTC
README
如果您有一个包含邮政编码到经纬度映射的预先生成的数据库,这个库将帮助您搜索附近的邮政编码(在给定半径内)。
使用方法
首先,您需要创建一个查询生成器。查询生成器负责生成从数据库加载数据的SQL。您需要指定您的邮政编码表的名字和列名。
use Becklyn\PostalCodeProximity\QueryGenerator; $queryGenerator = new QueryGenerator($tableName, $latitudeColumn = "lat", $longitudeColumn = "lng", $postalCodeColumn = "zip");
之后,您需要使用一个数据库适配器。已经存在适用于PDO和mysqli的适配器。
use Becklyn\PostalCodeProximity\Adapter\PdoAdapter; $pdo = new \PDO("...", "user", "password"); $databaseAdapter = new PdoAdapter($pdo, $queryGenerator);
或者
use Becklyn\PostalCodeProximity\Adapter\MysqliAdapter; $mysqli = new \mysqli("localhost", "user", "password", "dbname"); $databaseAdapter = new MysqliAdapter($mysqli, $queryGenerator);
现在您可以查询附近的邮政编码
use Becklyn\PostalCodeProximity\PostalCodeLocator; $postalCodeLocator = new PostalCodeLocator($databaseAdapter); $postalCodeLocator->loadNearPostalCodes($postalCode, $radius, $limit = null);
$postalCode
是邮政编码,例如"12345"
$radius
是半径(千米,直线距离)$limit
(可选)限制结果数量
返回值
您将收到一个包含 NearPostalCode
的数组
$nearPostalCode->getPostalCode(); $nearPostalCode->getDistanceInKm();
错误情况
有两种可能的错误情况(除直接来自数据库的异常外)
AmbiguousPostalCodeException
:如果给定的邮政编码在邮政编码数据库中找到多次QueryException
:处理所有源于数据库的错误情况。 警告:异常消息可能包含敏感信息。
推荐数据库结构
postal_code CHAR(5)
(可能因您所在国家而异)latitude DOUBLE
longitude DOUBLE
您应该在 postal_code
字段上添加唯一索引,并在 latitude
和 longitude
上添加索引。