立即注册 登录
公卫人 返回首页

asteriod的个人空间 http://www.epiman.cn/?12177 [收藏] [复制] [RSS]

日志

SAS和R的程序对比:访问百度地图获取经纬度(1)

热度 4已有 1669 次阅读2014-9-5 08:45 |个人分类:空间分析| 百度地图, 经纬度, 程序

百度地图提供了其地图访问的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咨询!
2

路过

鸡蛋

鲜花
2

握手

雷人

刚表态过的朋友 (4 人)

发表评论 评论 (1 个评论)

回复 大冰凌 2014-9-7 20:22
  

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|会员|至尊|接种|公卫人 ( 沪ICP备06060850号-3 )

GMT+8, 2024-4-24 12:12 , Processed in 0.029186 second(s), 7 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部