9.2.3 Place API的使用

Place API是百度地图Web服务API的一种,它是一类简单的HTTP接口,用于查询指定区域内的某类POI数据,开发者可以使用C#、C++、Java等开发语言发送HTTP GET请求调用该接口,该接口返回的数据格式有JSON和XML两种。Place API的使用完全免费,接口调用次数限制为10万次/天。

Place API提供区域检索POI服务、POI详情服务、团购信息检索服务和商家团购详情服务。区域检索POI服务提供3种区域检索方法。

1)城市内检索:在指定的城市内检索POI,例如检索贵阳市的如家酒店。

2)矩形检索:在某个指定的矩形区域内检索POI,该区域由两个经纬度坐标确定,分别为左下角坐标和右上角坐标。

3)圆形区域检索:在指定的圆形区域内检索POI,该圆形区域以某个经纬度坐标为圆心。

其中,圆形区域检索就能够满足周边搜索应用的需要。圆形区域检索的请求地址如下:

  1. http://api.map.baidu.com/place/v2/search?&query=QUERY&location=LOCATION&radius=RADIUS&output=xml&ak=AK

上述请求地址中的参数说明详见表9-3。

表9-3 Place API圆形区域检索的参数说明

9.2.3 Place API的使用 - 图1

在表9-3中,只有参数query、location和ak是必需的,其他参数可以根据情况选择是否传递。在调用接口前,需要对参数query进行URL编码,编码方式为UTF-8,在Java中可以使用URLEncoder.encode()进行编码。参数scope表示检索结果详细程度,取值为1返回POI的基本信息,取值为2返回POI的详细信息。

当参数scope=1时,调用圆形区域检索方法返回的XML结果示例如下:

  1. <PlaceSearchResponse>
  2. <status>0</status>
  3. <message>ok</message>
  4. <total>54</total>
  5. <results>
  6. <result>
  7. <name>北京银行ATM</name>
  8. <location>
  9. <lat>39.914663</lat>
  10. <lng>116.402225</lng>
  11. </location>
  12. <address>北京市东城区</address>
  13. <uid>08db2caeab1dc6dcfb2213da</uid>
  14. </result>
  15. </results>
  16. </PlaceSearchResponse>

当参数scope=2时,调用圆形区域检索方法返回的XML结果示例如下:

  1. <PlaceSearchResponse>
  2. <status>0</status>
  3. <message>ok</message>
  4. <total>54</total>
  5. <results>
  6. <result>
  7. <name>北京银行ATM</name>
  8. <location>
  9. <lat>39.914663</lat>
  10. <lng>116.402225</lng>
  11. </location>
  12. <address>北京市东城区</address>
  13. <uid>08db2caeab1dc6dcfb2213da</uid>
  14. <detail_info>
  15. <distance>155</distance>
  16. </detail_info>
  17. </result>
  18. ...
  19. </results>
  20. </PlaceSearchResponse>

上述XML结果中的参数说明如表9-4所示。

表9-4 Place API圆形区域检索返回参数说明

9.2.3 Place API的使用 - 图2

从表9-4可以看出,通过圆形区域检索能够得到POI的名称、经纬度、地址、电话、距离中心点的距离等信息。detail_info是一组参数的集合,只有当scope=2时会返回该参数,并且不同的POI类型,返回的detail_info也不同,例如,检索关键字是酒店、美食、KTV等,返回的detail_info中还会包含overall_rating(总体评分)、service_rating(服务评分)、comment_num(评论数)等参数。


注意 百度地图Place API返回的参数个数是不定的,因此,解析返回的XML或JSON时要特别注意。例如,只有参数detail_info存在时,才能通过它获取参数distance。