专栏首页码农小胖哥的码农生涯用google map实现周边搜索功能

用google map实现周边搜索功能

项目要实现根据经纬度获取附近的建筑,由于项目在海外运营,谷歌地图首当其冲。

首先说明的是,该功能需要在服务端实现,也就是安卓的SDK不适用。

api文档地址:

https://developers.google.com/places/web-service/search#PlaceSearchResults

获取秘钥key的方法:

https://developers.google.com/places/web-service/get-api-key

api文档地址打不开怎么办,我将文档中的东西复制下来了,如下:

附近的搜索请求

默认情况下,当用户选择某个地点时,“附近搜索”会返回所选地点的所有可用数据字段,您将收到相应的结算费用。没有办法将附近搜索请求限制为仅返回特定字段。要避免请求(并支付)您不需要的数据,请改用 查找位置请求。

通过“附近搜索”,您可以搜索指定区域内的位置。您可以通过提供关键字或指定要搜索的地点类型来优化搜索请求。

附近搜索请求是以下格式的HTTP URL:

https://maps.googleapis.com/maps/api/place/nearbysearch/output?parameters

其中 output可能是以下任一值:

  • json (推荐)表示JavaScript Object Notation(JSON)中的输出
  • xml 表示输出为XML

启动“附近搜索”请求需要某些参数。作为URL中的标准,所有参数都使用ampersand( &)字符分隔。

必需参数

  • key- 您的应用程序的 API密钥。此密钥标识您的应用程序。有关 更多信息,请参阅 获取密钥。
  • location - 检索地点信息的纬度/经度。必须将其指定为 纬度,经度。
  • radius - 定义返回位置结果的距离(以米为单位)。允许的最大半径为50 000米。请注意, radius如果指定 rankby=distance(在下面的可选参数下描述),则不得包括 。
  • 如果 rankby=distance(在所描述的可选参数下面)被指定,那么一个或多个 keywordnametype是必需的。

可选参数

  • keyword - 与Google为此地点编入索引的所有内容匹配的字词,包括但不限于姓名,类型和地址,以及客户评论和其他第三方内容。
  • language - 语言代码,如果可能,指示应返回结果的语言。请参阅支持的语言 及其代码列表。请注意,我们经常更新支持的语言,因此此列表可能并非详尽无遗。
  • minpricemaxprice (可选) - 仅将结果限制在指定范围内的那些位置。有效值的范围介于0(最实惠)到4(最昂贵)之间。具体值表示的确切数量因地区而异。
  • name - 与Google为此地点编入索引的所有内容匹配的字词。相当于 keyword。该 name字段不再局限于地名。此字段中的值与 keyword字段中的值组合,并作为同一搜索字符串的一部分传递。我们建议仅对 keyword所有搜索词使用 参数。
  • opennow - 仅返回在发送查询时为业务开放的那些位置。如果在查询中包含此参数,则不会返回未在Google地方信息数据库中指定营业时间的地点。
  • rankby - 指定列出结果的顺序。请注意, rankby如果指定了 radius (在上面的必需参数中描述),则不得包括。可能的值是:
  • prominence(默认)。此选项根据结果的重要性对结果进行排序。排名将有利于指定区域内的显着位置。地方在Google索引中的排名,全球受欢迎程度以及其他因素都会影响到突出程度。
  • distance。此选项按照与指定距离的距离按升序对搜索结果进行偏差 location。当 distance被指定时,一个或多个 keywordnametype是必需的。
  • type - 将结果限制为与指定类型匹配的位置。只能指定一种类型(如果提供了多种类型,则忽略第一个条目后面的所有类型)。请参阅 支持的类型列表。
  • pagetoken - 返回先前运行的搜索的后20个结果。设置 pagetoken参数将使用先前使用的相同参数执行搜索 - pagetoken将忽略除以外的所有参数。

Google Maps API Premium Plan客户注意事项:您必须在请求中包含API密钥。你应该包括 clientsignature参数您的要求。

附近的搜索示例

以下示例是澳大利亚悉尼一个1500米半径范围内“餐馆”类型的地点的搜索请求,其中包含“游轮”一词:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=1500&type=restaurant&keyword=cruise&key=YOUR_API_KEY

