spatie / geocoder
将地址转换为坐标
3.16.0
2024-03-02 06:00 UTC
Requires
- php: ^7.2|^8.0
- guzzlehttp/guzzle: ^6.5|^7.0
- illuminate/support: ^6.0|^7.0|^8.67|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0|^8.0|^9.0
- phpunit/phpunit: ^8.5.21|^9.0|^9.4.4|^10.5
This package is auto-updated.
Last update: 2024-08-31 00:32:06 UTC
README
此包可以使用 Google的地址编码服务 将任何地址转换为GPS坐标。以下是一个快速示例
Geocoder::getCoordinatesForAddress('Samberstraat 69, Antwerpen, Belgium'); // will return this array [ 'lat' => 51.2343564, 'lng' => 4.4286108, 'accuracy' => 'ROOFTOP', 'formatted_address' => 'Samberstraat 69, 2060 Antwerpen, Belgium', 'viewport' => [ "northeast" => [ "lat" => 51.23570538029149, "lng" => 4.429959780291502 ], "southwest" => [ "lat" => 51.2330074197085, "lng" => 4.427261819708497 ] ] ]
支持我们
通过观看我们的付费视频课程,了解如何创建类似此包的包
我们投入了大量资源来创建 最佳的开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄给我们明信片,说明您正在使用我们哪个包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在 我们的虚拟明信片墙上。
安装
您可以通过composer安装此包。
composer require spatie/geocoder
Laravel安装
尽管该包在非Laravel项目中也能正常运行,但我们为同行艺术家们提供了一些便利功能。
在Laravel 5.5中,该包将自动注册自己。在Laravel的旧版本中,您必须手动安装服务提供者和外观。
// config/app.php 'providers' => [ '...', Spatie\Geocoder\GeocoderServiceProvider::class ];
// config/app.php 'aliases' => array( ... 'Geocoder' => Spatie\Geocoder\Facades\Geocoder::class, )
接下来,您必须发布配置文件
php artisan vendor:publish --provider="Spatie\Geocoder\GeocoderServiceProvider" --tag="config"
这是配置文件的内容
return [ /* * The api key used when sending Geocoding requests to Google. */ 'key' => env('GOOGLE_MAPS_GEOCODING_API_KEY', ''), /* * The language param used to set response translations for textual data. * * More info: https://developers.google.com/maps/faq#languagesupport */ 'language' => '', /* * The region param used to finetune the geocoding process. * * More info: https://developers.google.com/maps/documentation/geocoding/intro#RegionCodes */ 'region' => '', /* * The bounds param used to finetune the geocoding process. * * More info: https://developers.google.com/maps/documentation/geocoding/intro#Viewports */ 'bounds' => '', /* * The country param used to limit results to a specific country. * * More info: https://developers.google.com/maps/documentation/javascript/geocoding#GeocodingRequests */ 'country' => '', ];
用法
以下是使用Geocoder的方法。
$client = new \GuzzleHttp\Client(); $geocoder = new Geocoder($client); $geocoder->setApiKey(config('geocoder.key')); $geocoder->setCountry(config('geocoder.country', 'US')); $geocoder->getCoordinatesForAddress('Infinite Loop 1, Cupertino'); /* This function returns an array with keys "lat" => 37.331741000000001 "lng" => -122.0303329 "accuracy" => "ROOFTOP" "formatted_address" => "1 Infinite Loop, Cupertino, CA 95014, USA", "viewport" => [ "northeast" => [ "lat" => 37.3330546802915, "lng" => -122.0294342197085 ], "southwest" => [ "lat" => 37.3303567197085, "lng" => -122.0321321802915 ] ] */
您可以得到特定语言的返回结果。
$geocoder->setLanguage('it'); $geocoder->getCoordinatesForAddress('Infinite Loop 1, Cupertino'); /* This function returns an array with keys "lat" => 37,3318598 "lng" => -122,0302485 "accuracy" => "ROOFTOP" "formatted_address" => "Infinite Loop 1, 1 Infinite Loop, Cupertino, CA 95014, Stati Uniti" ... */
您也可以获取所有结果,而不仅仅是第一个结果
$geocoder ->getAllCoordinatesForAddress('Infinite Loop 1, Cupertino'); /* This function returns an array of results (array of array) ^ array:2 [ 0 => array:7 [ "lat" => 37,3318115 "lng" => -122,0301837 "accuracy" => "ROOFTOP" "formatted_address" => "1 Infinite Loop, Cupertino, CA 95014, Stati Uniti" "viewport" => [ "northeast" => [ "lat" => 37.3330546802915, "lng" => -122.0294342197085 ], "southwest" => [ "lat" => 37.3303567197085, "lng" => -122.0321321802915 ] ] "place_id" => "ChIJHTRqF7e1j4ARzZ_Fv8VA4Eo" ] 1 => array:7 [ "lat" => 37,3318598 "lng" => -122,0302485 "accuracy" => "ROOFTOP" "formatted_address" => "Infinite Loop 1, 1 Infinite Loop, Cupertino, CA 95014, Stati Uniti" "viewport" => [ "northeast" => [ "lat" => 37.333046180291 "lng" => -122.02883961971 ], "southwest" => [ "lat" => 37.330348219708 "lng" => -122.03153758029 ] ] "place_id" => "ChIJAf9D3La1j4ARuwKZtGjgMXw" ] ] */
这是如何将坐标反向编码为地址的。
$geocoder->getAddressForCoordinates(40.714224, -73.961452); /* This function returns an array with keys "lat" => 40.7142205 "lng" => -73.9612903 "accuracy" => "ROOFTOP" "formatted_address" => "277 Bedford Ave, Brooklyn, NY 11211, USA", "viewport" => [ "northeast" => [ "lat" => 37.3330546802915, "lng" => -122.0294342197085 ], "southwest" => [ "lat" => 37.3303567197085, "lng" => -122.0321321802915 ] ] */
您还可以将坐标反向编码为所有相关地址。
$geocoder->getAllAddressesForCoordinates(40.714224, -73.961452); /* This function returns an array of results (array of array) array:2 [ 0 => array: 7 [ "lat" => 40.7142205 "lng" => -73.9612903 "accuracy" => "ROOFTOP" "formatted_address" => "277 Bedford Ave, Brooklyn, NY 11211, USA", "viewport" => [ "northeast" => [ "lat" => 37.3330546802915, "lng" => -122.0294342197085 ], "southwest" => [ "lat" => 37.3303567197085, "lng" => -122.0321321802915 ] ] ], 1 => array: 7 [ "lat" => 40.7142015 "lng" => -73.9613077 "accuracy" => "ROOFTOP" "formatted_address" => "279 Bedford Ave, Brooklyn, NY 11211, USA", "viewport" => [ "northeast" => [ "lat" => 40.715557080291, "lng" => -73.959947169708 ], "southwest" => [ "lat" => 40.712859119708, "lng" => -73.962645130291 ] ] ] ] */
如果您使用Laravel,您可以直接调用 getCoordinatesForAddress
。
Geocoder::getCoordinatesForAddress('Infinite Loop 1, Cupertino'); /* This function returns an array with keys "lat" => 37.331741000000001 "lng" => -122.0303329 "accuracy" => "ROOFTOP" "formatted_address" => "1 Infinite Loop, Cupertino, CA 95014, Stati Uniti", "viewport" => [ "northeast" => [ "lat" => 37.3330546802915, "lng" => -122.0294342197085 ], "southwest" => [ "lat" => 37.3303567197085, "lng" => -122.0321321802915 ] ] */
精度键可以包含以下值
ROOFTOP
RANGE_INTERPOLATED
GEOMETRIC_CENTER
APPROXIMATE
您可以在Google地址编码API页面上阅读有关这些值的更多信息。
当地址未找到时,精度和formatted_address将包含 result_not_found
鸣谢
许可
MIT许可(MIT)。请参阅 许可文件 了解更多信息。