当我们想详细到街道乃至门牌号,该怎么办???
有光阴创造百度舆图有高精度IP定位API的接口,通过该接口我们可以通过IP地址定位到详细的地理位置,乃至能精确到门牌号及周围的标志性建筑。该接口的解释地址为:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip
若想要利用该接口进行查询,必须先申请一个密钥(AK),如下图:

申请过程就不进行解释了。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。这是官方给出的数据,所说有一定的概率是查询失落败的!
!
!
!