francoisvaillant/geolocator

Geolocator是一个简单的工具,可以定位地址或反向定位。它还可以确定海拔。

1.1 2022-03-06 11:33 UTC

This package is auto-updated.

Last update: 2024-09-06 17:32:06 UTC


README

Geolocator是一个简单的工具,可以定位地址或反向定位。它也可以确定海拔。

它使用了3个API

设置

composer require francoisvaillant/geolocator

命名空间

  • \Francoisvaillant\Geolocator\
  • \Francoisvaillant\Geolocator\Providers

所有都以地点开头

$place = new Place()

默认情况下,我们使用法国政府的“地址API”。如果您更喜欢(尤其是在法国之外),您可以使用NominatimApi将其设置为地点的提供者

$place = new Place(NominatimProvider::class)

从地址获取坐标

为了定位地址,您首先需要设置它并设置城市或邮编。城市通常不够。强烈建议在定位之前设置城市和邮编。

$place
    ->setAddress('your address');
    ->setCity('city name');
    ->setZipCode(00000);
    ->geolocate();

$latitude  = $place->getLatitude();  // NULL if geolocation failed
$longitude = $place->getLongitude(); // NULL if geolocation failed

从坐标获取地址

$place
    ->setLatitude(45.548);
    ->setLongitude(1.897);
    ->reverse();

$address = $place->getAddress(); // NULL if reverse failed
$zipCode = $place->getZipCode(); // NULL if reverse failed
$city    = $place->getCity();    // NULL if reverse failed

从坐标获取海拔

使用OpenTopoData API。有关详细信息和建议,请参阅https://www.opentopodata.org/

$place
    ->setLatitude(45.548);
    ->setLongitude(1.897);
    ->findAltitude() 
    ->getAltitude(); // NULL if failed

如果您托管自己的OpenTopoData API实例,请更改AltitudeProvider

    $altitudeProvider = new AltitudeProvider('https://:5000/v1/srtm30m?locations=%s,%s'); // note that first %s is for latitude, second one is for longitude
    $place->setAltitudeProvider($altitudeProvider);

您可以获取什么

一旦您通过->geolocate()或->reverse()(海拔略有不同)完全填充了地点,您将能够获取上述所有信息(但是取决于提供者)

- city
- zipCode
- address
- inseeCode
- department code
- departement name
- region name
- latitude and longitude (degrees)
- latitude and longitude (lambert93)

请注意,geolocate()和reverse()返回true或false,表示成功或失败。因此,您可以使用

    if($place->geolocate()) {
        // ...
    }

    if($place->reverse()) {
        // ...
    }

如果您想在geolocate()、reverse()或findAltitude()之后检查来自API的所有响应

$place
    //...
    ->geolocate();
$place->getProvider()->getResponseData();

$place
    //...
    ->reverse();
$place->getProvider()->getResponseData();

$place
    //...
    ->findAltitude();
$place->getAltitudeProvider()->getResponseData();