Google Map 开发(一):中获取兴趣点 (POI) 信息

首先来说,Google Map 的集成其实非常简单,如果使用了 Google Play Service 了可能就几行代码调用的事,不过在我集成的过程中,发现虽然基于 Service SDK 的集成虽然简单,但是功能少了很多,比如基于 POI 信息获取的方法函数中,就没有传递半径区域的方法,这就需要使用到 Places API Web Service 了。

打开官方文档主页,就已经是 POI 应用的一个实例了。

可以看到需要传递的参数包括当前坐标,搜索区域半径,POI 类型,关键字等,以及需要申请一个 APP KEY,这个很简单,在开发者控制台申请好就行。

设计到 WebAPI 的调用,在 Android 上有很多可选的网络请求方案,上 Github 搜索 HTTP,然后按照 Start 倒序一排,这就是我说的面向 Github 编程。

我们选择 Retrofit 这个就行了,OkHttp 可以不用看了,不是说它不好,只是封装的还不够友好,Retrofit 是把 OkHttp 和 RxJava 糅到一起,使 OkHttp 更为丝滑。在这之前我一直是用 android-async-http,这个 Http 库也是非常强大。

对于任何 Http 框架,由于我们最终返回的是 Json,所以需要实体类,当然面对这一堆 Json 我们没必要自己去写实体类,网上已经有很多 Json 转 Javabean 的工具了。

在项目中集成 Retrofit 非常简单:

 implementation 'com.squareup.retrofit2:retrofit:2.4.0'

然后把生成的 Bean 导入项目,并编写 API 调用接口:

1public interface GoogleMapApi { 2 3 @GET("/maps/api/place/nearbysearch/json") 4 Call<GooglePoiBean> listRepos(@Query("location") String location, 5 @Query("radius") int radius, 6 @Query("types") String types, 7 @Query("name") String name, 8 @Query("key") String key); 9 10}

然后创建一个服务主调用类,因为如果接口多了,还可以方便统一管理。

1public class GoogleAPIService { 2 3 private static final String GOOGLE_SERVICE_API_KEY = "AIzaSyBP6nc-FJl7xZtZJP3dTXxeCNr7lWaM3yM"; 4 5 private Retrofit retrofit; 6 7 public GoogleAPIService() { 8 9 retrofit = new Retrofit.Builder() 10 .baseUrl("https://maps.googleapis.com/") 11 .build(); 12 13 } 14 15 public void getPoi(double lat, double lng, int radius, String type, Callback<GooglePoiBean> callback) { 16 17 GoogleMapApi googleMapApi = retrofit.create(GoogleMapApi.class); 18 Call<GooglePoiBean> googlePoiBeanCall = googleMapApi.listRepos(lat + "," + lng, radius, type, "", GOOGLE_SERVICE_API_KEY); 19 googlePoiBeanCall.enqueue(callback); 20 21 } 22}

调用非常简单,调用如下:

1 GoogleAPIService googleAPIService = new GoogleAPIService(); 2 googleAPIService.getPoi(30.223, 114.232, 20000, "酒店", new Callback<GooglePoiBean>() { 3 @Override 4 public void onResponse(Call<GooglePoiBean> call, Response<GooglePoiBean> response) { 5 } 6 @Override 7 public void onFailure(Call<GooglePoiBean> call, Throwable t) { 8 } 9 });

至此,就已经实现了 Google Map WebService API 的 POI 功能集成了,就算没有 Play Service ,这个功能还是能正常使用的,前提是能访问 Google Map 服务了,不过,国内好像都不能访问的,我也不太清楚什么原因,如果你知道,可以告诉我 。→_→

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )