首页 » PHP教程 » php依据ip位置技巧_实用技巧若何经由进程IP地址进行精准定位

php依据ip位置技巧_实用技巧若何经由进程IP地址进行精准定位

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

当我们想详细到街道乃至门牌号,该怎么办???

有光阴创造百度舆图有高精度IP定位API的接口,通过该接口我们可以通过IP地址定位到详细的地理位置,乃至能精确到门牌号及周围的标志性建筑。
该接口的解释地址为:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip

php依据ip位置技巧_实用技巧若何经由进程IP地址进行精准定位

若想要利用该接口进行查询,必须先申请一个密钥(AK),如下图:

php依据ip位置技巧_实用技巧若何经由进程IP地址进行精准定位
(图片来自网络侵删)

申请过程就不进行解释了。
API的接口参数解释和返回参数解释也不过多的先容,大家可以看一看。
由于我想返回根本定位结果+地址信息+POI信息,以是我将要求参数extensions的值设置为3。
一次完全的http要求为:http://api.map.baidu.com/highacciploc/v1?qcip=183.55.116.90&qterm=pc&ak=“你的 密钥(AK)”&coord=bd09ll&extensions=3 。
要求结果如下图:

结果为json格式数据:

{\"大众content\"大众:{\公众location\"大众:{\"大众lat\"大众:23.06588,\"大众lng\"大众:115.404586},\"大众locid\"大众:\公众925a2a9e3ac5be1cf003afd23c344ab3\"大众,\"大众radius\"大众:30,\公众confidence\"大众:0.5,\公众address_component\公众:{\公众country\"大众:\"大众中国\"大众,\"大众province\公众:\"大众广东省\"大众,\公众city\"大众:\"大众汕尾市\公众,\"大众district\"大众:\"大众海丰县\公众,\"大众street\"大众:\"大众新平路\"大众,\"大众street_number\"大众:\公众\"大众,\"大众admin_area_code\公众:441521},\公众formatted_address\公众:\公众广东省汕尾市海丰县新平路\"大众,\"大众business\公众:\"大众公正\公众},\"大众result\"大众:{\公众error\"大众:161,\公众loc_time\"大众:\"大众2016-10-19 21:53:28\"大众}}

我们须要的字段为:content字段里面的formatted_address。
当然我们也可以将location里面的经度和纬度提取出来从而显示在舆图上面。
有的IP地址会返回pois数据,比如:183.55.116.95。
返回参数如下:

{\"大众content\公众:{\"大众location\"大众:{\"大众lat\"大众:23.082367,\"大众lng\"大众:115.466276},\"大众locid\"大众:\"大众3fb96555906fff3100ff21119142ccd5\公众,\"大众radius\公众:30,\"大众confidence\公众:1.0,\"大众address_component\公众:{\"大众country\"大众:\公众中国\"大众,\公众province\"大众:\"大众广东省\"大众,\"大众city\"大众:\"大众汕尾市\公众,\"大众district\"大众:\"大众海丰县\公众,\"大众street\公众:\"大众S335\"大众,\"大众street_number\"大众:\"大众\公众,\"大众admin_area_code\公众:441521},\"大众formatted_address\"大众:\"大众广东省汕尾市海丰县S335\"大众,\"大众pois\"大众:[{\"大众name\公众:\"大众双墩村落\"大众,\"大众address\公众:\"大众汕尾市海丰县三三五省道\公众,\"大众tag\公众:\"大众行政地标;村落落\"大众,\公众location\"大众:{\"大众lat\"大众:23.082422,\"大众lng\公众:115.465348},\"大众uid\公众:\"大众18010998377147269119\"大众},{\"大众name\公众:\公众双墩村落委会\"大众,\"大众address\"大众:\公众汕尾市海丰县\"大众,\"大众tag\公众:\公众政府机构;各级政府\"大众,\"大众location\公众:{\"大众lat\公众:23.083394,\"大众lng\"大众:115.465914},\"大众uid\"大众:\公众17661602237861855231\"大众},{\"大众name\"大众:\"大众长联塘尾\"大众,\"大众address\"大众:\"大众汕尾市海丰县\公众,\"大众tag\"大众:\公众行政地标;村落落\"大众,\"大众location\公众:{\"大众lat\公众:23.081358,\"大众lng\公众:115.467315},\"大众uid\公众:\"大众18010998372852301823\公众},{\"大众name\公众:\公众双墩小学\"大众,\"大众address\"大众:\"大众335省道附近\"大众,\"大众tag\公众:\"大众教诲培训;小学\公众,\"大众location\"大众:{\"大众lat\"大众:23.083336,\"大众lng\"大众:115.465061},\"大众uid\"大众:\"大众17661601958688980991\公众},{\"大众name\公众:\"大众大溪头\公众,\公众address\"大众:\"大众汕尾市海丰县\"大众,\"大众tag\"大众:\"大众行政地标;村落落\"大众,\公众location\"大众:{\"大众lat\"大众:23.090326,\"大众lng\公众:115.465995},\"大众uid\"大众:\公众18010998368557334527\"大众}],\公众location_description\"大众:\"大众双墩村落东104米\公众},\"大众result\公众:{\"大众error\"大众:161,\公众loc_time\"大众:\"大众2016-10-19 22:03:31\"大众}}

此时我们可以把pois字段也提取出来,值得把稳的是pois为数组,我们可以遍历数组数据。

通过上面的剖析,用python大略的写了一个脚本,详细代码如下:

# -- coding:utf-8 --

# author:allen权

import sys

import urllib2

import json

def get_ip_information(ip):

url='http://api.map.baidu.com/highacciploc/v1?qcip='+ip+'&qterm=pc&ak='你的密钥(AK)'&coord=bd09ll&extensions=3'

poiss=''

request = urllib2.Request(url)

page = urllib2.urlopen(request, timeout=10)

data_json = page.read()

data_dic = json.loads(data_json)

if(data_dic.has_key(\"大众content\"大众)):

content=data_dic[\"大众content\"大众]

address_component=content[\"大众address_component\"大众]

formatted_address=content[\"大众formatted_address\公众]

print \"大众该IP地址的详细位置为:\"大众

print address_component[\"大众country\公众]

print formatted_address

if (content.has_key(\"大众pois\"大众)):

print \"大众该IP地址附近POI信息如下:\"大众

pois = content[\"大众pois\"大众]

for index in range(len(pois)):

pois_name = pois[index][\"大众name\"大众]

pois_address = pois[index][\公众address\"大众]

print pois_name, pois_address

else:

print 'IP地址定位失落败!


'

if __name__ == '__main__':

get_ip_information('183.55.116.95')

大家把脚本上面的参数ak值改为自己的密钥即可。
测试截图如下:

再放一张自己IP的测试截图:

确实精确到了路名,很准确,虽然没有pois的信息。

末了声明一下,成功率:综合定位成功率 65% ,精度:90% 偏差 80m 以内;95% 偏差 350m。
这是官方给出的数据,所说有一定的概率是查询失落败的!



标签:

相关文章