注意:在此示例中,您需要 key 使用自己的API密钥替换,以使请求在您的应用程序中起作用。

JSON响应最多包含四个根元素:

  • "status"包含请求的元数据。请参阅 下面的状态代码
  • "results"包含一系列地点,包含每个地方的信息。有关这些结果的信息,请参见搜索结果 Places API establishment 每个查询最多返回20个结果。另外, political可以返回结果,其用于识别请求的区域。
  • html_attributions 可能包含一组关于此列表的归属,必须向用户显示(某些列表可能没有归属)。
  • next_page_token包含一个令牌,可用于返回最多20个附加结果。 next_page_token如果没有要显示的其他结果,则不会返回A. 可以返回的最大结果数为60.在 next_page_token发布a 和有效之间会有短暂的延迟。

状态代码

"status"搜索响应对象中字段包含请求的状态,并且可能会包含调试信息,以帮助您跟踪请求失败的原因。该 "status"字段可能包含以下值:

  • OK表示没有发生错误; 成功检测到该地点,并返回至少一个结果。
  • ZERO_RESULTS表示搜索成功但未返回任何结果。如果搜索是 latlng在远程位置传递的,则可能会发生这种情况 。
  • OVER_QUERY_LIMIT 表示您已超过配额。
  • REQUEST_DENIED表示您的请求被拒绝,通常是因为缺少无效 key参数。
  • INVALID_REQUEST通常表示缺少必需的查询参数( locationradius)。
  • UNKNOWN_ERROR表示服务器端错误; 再试一次可能会成功。

错误消息

当Google商家信息服务返回其他状态代码时 OKerror_message搜索响应对象中可能还有一个附加字段。该字段包含有关给定状态代码背后原因的更多详细信息。

访问其他结果

默认情况下,每个附近搜索或文本搜索 establishment每个查询最多返回20个结果; 但是,每个搜索可以返回多达60个结果,分为三个页面。如果您的搜索返回超过20,那么搜索响应将包含一个额外的值 - next_page_token。将值的值传递给新搜索 next_page_tokenpagetoken参数以查看下一组结果。如果 next_page_token为null,或者未返回,则没有进一步的结果。在 next_page_token发布a 和何时生效之间会有短暂的延迟 。在可用之前请求下一页将返回 INVALID_REQUEST响应。使用相同的方法重试请求 next_page_token将返回下一页结果。

