ride/lib-geocode

Ride框架的地理编码库

1.3.1 2019-06-07 10:34 UTC

This package is auto-updated.

Last update: 2024-09-07 21:29:42 UTC


README

PHP Ride框架的地理编码库。

本库包含内容

GeocodeService

GeocodeService 接口是本库的主要工作马,该类的实现负责实际查找地址到其他提供者。

本库包含几个实现

ArcgisGeocodeService

此服务使用 Arcgis 对地址进行地理编码。有关此服务的更多信息,请参阅 https://www.arcgis.com

FreeGeoIpGeocodeService

此服务使用 freegeoip.net 获取 IP 地址或域名位置。有关此服务的更多信息,请参阅 https://www.freegeoip.net

GoogleGeocodeService

此服务使用 Google Maps 对地址进行地理编码。有关此服务的更多信息,请参阅 https://developers.google.com/maps/documentation/geocoding/intro

ChainGeocodeService

使用 ChainGeocodeService 将相似的服务链接在一起。当第一个服务无法处理查找时,将轮询下一个服务,依此类推。

GeocodeResult

GeocodeResult 接口用于返回 GeocodeService 的结果。由 GenericGeocodeResult 类提供了一个默认实现。

GeocodeCoordinate

GeocodeCoordinate 接口用于从 GeocodeResult 中获取找到的坐标。由 GenericGeocodeCoordinate 类提供了一个默认实现。

Geocoder

Geocoder 是本库的门面。您可以添加不同的服务并给它们命名。然后使用此名称查找特定的地址。

代码示例

查看此代码示例以了解本库的一些可能性

<?php

use ride\library\http\client\Client;
use ride\library\geocode\service\ArcgisGeocodeService;
use ride\library\geocode\service\ChainGeocodeService;
use ride\library\geocode\service\FreeGeoIpGeocodeService;
use ride\library\geocode\service\GoogleGeocodeService;
use ride\library\geocode\Geocoder;

function createGeocoder(Client $httpClient) {
    // create a google service
    $googleService = new GoogleGeocodeService($httpClient);
    // optionally set a API key
    $googleService->setApiKey('your-api-key');
    
    // create a chain of address services
    $addressService = new ChainGeocodeService('address');
    $addressService->addService($googleService);
    $addressService->addService(new ArcgisGeocodeService($httpClient)); 
    
    // create a chain of ip services
    $ipService = new ChainGeocodeService('ip');
    $ipService->addService(new FreeGeoIpGeocodeService($httpClient));
    
    // create the geocoder and set our defined services to it
    $geocoder = new Geocoder();
    $geocoder->addService($addressService);
    $geocoder->addService($ipService);
    
    return $geocoder;
}

function geocodeStuff(Geocoder $geocoder) {
    try {
        $geocodeResult = $geocoder->geocode('address', 'Vital de costerstraat, Leuven'); 
        $geocodeResult = $geocoder->geocode('ip', 'github.com');
        $geocodeResult = $geocoder->geocode('ip', '8.8.8.8');
    } catch (GeocodeException $exception) {
        // could not find any result
    }
}

相关模块

安装

您可以使用 Composer 安装此库。

composer require ride/lib-geocode