DELPHI调用百度定位API(根据IP获取城市及GPS信息等)

 

缘由:因智能助理在用户说出“天气如何”时,需要自动获取城市,所以这里需要根据用户IP自动获取城市,所以有了这篇文章 QQ508882988

//根据百度API,根据来访IP自动获取出该IP所在的位置及更多信息,参数IP为空时,会使用当前访问者的IP地址作为定位参数
//sServerAK为用户密钥 string 必选,在lbs云官网注册的access key,作为访问的依据,定期从http://lbsyun.baidu.com/apiconsole/key获取
//参考http://lbsyun.baidu.com/index.php?title=webapi/ip-api#.E6.9C.8D.E5.8A.A1.E5.9C.B0.E5.9D.80
//function GetLocInfByIP_BaiDu(sIP, sServerAK: string): string;

uses SuperObject; 

function GetLocInfByIP_BaiDu(sIP, sServerAK: string): string;
  var sUrl, ak, sIPS, sR: string;
  vJson, vj: ISuperObject;
  response: TStringStream;
  FHttp: TIdHTTP;
begin
  sR := '';
  ak := '9fe55cc6597c6b331754b19a048accd4';
  if sIP <> '' then begin
    sIPS := '&ip='+ sIP;
  end else begin
    sIPS := '';
  end;

  sUrl := 'http://api.map.baidu.com/location/ip?ak='+sServerAK + sIPS;
  response := TStringStream.create('', tencoding.utf8);
  FHttp := TIdHttp.Create(nil);
  sR := FHttp.Post(sUrl, response);
  FHttp.Free;
  vJson := SO((sr));

  //我这里只用到城市,所以如下取出,各位客官可自行根据情况获取
  result := SO(SO(vJson.S['content']).S['address_detail']).S['city'];
end;

 

返回的结果json串形如下:

  {  
        address: "CN|北京|北京|None|CHINANET|1|None",   #地址  
        content:       #详细内容  
        {  
        address: "北京市",   #简要地址  
        address_detail:      #详细地址信息  
        {  
        city: "北京市",        #城市  
        city_code: 131,       #百度城市代码  
        district: "",           #区县  
        province: "北京市",   #省份  
        street: "",            #街道  
        street_number: ""    #门址  
        },  
        point:               #百度经纬度坐标值  
        {  
        x: "116.39564504",  
        y: "39.92998578"  
        }  
        },  
        status: 0     #返回状态码  
    }

posted on 2016-07-09 00:18  夷陵·王一笑  阅读(1335)  评论(0编辑  收藏  举报

导航