例如,在下面的查询中,我们搜索澳大利亚悉尼达令港附近的餐馆,并按距离对结果进行排名。您可以看到响应包含 next_page_token属性。

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&rankby=distance&type=food&key=YOUR_API_KEY
{
   "html_attributions" : [],
   "next_page_token" : "CpQCAgEAAFxg8o-eU7_uKn7Yqjana-HQIx1hr5BrT4zBaEko29ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk-ReY7oulyuvKSQrw1lgJElggGlo0d6indiH1U-tDwquw4tU_UXoQ_sj8OBo8XBUuWjuuFShqmLMP-0W59Vr6CaXdLrF8M3wFR4dUUhSf5UC4QCLaOMVP92lyh0OdtF_m_9Dt7lz-Wniod9zDrHeDsz_by570K3jL1VuDKTl_U1cJ0mzz_zDHGfOUf7VU1kVIs1WnM9SGvnm8YZURLTtMLMWx8-doGUE56Af_VfKjGDYW361OOIj9GmkyCFtaoCmTMIr5kgyeUSnB-IEhDlzujVrV6O9Mt7N4DagR6RGhT3g1viYLS4kO5YindU6dm3GIof1Q",
   "results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : -33.867217,
               "lng" : 151.195939
            }
         },
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/cafe-71.png",
         "id" : "7eaf747a3f6dc078868cd65efc8d3bc62fff77d7",
         "name" : "Biaggio Cafe - Pyrmont",
         "opening_hours" : {
            "open_now" : true
         },
         "photos" : [
            {
               "height" : 600,
               "html_attributions" : [],
               "photo_reference" : "CnRnAAAAmWmj0BqA0Jorm1_vjAvx1n6c7ZNBxyY-U9x99-oNyOxvMjDlo2npJzyIq7c3EK1YyoNXdMFDcRPzwLJtBzXAwCUFDGo_RtLRGBPJTA2CoerPdC5yvT2SjfDwH4bFf5MrznB0_YWa4Y2Qo7ABtAxgeBIQv46sGBwVNJQDI36Wd3PFYBoUTlVXa0wn-zRITjGp0zLEBh8oIBE",
               "width" : 900
            }
         ],
         "place_id" : "ChIJIfBAsjeuEmsRdgu9Pl1Ps48",
         "scope" : "GOOGLE",
         "price_level" : 1,
         "rating" : 3.4,
         "reference" : "CoQBeAAAAGu0wNJjuZ40DMrRe3mpn7fhlfIK1mf_ce5hgkhfM79u-lqy0G2mnmcueTq2JGWu9wsgS1ctZDHTY_pcqFFJyQNV2P-kdhoRIeYRHeDfbWtIwr3RgFf2zzFBXHgNjSq-PSzX_OU6OT2_3dzdhhpV-bPezomtrarW4DsGl9uh773yEhDJT6R3V8Fyvl_xeE761DTCGhT1jJ3floFI5_c-bHgGLVwH1g-cbQ",
         "types" : [ "cafe", "bar", "restaurant", "food", "establishment" ],
         "vicinity" : "48 Pirrama Rd, Pyrmont"
      },
      {
         "geometry" : {
            "location" : {
               "lat" : -33.866786,
               "lng" : 151.195633
            }
         },
         "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
         "id" : "3ef986cd56bb3408bc1cf394f3dad9657c1d30f6",
         "name" : "Doltone House",
         "photos" : [
            {
               "height" : 1260,
               "html_attributions" : [ "From a Google User" ],
               "photo_reference" : "CnRwAAAAeM-aLqAm573T44qnNe8bGMkr_BOh1MOVQaA9CCggqtTwuGD1rjsviMyueX_G4-mabgH41Vpr8L27sh-VfZZ8TNCI4FyBiGk0P4fPxjb5Z1LrBZScYzM1glRxR-YjeHd2PWVEqB9cKZB349QqQveJLRIQYKq2PNlOM0toJocR5b_oYRoUYIipdBjMfdUyJN4MZUmhCsTMQwg",
               "width" : 1890
            }
         ],
         "place_id" : "ChIJ5xQ7szeuEmsRs6Kj7YFZE9k",
         "scope" : "GOOGLE",
         "reference" : "CnRvAAAA22k1PAGyDxAgHZk6ErHh_h_mLUK_8XNFLvixPJHXRbCzg-gw1ZxdqUwA_8EseDuEZKolBs82orIQH4m6-afDZV9VcpggokHD9x7HdMi9TnJDmGb9Bdh8f-Od4DK0fASNBL7Me3CsAWkUMWhlNQNYExIQ05W7VbxDTQe2Kh9TiL840hoUZfiO0q2HgDHSUyRdvTQx5Rs2SBU",
         "types" : [ "food", "establishment" ],
         "vicinity" : "48 Pirrama Rd, Pyrmont"
      },
      {
         "aspects" : [
            {
               "rating" : 23,
               "type" : "overall"
            }
         ],
      ...
   ],
   "status" : "OK"
}

要查看下一组结果,您可以提交新查询,并将结果传递 next_page_tokenpagetoken 参数。例如:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?pagetoken=CpQCAgEAAFxg8o-eU7_uKn7Yqjana-HQIx1hr5BrT4zBaEko29ANsXtp9mrqN0yrKWhf-y2PUpHRLQb1GT-mtxNcXou8TwkXhi1Jbk-ReY7oulyuvKSQrw1lgJElggGlo0d6indiH1U-tDwquw4tU_UXoQ_sj8OBo8XBUuWjuuFShqmLMP-0W59Vr6CaXdLrF8M3wFR4dUUhSf5UC4QCLaOMVP92lyh0OdtF_m_9Dt7lz-Wniod9zDrHeDsz_by570K3jL1VuDKTl_U1cJ0mzz_zDHGfOUf7VU1kVIs1WnM9SGvnm8YZURLTtMLMWx8-doGUE56Af_VfKjGDYW361OOIj9GmkyCFtaoCmTMIr5kgyeUSnB-IEhDlzujVrV6O9Mt7N4DagR6RGhT3g1viYLS4kO5YindU6dm3GIof1Q&key=YOUR_API_KEY

