Google商家信息:Android API:放置类缺少一些数据

时间:2017-08-15 16:25:09

标签: android json google-places-api

我发现来自Android库的Google Places API的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格式以找到一些额外的数据?

1 个答案:

答案 0 :(得分:0)

在Android中的地方api只返回一些细节,如地名,纬度,经度等。如果你想要更多细节,你必须调用webservice api。这是URl

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")+", ";
                            }
                        }
                    }