francoisvaillant / geolocator
Geolocator是一个简单的工具,可以定位地址或反向定位。它还可以确定海拔。
1.1
2022-03-06 11:33 UTC
Requires
- php: >=7.4.0
- symfony/http-client: ^5.2
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-06 17:32:06 UTC
README
Geolocator是一个简单的工具,可以定位地址或反向定位。它也可以确定海拔。
它使用了3个API
- https://adresse.data.gouv.fr/api-doc/adresse
- https://nominatim.org/release-docs/develop/
- https://www.opentopodata.org/
设置
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();