设置 pagetoken将导致忽略任何其他参数。查询将执行与之前相同的搜索,但将返回一组新结果。您可以在原始查询后最多两次请求新页面。必须依次显示每页结果。搜索结果的两页或多页不应作为单个查询的结果显示。请注意,每次搜索都会计入针对您的使用限制的单个请求。

但是,比较坑的一点是同一个key一天调用的次数最多150000次,如果用户量较大时,要专门交费调整限制次数 。

代码示例

pom依赖

<dependency>
    <groupId>de.taimos</groupId>
    <artifactId>httputils</artifactId>
    <version>1.11</version>
</dependency>

测试方法

import de.taimos.httputils.WS;
import org.apache.http.HttpResponse;

/**
 * @author: xbq
 * @date: 2019/2/13 10:47
 * @description:
 */
public class GoogleMap {

    public static final String NEARBY_SEARCH_URL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%s&radius=%s&key=%s";

    public static final String NEXT_PAGE_URL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?pagetoken=%s&key=%s";

    public static final String PHOTO_URL = "https://maps.googleapis.com/maps/api/place/photo?maxwidth=480&photoreference=%s&key=%s";

    // 秘钥
    public static final String KEY = "你申请的KEY";

    public static void main(String[] args) {

        HttpResponse response = null;
        String resStr = null;

        // 调用接口进行请求地址数据
        String location = "-33.8670522,151.1957362";
        String radius = "1500";

        response = WS.url(String.format(NEARBY_SEARCH_URL, location, radius, KEY)).get();
        resStr = WS.getResponseAsString(response);
        System.out.println("resStr==" + resStr);

        /**
         * 请求返回的数据中有nextPageToken字段不为空时,就有多页数据,请求下一页数据时需要将该字段携带去请求
         * 查询下一页的内容
         */
        String nextPageToken = "CoQE_QEAAK74QaEIfb5nG5Zfjuk0Dk2zRojKXhXr1-XhgzEY8xJrwPDvWTs82dGJuQ9JNIERxYWjadPeP-XwPqiKMWbuUpRw0vYfp7xwoj7YOhoYyF9yXwREjhKiRT_F-gaBJnvG_6FqqPbql6f4vBlzclrgu5pjSh4rUFgyU_lpHSRKSHmDaoSvVFynQe7G29-xRT54QXq35_dzIYRVEiHGhv-8qX2b8R_G237_dHIaZr5LpXbLWA7Y6j_78USKHy1t0Mpa2kKLK-bjmYlPniyX-CMocX_KwfQJplnrpLet-4vZiXo9HaPP_jaVOm6HSj-O3vdsra0Dn1fFBIt10kBpt0j1LuQlShjT2ivDgS1UjhiwGqtXRvj_iAN1SKWYuV2CXMqAFg4lkHCtfcPF0H_YUiHYiVup-xQI0cnBtbVmVR7VlvJs3S98H0hhuVyfNfp0b7KoFqwbDaw6Cfc3ohxRD-pnn5ZAfqcKFbuEYyqsHbiUAdtaFIgF07hQTNk-cswO0zaw8jQofrAkS_GjR4QCL1HY2mvWnl1g6fpi4yR28n5O6jRbtcs6MSxILh2QJhZBttmHkKYGDr218971kvmPWL9gcS981xfSNPxEjzd6IcCUrgh4ObV19OLr1JUgigqH2mD2g1JcEmgvX5SQuxIhDOQKnFPuF4AEYFO7Y58ZjTls4GTTEhBTOpSDTtIN1OYtspW9OjpXGhSVH5BjnBGwuG5HYPf-SERJMC1Pkg";
        response = WS.url(String.format(NEXT_PAGE_URL, nextPageToken, KEY)).get();
        resStr = WS.getResponseAsString(response);
        System.out.println("resStr2==" + resStr);

        /**
         * 获取某个地点对应的照片。然后将得到的 url 复制到 浏览器中查看
         * photoreference 这个值 是在上面的请求中得到的
         */
        String photoreference = "CmRaAAAAdxvDbnaBSQO4MDseo-3SB_TZ4pd2c1EC765iu_Vu3-2XOA-LFgaZ6iiTY5sYCKxh_ZiQP0ds6qVDP4RAQn4Lxw6OEonSpgzzBBU0BrwrYMP91shZA1HIkaQVZaxKtYeqEhCKrYqwlzcV8dVs4Xv7AY2KGhRdpmMGa3n0S6d2n5cN6SckW49D6g";
        resStr = String.format(PHOTO_URL, photoreference, KEY);
        System.out.println("resStr3==" + resStr);
    }
}

