【问题标题】:Google Places: Android API: Place class missing some dataGoogle Places:Android API:Place 类缺少一些数据
【发布时间】:2017-08-15 16:25:09
【问题描述】:

我发现 Google Places API 的 Android 库中的 Place 类遗漏了 Web-Service API 中可用的大量数据。

Android 类: https://developers.google.com/android/reference/com/google/android/gms/location/places/Place

网络服务回复: https://developers.google.com/places/web-service/details?hl=en

例如,课程定义与评论或开放时间无关。为什么会这样?是否可以在不将所有应用程序转换为 Web 服务 API 调用和 json 解析的情况下修复它?也许可以将 Place 对象转换为其原始 JSON 形式以查找一些额外的数据?

【问题讨论】:

  • 最终决定避免使用数据不完整的Google Android API

标签: android json google-places-api


【解决方案1】:

Android 中的 Places api 仅返回一些详细信息,例如地名、纬度、经度等。如果您需要更多详细信息,则必须调用 webservice api。这是网址

https://maps.googleapis.com/maps/api/place/details/json?key={API_KEY}&placeid={PLACE_ID}

这里的 PLACE_ID 将从 Android Places Api 中的 Place Object 获取

示例输出:

 {
                                                               "html_attributions" : [],
                                                               "result" : {
                                                                  "address_components" : [
                                                                     {
                                                                        "long_name" : "7167",
                                                                        "short_name" : "7167",
                                                                        "types" : [ "street_number" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "Sunset Boulevard",
                                                                        "short_name" : "Sunset Blvd",
                                                                        "types" : [ "route" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "Central LA",
                                                                        "short_name" : "Central LA",
                                                                        "types" : [ "neighborhood", "political" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "Los Angeles",
                                                                        "short_name" : "Los Angeles",
                                                                        "types" : [ "locality", "political" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "Los Angeles County",
                                                                        "short_name" : "Los Angeles County",
                                                                        "types" : [ "administrative_area_level_2", "political" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "California",
                                                                        "short_name" : "CA",
                                                                        "types" : [ "administrative_area_level_1", "political" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "United States",
                                                                        "short_name" : "US",
                                                                        "types" : [ "country", "political" ]
                                                                     },
                                                                     {
                                                                        "long_name" : "90046",
                                                                        "short_name" : "90046",
                                                                        "types" : [ "postal_code" ]
                                                                     }
                                                                  ],
                                                                  "adr_address" : "\u003cspan class=\"street-address\"\u003e7167 Sunset Blvd\u003c/span\u003e, \u003cspan class=\"locality\"\u003eLos Angeles\u003c/span\u003e, \u003cspan class=\"region\"\u003eCA\u003c/span\u003e \u003cspan class=\"postal-code\"\u003e90046\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eUSA\u003c/span\u003e",
                                                                  "formatted_address" : "7167 Sunset Blvd, Los Angeles, CA 90046, USA",
                                                                  "geometry" : {
                                                                     "location" : {
                                                                        "lat" : 34.098341,
                                                                        "lng" : -118.346263
                                                                     },
                                                                     "viewport" : {
                                                                        "northeast" : {
                                                                           "lat" : 34.0995122302915,
                                                                           "lng" : -118.3449154697085
                                                                        },
                                                                        "southwest" : {
                                                                           "lat" : 34.0968142697085,
                                                                           "lng" : -118.3476134302915
                                                                        }
                                                                     }
                                                                  },
                                                                  "icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
                                                                  "id" : "7143e0743707f66cfa1cda945779f18e8350060e",
                                                                  "name" : "7167 Sunset Blvd",
                                                                  "place_id" : "ChIJn_0bqti-woARRtpNvG7kuq4",
                                                                  "reference" : "CmRbAAAAuU6CDhPuLqrS9F4XCZIV61wveIeU44RMua7FSCZHtwJeC58_OJksQvLI9Nudb9-N8RhfJDUECkxvdB-llxe6WIqrkDQMBs2vz3mBky0DH70jIcFS7f0_7yivdsxmmLzaEhAtwgzDs0va2soGuFyzuNTGGhR-xVrIvyeZwY0OGDmEp3FJmrbbeQ",
                                                                  "scope" : "GOOGLE",
                                                                  "types" : [ "street_address" ],
                                                                  "url" : "https://maps.google.com/?q=7167+Sunset+Blvd,+Los+Angeles,+CA+90046,+USA&ftid=0x80c2bed8aa1bfd9f:0xaebae46ebc4dda46",
                                                                  "utc_offset" : -420,
                                                                  "vicinity" : "Los Angeles"
                                                               },
                                                               "status" : "OK"
                                                            }

Android 中的 JSON 解析示例

String postalCode="";
                    String city="";
                    String state="";
                    String address="";

                    JSONObject jsonObj=new JSONObject(rs);
                    JSONArray addressComponents = jsonObj.getJSONObject("result").getJSONArray("address_components");
                    for(int i = 0; i < addressComponents.length(); i++) {
                        JSONArray typesArray = addressComponents.getJSONObject(i).getJSONArray("types");
                        for (int j = 0; j < typesArray.length(); j++) {
                            if (typesArray.get(j).toString().equalsIgnoreCase("postal_code")) {
                               postalCode = addressComponents.getJSONObject(i).getString("long_name");
                            }else if (typesArray.get(j).toString().equalsIgnoreCase("locality")) {
                                city = addressComponents.getJSONObject(i).getString("long_name");
                            }else if (typesArray.get(j).toString().equalsIgnoreCase("administrative_area_level_1")) {
                                state = addressComponents.getJSONObject(i).getString("long_name");
                            }else {
                                String types=typesArray.get(j).toString();
                                if(types.equalsIgnoreCase("street_number")
                                        ||types.equalsIgnoreCase("route")
                                        ||types.equalsIgnoreCase("neighborhood")
                                        ||types.equalsIgnoreCase("sublocality_level_1")

                                        )
                                address+=addressComponents.getJSONObject(i).getString("long_name")+", ";
                            }
                        }
                    }

【讨论】:

  • 您可能知道 Google Android API 更便宜(更大的使用限制)。你知道他们是否打算扩展自己的 Android 库吗?有没有官方的新闻频道等?
  • 没有关于此的任何消息。可能他们会为地点和方向 API 更新他们的库。
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 2020-04-01
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
相关资源
最近更新 更多