当我们想详细到街道乃至门牌号,该怎么办???
有光阴创造百度舆图有高精度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。这是官方给出的数据,所说有一定的概率是查询失落败的!
!
!
!