得到的返回结果为(有点长,省略了一部分json。。需要什么值 直接解析下面的JSON即可):

resStr=={
   "html_attributions" : [],
   "next_page_token" : "CoQE_QEAAFOBxJ8gWNrKkExgSbivQYAd46cKlMl8LNTu-ZIx8y3JmpiYhh5dqi3m9sUUwxcQ-MH7eKUgfljdH4RSlU1ExLyzw0vhfvYwfOfdmnbnIHz9xPM1hh5vBgYW2xn85NDRHNYjvB7uGTKoT3w7J5ZIy0pGCesQMjb3ritCHMT-y24DazvRsMEYgsyHk5H7TZWi6169xPyPgKi5uH5wSBpAB0zZdbuGGUY9979sVzRor32JEx6K-hkH6nfo8b1-gIrXBg_YASS81wkkHlqhMj04RDROXBpe_5Y9s4DMqGZNJuAem1Y3O0aEspDI-tT-swpUUYpe3Nvve9seDO7tqkwPWaAGMKGynt5ZlF0GSUXcEao-6dKuvRE0RaiOpdwNTNvGN7kYu6ACfAmDPnXmmIGoo-kdLhzxB4YVXgFYzHiaRIGE6Agj5kCoZ2HNaq-WHQWxx3CquyRV6bb77O_L-rds48ukOVYZ2QkhmfaJAfHGeGF0AyuPcUSip9PkjztzVzRw0oT7m3cASeTyWhci6e97h4chEKhddAc2xAqYZQ-hC8G4uyjp6L0uO_9ENEKYRRFRYWTtYtlpC_mn_xwyr76WN_IjYIyQDci2fFa9y12sPa3fow0W0FOlACfUc-RmU7f_ml1gRAYzyAQIHbDBYxYSS3dhuGDSIBnZfC3Upgh_O51jEhCkXggwwuSE1-t2CtLV_CotGhRCej6bWUC0D4ObssTvgnosi2LDHA",
   "results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : -33.8688197,
               "lng" : 151.2092955
            },
            "viewport" : {
               "northeast" : {
                  "lat" : -33.5781409,
                  "lng" : 151.3430209
               },
               "southwest" : {
                  "lat" : -34.118347,
                  "lng" : 150.5209286
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
         "id" : "044785c67d3ee62545861361f8173af6c02f4fae",
         "name" : "Sydney",
         "photos" : [
            {
               "height" : 1536,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/115027288387975928704/photos\"\u003eAlan Chen\u003c/a\u003e"
               ],
               "photo_reference" : "CmRaAAAA2CmGfo6miJRR93a5XHlI8CUC8ms65rFBpvc5S6UZaKDffZkd3ACtDfnmemKl-AiCeYtev2l3-e8TSVK79B12jINbfk7pzmydQv2auPDTzCqpuGaFqSnwmn6wbzolzZcfEhBcKU3f6uUEPh6gtA3qlq_ZGhS3kXjaoHny1qtBO7YcDcIUmryV-g",
               "width" : 2300
            }
         ],
         "place_id" : "ChIJP3Sa8ziYEmsRUKgyFmh9AQM",
         "reference" : "ChIJP3Sa8ziYEmsRUKgyFmh9AQM",
         "scope" : "GOOGLE",
         "types" : [ "colloquial_area", "locality", "political" ],
         "vicinity" : "Sydney"
      }
   ],
   "status" : "OK"
}


