Home >Backend Development >PHP Tutorial >PHP obtains countries, provinces, cities, and surrounding data based on geographical coordinates
Function: When the App obtains the user's geographical coordinates, it can know the country, province, city, and surrounding data of the user based on the coordinates.
Principle: Based on Baidu Geocoding API implementation, you need to register as a Baidu developer first, and then apply for Baidu AK (key)
Geocoding.class.php
<code><span><span><span><?php</span> /** * 根据地理坐标获取国家、省份、城市,及周边数据类(利用百度Geocoding API实现) * 百度密钥获取方法:http://lbsyun.baidu.com/apiconsole/key?application=key(需要先注册百度开发者账号) * Date: 2015-07-30 * Author: fdipzone * Ver: 1.0 * * Func: * Public getAddressComponent 根据地址获取国家、省份、城市及周边数据 * Private toCurl 使用curl调用百度Geocoding API */</span><span><span>class</span><span>Geocoding</span> {</span><span>// 百度Geocoding API</span><span>const</span> API = <span>'http://api.map.baidu.com/geocoder/v2/'</span>; <span>// 不显示周边数据</span><span>const</span> NO_POIS = <span>0</span>; <span>// 显示周边数据</span><span>const</span> POIS = <span>1</span>; <span>/** * 根据地址获取国家、省份、城市及周边数据 *<span> @param</span> String $ak 百度ak(密钥) *<span> @param</span> Decimal $longitude 经度 *<span> @param</span> Decimal $latitude 纬度 *<span> @param</span> Int $pois 是否显示周边数据 *<span> @return</span> Array */</span><span>public</span><span>static</span><span><span>function</span><span>getAddressComponent</span><span>(<span>$ak</span>, <span>$longitude</span>, <span>$latitude</span>, <span>$pois</span>=self::NO_POIS)</span>{</span><span>$param</span> = <span>array</span>( <span>'ak'</span> => <span>$ak</span>, <span>'location'</span> => implode(<span>','</span>, <span>array</span>(<span>$latitude</span>, <span>$longitude</span>)), <span>'pois'</span> => <span>$pois</span>, <span>'output'</span> => <span>'json'</span> ); <span>// 请求百度api</span><span>$response</span> = <span>self</span>::toCurl(<span>self</span>::API, <span>$param</span>); <span>$result</span> = <span>array</span>(); <span>if</span>(<span>$response</span>){ <span>$result</span> = json_decode(<span>$response</span>, <span>true</span>); } <span>return</span><span>$result</span>; } <span>/** * 使用curl调用百度Geocoding API *<span> @param</span> String $url 请求的地址 *<span> @param</span> Array $param 请求的参数 *<span> @return</span> JSON */</span><span>private</span><span>static</span><span><span>function</span><span>toCurl</span><span>(<span>$url</span>, <span>$param</span>=array<span>()</span>)</span>{</span><span>$ch</span> = curl_init(); <span>if</span>(substr(<span>$url</span>,<span>0</span>,<span>5</span>)==<span>'https'</span>){ curl_setopt(<span>$ch</span>, CURLOPT_SSL_VERIFYPEER, <span>false</span>); <span>// 跳过证书检查</span> curl_setopt(<span>$ch</span>, CURLOPT_SSL_VERIFYHOST, <span>true</span>); <span>// 从证书中检查SSL加密算法是否存在</span> } curl_setopt(<span>$ch</span>, CURLOPT_RETURNTRANSFER, <span>true</span>); curl_setopt(<span>$ch</span>, CURLOPT_URL, <span>$url</span>); curl_setopt(<span>$ch</span>, CURLOPT_POST, <span>true</span>); curl_setopt(<span>$ch</span>, CURLOPT_POSTFIELDS, http_build_query(<span>$param</span>)); <span>$response</span> = curl_exec(<span>$ch</span>); <span>if</span>(<span>$error</span>=curl_error(<span>$ch</span>)){ <span>return</span><span>false</span>; } curl_close(<span>$ch</span>); <span>return</span><span>$response</span>; } } <span>?></span></span></span></span></code>
demo.php
<code><span><?php</span><span>require</span><span>"Geocoding.class.php"</span>; <span>$ak</span> = <span>'这里填写你的百度AK'</span>; <span>$longitude</span> = <span>113.327782</span>; <span>$latitude</span> = <span>23.137202</span>; <span>$result</span> = Geocoding::getAddressComponent(<span>$ak</span>, <span>$longitude</span>, <span>$latitude</span>, Geocoding::NO_POIS); <span>echo</span><span>'<pre class="brush:php;toolbar:false">'</span>; print_r(<span>$result</span>); <span>echo</span><span>''; ?>
Example return:
<code><span>Array</span> ( [status] => <span>0</span> [result] => <span>Array</span> ( [location] => <span>Array</span> ( [lng] => <span>113.32778195925</span> [lat] => <span>23.137201991056</span> ) [formatted_address] => 广东省广州市天河区体育西横街<span>35</span>号 [business] => 天河城,体育中心,沙河 [addressComponent] => <span>Array</span> ( [city] => 广州市 [country] => 中国 [direction] => 附近 [distance] => <span>14</span> [district] => 天河区 [province] => 广东省 [street] => 体育西横街 [street_number] => <span>35</span>号 [country_code] => <span>0</span> ) [poiRegions] => <span>Array</span> ( ) [sematic_description] => 红盾大厦北<span>58</span>米 [cityCode] => <span>257</span> ) )</code>
Source code download address: Click to view
Copyright statement: This article is an original article by the blogger and may not be reproduced without the permission of the blogger.
The above introduces how PHP can obtain countries, provinces, cities, and surrounding data based on geographical coordinates, including relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.