C#调用百度高精度IP定位API通过IP获取地址
此API现在已经被关闭,不能再正常使用。
在文末加入了普通IP定位API的使用方法
==============================================================
API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip
1、申请百度账号,创建应用,获取密钥(AK)
http://lbsyun.baidu.com/apiconsole/key

启用服务:,可以根据自己需求来钩选,这里先全选了。
请求校验方式:IP白名单校验/SN检验,这里选择IP白名单校验。即在下面填上你访问机器的IP地址。如(114.114.114.114)。
单击提交,获得AK

2、获取方式:
服务地址:
http://api.map.baidu.com/highacciploc/v1
https://api.map.baidu.com/highacciploc/v1
参数:
qcip 待定位IP 可选 如果为空则针对定位服务的IP进行定位
ak 开发者密钥,即前面申请的东西
extensions 返回结果扩展设定 可选,
0(默认):只返回基础定位结果
1:返回基础定位结果+地址信息
2:返回基础定位结果+周边POI信息
3:返回基础定位结果+地址信息+POI信息
这里我们用1
coord 返回坐标类型 可选,
bd09(默认):百度墨卡托坐标
bd09ll:百度经纬度坐标
gcj02:国测局经纬度坐标
完整调用:
在浏览器地址栏输入以下网址
https://api.map.baidu.com/highacciploc/v1?qcip=220.181.38.113&ak=你申请的AK&extensions=1&coord=bd09ll
获取结果如下:

返回值说明:
这里默认用的是返回json格式的数据。
| 字段 | 说明 | ||||
|---|---|---|---|---|---|
| content | location | lat | 纬度坐标 | 基础定位结果extensions=任何值都返回 | |
| lng | 经度坐标 | ||||
| locid | 定位结果唯一ID,用于问题排查 | ||||
| radius | 定位结果半径 | ||||
| confidence | 定位结果可信度 | ||||
| address_component | country | 国家 | 地址信息extensions=1、3返回 | ||
| province | 省份 | ||||
| city | 城市 | ||||
| district | 区县 | ||||
| street | 街道 | ||||
| street_number | 门牌号 | ||||
| admin_area_code | 行政区划代码(身份证前6位) | ||||
| formatted_address | 结构化地址信息 | ||||
| business | 商圈信息 | ||||
| pois(1000m以内的最多10条poi) | name | 名称 | 周边POI信息extensions=2、3返回 | ||
| uid | POI唯一标识ID | ||||
| address | 地址 | ||||
| tag | 分类 | ||||
| location | lat | 纬度 | |||
| lng | 经度 | ||||
| location_description | 位置描述信息 | ||||
| result | loc_time | 定位时间 | 结果信息extensions=任何值都返回 | ||
| error | 定位结果状态码
161:定位成功 167:定位失败 1:服务器内部错误 101:AK参数不存在 200:应用不存在,AK有误请检查重试 201:应用被用户自己禁止 202:应用被管理员删除 203:应用类型错误 210:应用IP校验失败 211:应用SN校验失败 220:应用Refer检验失败 240:应用服务被禁用 251:用户被自己删除 252:用户被管理员删除 260:服务不存在 261:服务被禁用 301:永久配额超限,禁止访问 302:当天配额超限,禁止访问 401:当前并发超限,限制访问 402:当前并发和总并发超限 |
||||
创建对应的类:
[Serializable] //添加序列化特性
public class DetailAddress
{
public DetailContent Content { get; set; }
public DetailResult Result { get; set; }
} [Serializable]
public class DetailContent
{
public DetialLocation Location { get; set; }
public string Locid { get; set; }
public string Radius { get; set; }
public string Confidence { get; set; }
public DetailAddress_component Component{get;set;}
public string Formatted_address{get;set;}
} [Serializable]
public class DetialLocation
{
public string Lat { get; set; }
public string Lng { get; set; } } [Serializable]
public class DetailAddress_component
{
public string Country { get; set; }
public string Province { get; set; }
public string City { get; set; }
public string Distinct { get; set; }
public string Street { get; set; }
public string Street_Number { get; set; }
public string Admin_Area_Code { get; set; } } [Serializable]
public class DetailResult
{
public string Error { get; set; }
public string Loc_time { get; set; }
}
获取数据:
public static DetailAddress GetDetailAddressByBaiduAPI(string IPAddress)
{
System.Net.HttpWebRequest request;
System.Net.HttpWebResponse response;
string url = string.Format("https://api.map.baidu.com/highacciploc/v1?qcip={0}&qterm=pc&extensions=1&ak=你的AK&coord=bd09ll", IPAddress);
try
{
request = HttpWebRequest.Create(url) as System.Net.HttpWebRequest;
response = request.GetResponse() as System.Net.HttpWebResponse;
using(System.IO.Stream stream = response.GetResponseStream())
{
using(System.IO.StreamReader sr = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8))
{
string Data = sr.ReadToEnd();
System.Web.Script.Serialization.JavaScriptSerializer serializer = new JavaScriptSerializer();
DetailAddress detail = serializer.Deserialize<DetailAddress>(Data);
return detail;
}
}
}
catch (Exception)
{
return null;
}
}
查看结果:
//使用
DetailAddress detail = GetDetailAddressByBaiduAPI("114.114.114.114");
//查看街道
System.Console.WriteLine(detail.Content.Location.Street);
==============================================================
普通IP定位API的使用方法 API首页:http://lbsyun.baidu.com/index.php?title=webapi/ip-api 使用方法跟前面一样,也是先申请密钥AK,然后拼写发送HTTP/HTTPS请求的URL 接口参数: ip 指定IP地址,如果不指定,则获取当前IP地址的位置信息
ak 开发者密钥
sn 可选,若用户所用AK的校验方式为SN校验时该参数必须
coor 输出的坐标格式(WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系;GCJ02:表示经过国测局加密的坐标;BD09:为百度坐标系,其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;)
请求网址:
http://api.map.baidu.com/location/ip
https://api.map.baidu.com/location/ip
使用方式:
http://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll
或
https://api.map.baidu.com/location/ip?ak=请输入您的AK&coor=bd09ll
其实WebAPI的调用方式都一样, 一般返回的都 是JSON或JSONP格式的数据,C# 都 可以调用,只要创建对应的序列化的类就可以了。
对于获取到的JSON数据,如果觉得比较乱,可以在线解析一下,创建类的时候就会方便很多了。
下图是调用API是获取到的结果