resStr2=={
   "html_attributions" : [],
   "next_page_token" : "CqQFnQIAACwVVBaTf9R5PKhw3tFgSYiobH1a7xJR4sAj8tMXbjdPG8iyUafylxU9Ve1LsQncixVCFUprcYeSpjPzpk1JMCHRzPcEQ0UkJsSSt4Gnmwbqn2sJ6EnUywGul-rVN9tg2No3KGx3ezIBc8ITnogFZAxXCkfGsP6ty4y4wC1Zqc4d4JjYD-P_JIwlSQmO5kjCKLfrnMzbAIaQrYWcUVnqcbtYdxiv41u7UL3zaEly7wDEK4d0kGnOriD1GCFD5Drl9KnGeNJ5kdCT3tiUduNQMioiU5XkKrb8DYLpEfBmCpgqCxL2_AKssad-WBGGu_OU5yIz1NOqi1g78q_-R7JF3rfKo2ZQ2KF8XV3vOrhoK_Y6699-kZ7XQI0ztxoRTUTssiBnpjBRhkDWI-IACrj9FwPyogE0qCB0BEDyuXUk05tR9GqSoLy56JLMSimFVCiUSHz2dXnStHl7Sg-wia562jQacFgjq_w1_wJmHvYr-QRwKt-YPCZuS5x7Fo7dzz5qJniulQ_FB5UwVVw-DHuXF5KJJ0x8uFLbiCm-9B4q7XjF3Y8rTX94tnpfR9ow92GTXL1GHnQZRC67cQqEZG7w5OSHnsyv0rbagM-DYfBfB4dxP1CBrXvZxVs713Eh3kwNqfSJaBZDkOJKzF-ObMuVfTLL3giugfx1knM4j_--0e_117MzeC4skxQRV6Q67kQqpf3lDQmMPUZX87BULX6Lx394G6DBQYf2XUwPGrRF9c_CckUo2_OOg5KbdAUQqlfTE0-Wk6l8b4njzJ8_BluMHMZLwGqa_SllxEsY_4F8vMRw-ml_6gsc_lapkrh9MylaPD7FeHioTEDKPB_UcJ5O67pNDRfyFee1jW2MHyfAev-3RpyT18kgk_QVNQhkjsO9NBIQh41tRo68GtQhXHfxlx1MJxoUcP_2zUJbBnv0cKwt44vWPiTWo4A",
   "results" : [
      {
         "geometry" : {
            "location" : {
               "lat" : -33.86536760000001,
               "lng" : 151.2090887
            },
            "viewport" : {
               "northeast" : {
                  "lat" : -33.86401861970851,
                  "lng" : 151.2104376802915
               },
               "southwest" : {
                  "lat" : -33.8667165802915,
                  "lng" : 151.2077397197085
               }
            }
         },
         "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/lodging-71.png",
         "id" : "7966e287de7b33958cd5fac4bdcab4c3c8a7cf75",
         "name" : "Radisson Blu Plaza Hotel Sydney",
         "opening_hours" : {
            "open_now" : true
         },
         "photos" : [
            {
               "height" : 1243,
               "html_attributions" : [
                  "\u003ca href=\"https://maps.google.com/maps/contrib/113323939240497973930/photos\"\u003eRadisson Blu Plaza Hotel Sydney\u003c/a\u003e"
               ],
               "photo_reference" : "CmRaAAAAGqGsjVf5XLDhg0WDZJHoo6K2GD6145vEVOOPL6oRSYJOTnQ7IB7xg_HR7VAx5Txkv_xdKRg9X5qJ9dHluAXV-eMifF4oqizMSnzjSw62OzCBLySWJmVw-SpievEfp-GrEhAfho_Cnggh1UjsWhaW1l1SGhQccEY-CZKWsXSuZFifHGWttUyKpA",
               "width" : 1244
            }
         ],
         "place_id" : "ChIJI6ovxEGuEmsRAdcebtTwTrU",
         "plus_code" : {
            "compound_code" : "46M5+VH Sydney, New South Wales, Australia",
            "global_code" : "4RRH46M5+VH"
         },
         "rating" : 4.5,
         "reference" : "ChIJI6ovxEGuEmsRAdcebtTwTrU",
         "scope" : "GOOGLE",
         "types" : [ "lodging", "point_of_interest", "establishment" ],
         "user_ratings_total" : 1080,
         "vicinity" : "27 O'Connell Street, Sydney"
      }
   ],
   "status" : "OK"
}

