首页 文章

无法使用Google商家信息附近的搜索API获得谷歌地方API的完全匹配

提问于
浏览
2

我正在使用Google Places API检索有关某个位置的详细信息 . 它说我需要使用 placeid in the details query ,这是我使用 nearbysearch query 得到的 . 我没有找到我正在寻找的确切结果 . I'm fairly certain that I'm using the wrong API(nearbysearch) to retreive the place id from a provided latitude/longitude so i can pass that into the details query. I think that nearby search returns locations in the vicinity instead of a PRECISE MATCH TO A LOCATION BASED ON LAT/LONG 如果你看我的代码 im getting the placeid from the 1st result ,我想象的第一个结果是完全匹配 . 我的详细信息查询应该返回一个json字符串的位置详细信息,包括我正在查找的内容(运行小时数) . 你可以看到这里的魔力:click on place details tab in demos

这是我的代码:

<%
require_once("../www/api");

function getLatLon($address)
{
  $curl=curl_init();
  curl_setopt($curl,CURLOPT_URL,'https://maps.googleapis.com/maps/api/geocode/json?address='.rawurlencode($address));
  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  $json=curl_exec($curl);
  curl_close($curl);
  $json=json_decode($json);
  $details=[
     'lat'=>$json->results[0]->geometry->location->lat,
     'lng'=>$json->results[0]->geometry->location->lng
  ];
  echo "[$address] LATITUDE => ".$details['lat']." LONGITUDE => ".$details['lng']."\r\n";
  return $details;
}


function getDetails($address)
{
  $apikey='googlesuppliedapi';
  $locdetails=getLatLon($address);
  $latitude=$locdetails['lat'];
  $longitude=$locdetails['lng'];
  $curl=curl_init();
  curl_setopt($curl,CURLOPT_URL,"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=$latitude,$longitude&radius=10&key=$apikey");
  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  $json=curl_exec($curl);
  curl_close($curl);
  $json=json_decode($json);
  $placeid=$json->results[0]->place_id;
  $curl=curl_init();
  curl_setopt($curl,CURLOPT_URL,"https://maps.googleapis.com/maps/api/place/details/json?placeid=$placeid&key=$apikey");
  curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  $json=curl_exec($curl);
  curl_close($curl);
  $json=json_decode($json);
  //print_r($json);
}


$address='312 South Congress Avenue West Palm Beach, FL 33409';
getDetails($address);

I think the problem is I am using nearby search and its not providing the correct location based on the searched latitude and longitude.

这是我对附近搜索查询的输出

stdClass Object
(
    [html_attributions] => Array
        (
        )

    [results] => Array
        (
            [0] => stdClass Object
                (
                    [geometry] => stdClass Object
                        (
                            [location] => stdClass Object
                                (
                                    [lat] => 26.7115298
                                    [lng] => -80.0854131
                                )

                        )

                    [icon] => https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png
                    [id] => 36f62f72f9fafff3c8508c26edafb628b1712587
                    [name] => North Congress Avenue
                    [place_id] => ChIJ0bwzDBfW2IgR8BPq-9HHQz0
                    [reference] => CpQBjAAAADGYl1TmV52LoBfAZYgFSdnpZK6VewyJilUX4b5VA0xFD8iKqCO4IgFPDOHQ6NHIE8OZVDWj4P9UmLNh2_tRsu7nuSnlkKDg5e_PWm2RwkJFI4NAKC42KxtVcqlfSl9mC6y-yIn3H8yBKOSR1MlWXTWIlcsTG2Qs4jh9agd-S0l3bvQjfzTQvGCHqJE4ivRt3BIQ5l8h8UdnDtBGb6mivHNeHhoU_zFehk7_cW6e3vZGgV-Je60d7KI
                    [scope] => GOOGLE
                    [types] => Array
                        (
                            [0] => route
                        )

                    [vicinity] => West Palm Beach
                )

            [1] => stdClass Object
                (
                    [geometry] => stdClass Object
                        (
                            [location] => stdClass Object
                                (
                                    [lat] => 26.7114047
                                    [lng] => -80.0898085
                                )

                            [viewport] => stdClass Object
                                (
                                    [northeast] => stdClass Object
                                        (
                                            [lat] => 26.719424
                                            [lng] => -80.0759671
                                        )

                                    [southwest] => stdClass Object
                                        (
                                            [lat] => 26.7062189
                                            [lng] => -80.1011549
                                        )

                                )

                        )

                    [icon] => https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png
                    [id] => 566862b54929748bdef8a5d05f0fa2f5e770bfc5
                    [name] => Palm Beach Lakes
                    [place_id] => ChIJH6dwlRnW2IgR-g8PWsqzHow
                    [reference] => CpQBiAAAAAPdlbZ6ND-pH9n9sqPFAfdSXM588cOEQyE0kcYDYkjy7xEsMcxTItt46VXs897XbAAcviUEI_PXnLEi6-fqava9X0_9WFxnncB70Tka_o-G4EszeyFmuPfOSmPNUo-DUt3pj-ton7hfs5Io5zmQJQKIcPdeAAyyccglVIIjBJnmcykuf5En1u-mJtAMJIULChIQkMORVanBwCcFjxqWEce21RoUOYRvsFewN230gLgffru21AbSsD8
                    [scope] => GOOGLE
                    [types] => Array
                        (
                            [0] => neighborhood
                            [1] => political
                        )

                    [vicinity] => West Palm Beach
                )

        )

    [status] => OK
)

