百度地图提供了其地图访问的API接口,其中地理编码是比较有用的一类api,通过地址信息就可以返回百度地图经纬度(注:百度坐标)。现分别用SAS和R进行了访问对比,并对代码作一比较
第一部分 单点获取百度地图经纬度的代码对比:
1 使用R语言实现:
# 载入需要的包(RCurl用于捕获网页内容,rjson用于处理json对象)
library(rjson)
library(RCurl)
# 定义要捕获的地址,如疾控中心
location<-c("北京市昌平区昌百路155号")
# 字符拼接并重编码,注意ak要换成自己的,可以在百度地图api免费申请
url_string <- paste("http://api.map.baidu.com/geocoder/v2/?ak=bp8r8jIGM9zq3Bsm80PI48Le&output=json&address=",
location, sep = "")
url_string <- URLencode(url_string)
# 捕获连接对象
connect <- url(url_string)
# 处理json对象
gc <- fromJSON(paste(readLines(connect,warn = F), collapse = ""))
lat<-gc$result$location$lat
lng<-gc$result$location$lng
# 输出经纬度
lan
lng
2 SAS软件实现
%let ak=bp8r8jIGM9zq3Bsm80PI48Le;/* 给出百度地图的密钥,可在百度地图API主页自由申请*/
%macro LanLon(address,city); /*定义一个获取获取单点坐标的宏,参数address为地址,City为城市名*/
filename foo url
"http://api.map.baidu.com/geocoder/v2
/?ak=&ak%nrstr(&)callback=
renderOption%nrstr(&)output=json%nrstr(&)address=&address.%nrstr(&)city=&city."; /*提交一个Http请求访问百度地图API,并获取JSON格式的返回值*/
data _null_;/*以下代码对返回的JSON进行整理*/
infile foo length=len lrecl=5000;
input t1 $varying5000. len;
ta1=substr(t1,index(t1,"lng")+5,index(t1,"lat")-index(t1,"lng")-7);
ta2=substr(t1,index(t1,"lat")+5,index(t1,"precise")-index(t1,"lat")-8);
put "Lon" ta1; /*输出经度值*/
put "Lan" ta2; /*输出维度值*/
run;
%mend LanLon;
调用以上宏程序,可以生成任意地址的地理编码,如查询“北京市昌平区昌百路155号”的地理编码代码为:
%LanLon(北京市昌平区昌百路155号,北京市);
未完待续,欢迎关注,谢绝转载!如有问题可qq咨询!