resStr3==https://maps.googleapis.com/maps/api/place/photo?maxwidth=480&photoreference=CmRaAAAAdxvDbnaBSQO4MDseo-3SB_TZ4pd2c1EC765iu_Vu3-2XOA-LFgaZ6iiTY5sYCKxh_ZiQP0ds6qVDP4RAQn4Lxw6OEonSpgzzBBU0BrwrYMP91shZA1HIkaQVZaxKtYeqEhCKrYqwlzcV8dVs4Xv7AY2KGhRdpmMGa3n0S6d2n5cN6SckW49D6g&key=AIzaSyD-M2PDsTZaEP28taVQD9wysAJLyZxkUDM

本文分享自微信公众号 - 码农小胖哥(Felordcn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安全扫描调度系统实践

    日常扫描行为是一个常见的需求,同时我们希望,可以更方便的进行定制自动化扫描任务制定与执行。我们不具体要求实用的扫描工具系统是什么,开源与商业看具体自己的...

    糖果
  • 深度强化学习框架-OpenSpiel(DeepMind开源28种DRL环境+24种DRL算法实现)

    在Alphabet大额资金支持下,DeepMind一直以实现AGI为为目标的公司在各个领域不断的尝试,做出了很多基础研究。其中最为出名的当属在强化学习方面的探索...

    J.Q.Wang@2048
  • 详解TensorFlow 2.0新特性在深度强化学习中的应用

    TensorFlow 2.0的特性公布已经有一段时间了,但很多人对此应当还是一头雾水。

    J.Q.Wang@2048
  • Vue3 深度解析

    距离尤雨溪首次公开 Vue3 (vue-next)源码有一个多月了。青笔观察到,刚发布国庆期间,出现不少解读 Vue3 源码的文章。当然不少有追风蹭热之嫌,文章...

    我是一条小青蛇
  • [springboot 开发单体web shop] 6. 商品分类和轮播广告展示

    从上图我们可以看出,商品的分类其实是有层级关系的,而且这种关系一般都是无限层级。在我们的实现中,为了效果的展示,我们仅仅是展示3级分类,在大多数的中小型电商系统...

    Isaac Zhang
  • 构建面向IT性能的运维组织

    在复杂的IT运维组织事务活动中,如何确定IT运维的目标,对于很多运维组织来说也是一个难点。有些运维组织用的是稳定性/可用性/质量的指标,有些团队用的是效率,有些...

    用户1593318
  • Delta Lake - 数据湖的数据可靠性

    今天笔者将分享一位大神关于 Delta Lake 的演讲内容。这位是 Apache Spark 的 committer 和 PMC 成员,也是 Spark SQ...

    Fayson
  • 聊聊rocketmq的maxReconsumeTimes

    rocketmq-client-4.5.2-sources.jar!/org/apache/rocketmq/client/consumer/DefaultMQ...

    codecraft
  • 程序员需要了解的硬核知识之操作系统和应用

    利用计算机运行程序大部分都是为了提高处理效率。例如,Microsoft Word 这样的文字处理软件,是用来提高文本文件处理效率的程序,Microsoft Ex...

    cxuan
  • Openresty主动关闭连接与KeepAlive Requests

    01最近客户端(APP)换了新的网络库,几轮测试下来,功能和性能上都是正常的,只是网络库对应的日志里会有连接被关闭的提示,开始以为新的网络库踩到坑了,客户端的同...

    糖果

扫码关注云+社区

领取腾讯云代金券