这是详细信息查询的输出

stdClass Object
(
    [html_attributions] => Array
        (
        )

    [result] => stdClass Object
        (
            [address_components] => Array
                (
                    [0] => stdClass Object
                        (
                            [long_name] => 314-302
                            [short_name] => 314-302
                            [types] => Array
                                (
                                    [0] => street_number
                                )

                        )

                    [1] => stdClass Object
                        (
                            [long_name] => North Congress Avenue
                            [short_name] => N Congress Ave
                            [types] => Array
                                (
                                    [0] => route
                                )

                        )

                    [2] => stdClass Object
                        (
                            [long_name] => Palm Beach Lakes
                            [short_name] => Palm Beach Lakes
                            [types] => Array
                                (
                                    [0] => neighborhood
                                    [1] => political
                                )

                        )

                    [3] => stdClass Object
                        (
                            [long_name] => West Palm Beach
                            [short_name] => West Palm Beach
                            [types] => Array
                                (
                                    [0] => locality
                                    [1] => political
                                )

                        )

                    [4] => stdClass Object
                        (
                            [long_name] => Palm Beach County
                            [short_name] => Palm Beach County
                            [types] => Array
                                (
                                    [0] => administrative_area_level_2
                                    [1] => political
                                )

                        )

                    [5] => stdClass Object
                        (
                            [long_name] => Florida
                            [short_name] => FL
                            [types] => Array
                                (
                                    [0] => administrative_area_level_1
                                    [1] => political
                                )

                        )

                    [6] => stdClass Object
                        (
                            [long_name] => United States
                            [short_name] => US
                            [types] => Array
                                (
                                    [0] => country
                                    [1] => political
                                )

                        )

                    [7] => stdClass Object
                        (
                            [long_name] => 33409
                            [short_name] => 33409
                            [types] => Array
                                (
                                    [0] => postal_code
                                )

                        )

                )

            [adr_address] => <span class="street-address">314-302 N Congress Ave</span>, <span class="locality">West Palm Beach</span>, <span class="region">FL</span> <span class="postal-code">33409</span>, <span class="country-name">USA</span>
            [formatted_address] => 314-302 N Congress Ave, West Palm Beach, FL 33409, USA
            [geometry] => stdClass Object
                (
                    [location] => stdClass Object
                        (
                            [lat] => 26.7115298
                            [lng] => -80.0854131
                        )

                )

            [icon] => https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png
            [id] => 36f62f72f9fafff3c8508c26edafb628b1712587
            [name] => 314-302 N Congress Ave
            [place_id] => EjYzMTQtMzAyIE4gQ29uZ3Jlc3MgQXZlLCBXZXN0IFBhbG0gQmVhY2gsIEZMIDMzNDA5LCBVU0E
            [reference] => CqQBlAAAAKY3aMkvbZCfKVm1oWPpiRQQ9iXZF1lBBYBLe6YG4HY3ZFSFBgvcPSkoi6RyVWiRq0MyCUyqmRy7pHJrD3W0QGYGPYnCePrqiBiR4oLC9PNwgtX_zAcbdwzqqCzk6vByBPV6RIxXERYMTDW510f7ih2iOaXVsFVIveVLBkvDlcVI_YGQ7IiVsEhem2Z7thOTK0n-tkCXqCrfuvwtJtaqjXISED_x006ruaYh5FPe1dY0ikgaFLUDPCNfYboxcEd3CXDydA1Dg_L3
            [scope] => GOOGLE
            [types] => Array
                (
                    [0] => street_address
                )

            [url] => https://maps.google.com/?q=314-302+N+Congress+Ave,+West+Palm+Beach,+FL+33409,+USA&ftid=0x88d8d6170c33bcd1:0x3d43c7d1fbea13f0
            [vicinity] => West Palm Beach
        )

    [status] => OK
)
root:/srv/www/scl/scripts>

不太清楚在这做什么 .

更新:

我也尝试用这个位置:cheetahs,你可以看到这实际上是一个合法的业务但我无法得到我正在寻找的东西, which is the hours of operation

1 回答

  • 0

    是的,你是对的, nearbysearch API会回复你需要搜索的地方附近的地方列表 .

    您只需要获取要搜索的地点的place_id,然后使用Places API来检索详细结果 .

    Google提供了 PlaceID finder ,您可以在其中填写该地点并获取该特定地点的ID . 只需查看示例代码并使用places库嵌入应用程序代码中以了解place_id并进一步了解详细信息 .

相关问题