然后我们在线解析 一下,解析的网址为
http://www.json.cn/
解析后的结果如下

然后我们创建对应的类,就可以在C# 中进行调用了。
如果获取地址不成功,可以对照上面的错误码查找原因。
C#调用百度高精度IP定位API通过IP获取地址的更多相关文章
- c#百度IP定位API使用方法
c#百度IP定位API使用方法 1.先建立一个收集信息的实体类 IPModel.cs: using System; using System.Collections.Generic; using Sy ...
- C# 调用百度地图Web服务API
最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...
- Node.js调用百度地图Web服务API的Geocoding接口进行点位反地理信息编码
(从我的新浪博客上搬来的,做了一些修改.) 最近迷上了node.js以及JavaScript.现在接到一个活,要解析一个出租车点位数据的地理信息.于是就想到使用Node.js调用百度地图API进行解析 ...
- C# 调用百度地图 Web 服务 API
最近公司项目中需要根据两个地点的交通路径和距离做一些数据推荐,为了程序的稳定和用户体验所以想从百度地图 API 采集数据保存到数据库中,经过一翻研究之后选定了百度地图 Web 服务 API 中的 Di ...
- js调用百度地图接口绘制任意多边形并获取每个点的经纬度等
来自:https://blog.csdn.net/u013239236/article/details/52213977 侵删 <!DOCTYPE html> <html> & ...
- C#百度api 根据经纬度获取地址
public string GetAddress(string lat, string lng) { try { string res = ""; string url = @&q ...
- 百度地图ip定位,不算bug的bug
做为一个入行不足两年的菜鸟,能在博客园写下第一篇博客,是需要多大的勇气啊.主要还是怕大神们喷啊.其次自己文笔实在太差了. 哈哈~还请各位大神,口下留情啊. 首先说下我的需求:一个需要城市分站的手机站. ...
- 使用百度定位Api获取当前用户登录地址
最近在做一个商城项目,客户想把网站做成类似于美团的效果,切换地区时,内容也跟随变化.这就要首先解决根据用户id获得地址的问题,最终决定使用百度定位(不适用于搭建反向代理的项目) String url ...
- [置顶]
Xamarin android如何调用百度地图入门示例(一)
在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...
随机推荐
- 3.1 js基本概念
js中的语法大量借鉴于C以及其他类C语言(Java,Perl). js中一切(变量.函数名.操作符等等)都区分大小写.如"var a;"中的变量a跟"var A;&quo ...
- Android Weekly Notes Issue #222
Android Weekly Issue #222 September 11th, 2016 Android Weekly Issue #222 ARTICLES & TUTORIALS Fo ...
- iOS从零开始学习直播之音频1.播放本地音频文件
现在直播越来越火,俨然已经成为了下一个红海.作为一个资深码农(我只喜欢这样称呼自己,不喜欢别人这样称呼我),我必须赶上时代的潮流,开始研究视频直播.发现视屏直播类的文章上来就讲拉流.推流.采集.美 ...
- Android 手机卫士--获取联系人信息并显示与回显
前面的文章已经实现相关的布局,本文接着进行相关的功能实现 本文地址:http://www.cnblogs.com/wuyudong/p/5951794.html,转载请注明出处. 读取系统联系人 当点 ...
- [问题]apparmor 问题导致mysql切换datadir目录失败
问题: 在mysql切换datadir后,mysql服务无法启动.出现错误说plugin表无法读取,需要用mysql_upgrade创建.但是其实不是这个问题. 原因: apparmor 会限制程序对 ...
- 在DBeaver中phoenix查询报错:org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified
环境:Phoenix:4.4,win7系统 问题:Phoenix在查询hbase时,报"系统找不到指定路径". 解决: 请参见 https://distcp.quora.com/C ...
- 跨应用使用Spoon框架截图的方法
spoon框架是一个很棒的用例驱动跟测试结果生成加工的框架.但在使用spoon-client时,传入参数需要被测应用的activity实例,跨应用测试会很受限(当然也可能是因为我对android不熟导 ...
- [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
Given integers n and k, find the lexicographically k-th smallest integer in the range from 1 to n. N ...
- [LeetCode] Valid Word Abbreviation 验证单词缩写
Given a non-empty string s and an abbreviation abbr, return whether the string matches with the give ...
- [LeetCode] Two Sum 两数之和
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...