如何使用 PHP JSON 对象从 Google 地图 API 获取 5 个附近地点的纬度和经度?
How to fetch Latitude and Longitude of 5 Nearby Places from Google Maps API using PHP JSON object?
我正在使用 Google 地图 API 获取给定位置(纬度、经度)的附近地点。
我是这样操作的:
<?php
$du = file_get_contents("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&type=restaurant&key=APIKEY");
$djd = json_decode(utf8_encode($du),true);
print_r($djd);
?>
这个 returns 浏览器中的一个 JSON 文件。
我想知道如何获取 JSON 中返回的前 5 家餐厅的 [纬度、经度],以便我可以使用它们在地图显示上绘制标记?
我是 PHP 的新手,无法解析 JSON 对象。任何帮助将不胜感激
这里是返回的JSON(略):
{
"html_attributions" : [],
"next_page_token" : "CrQCIQEA...",
"results" : [
{
"geometry" : {
"location" : {
"lat" : -33.87036190000001,
"lng" : 151.1978505
},
"viewport" : {
"northeast" : {
"lat" : -33.8690162197085,
"lng" : 151.1991288802915
},
"southwest" : {
"lat" : -33.8717141802915,
"lng" : 151.1964309197085
}
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
"id" : "e58f0f9ecaf15ab719d305b93265cafc00b01a3f",
"name" : "The Little Snail Restaurant",
"opening_hours" : {
"open_now" : false
},
"photos" : [
{
"height" : 900,
"html_attributions" : [
"\u003ca href=\"https://maps.google.com/maps/contrib/114727320476039103791/photos\"\u003eThe Little Snail Restaurant\u003c/a\u003e"
],
"photo_reference" : "CmRaAAAA0I3YolUFMPSLTtWTRwwDN8TrsmfORJ36osMasP6PeqJSp4qIxdmn3hs6FNifT6Wf-1rZ_gwr1C7a8U1-3BVXhL9suX3cs1ffJiBJQ5TswKftrlLRAk9F9a6tuHpQ1KhrEhD1QXDGR2Sao1qKG5hqvnsVGhTDTxrJvlfSn5UetP261FuHpHmTTQ",
"width" : 1350
}
],
"place_id" : "ChIJtwapWjeuEmsRcxV5JARHpSk",
"plus_code" : {
"compound_code" : "45HX+V4 Pyrmont, New South Wales, Australia",
"global_code" : "4RRH45HX+V4"
},
"price_level" : 2,
"rating" : 4.4,
"reference" : "ChIJtwapWjeuEmsRcxV5JARHpSk",
"scope" : "GOOGLE",
"types" : [ "restaurant", "food", "point_of_interest", "establishment" ],
"user_ratings_total" : 931,
"vicinity" : "3/50 Murray Street, Pyrmont"
},
{
"geometry" : {
"location" : {
"lat" : -33.8682215,
"lng" : 151.1953756
},
"viewport" : {
"northeast" : {
"lat" : -33.8670561697085,
"lng" : 151.1962794802915
}...
只需在上面看到的层次结构中导航即可。让我们调用整个 JSON 对象 response
...
response.results
是一个包含已找到的所有匹配项的数组。
您想保留此数组中的前 5 项,因此您可以这样做:
let top5 = response.results.slice(0, 5)
第一个匹配结果,经纬度为:
top5[0].geometry.location.lat
,
top5[0].geometry.location.lng
PS:抱歉,此答案使用 JavaScript 语法,而不是 PHP,但我希望这足以让您知道该怎么做!
kshetline 以您与 JavaScript 中的 JSON 对象交互的方式回答了您的问题,但是由于您从未提及 JavaScript 并且您的问题中只有 PHP标签我将尝试用 PHP.
来回答你
要访问 PHP 中 JSON 对象的属性,您必须使用 arrow syntax:
$result = $djd->results;
for($i=0; $i<5; $i++){
// Do what you want with them from here
$lat = $result[$i]->geometry->location->lat;
$lng = $result[$i]->geometry->location->lng;
// Example of how to return them
echo json_encode($lat);
echo json_encode($lng);
}
我不知道返回的 JSON 是什么样子,所以我的 PHP 基于 kshetline 答案中的 JSON。我确定他们的 JSON 是正确的,所以这应该有效。
我正在使用 Google 地图 API 获取给定位置(纬度、经度)的附近地点。
我是这样操作的:
<?php
$du = file_get_contents("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&type=restaurant&key=APIKEY");
$djd = json_decode(utf8_encode($du),true);
print_r($djd);
?>
这个 returns 浏览器中的一个 JSON 文件。
我想知道如何获取 JSON 中返回的前 5 家餐厅的 [纬度、经度],以便我可以使用它们在地图显示上绘制标记?
我是 PHP 的新手,无法解析 JSON 对象。任何帮助将不胜感激
这里是返回的JSON(略):
{
"html_attributions" : [],
"next_page_token" : "CrQCIQEA...",
"results" : [
{
"geometry" : {
"location" : {
"lat" : -33.87036190000001,
"lng" : 151.1978505
},
"viewport" : {
"northeast" : {
"lat" : -33.8690162197085,
"lng" : 151.1991288802915
},
"southwest" : {
"lat" : -33.8717141802915,
"lng" : 151.1964309197085
}
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
"id" : "e58f0f9ecaf15ab719d305b93265cafc00b01a3f",
"name" : "The Little Snail Restaurant",
"opening_hours" : {
"open_now" : false
},
"photos" : [
{
"height" : 900,
"html_attributions" : [
"\u003ca href=\"https://maps.google.com/maps/contrib/114727320476039103791/photos\"\u003eThe Little Snail Restaurant\u003c/a\u003e"
],
"photo_reference" : "CmRaAAAA0I3YolUFMPSLTtWTRwwDN8TrsmfORJ36osMasP6PeqJSp4qIxdmn3hs6FNifT6Wf-1rZ_gwr1C7a8U1-3BVXhL9suX3cs1ffJiBJQ5TswKftrlLRAk9F9a6tuHpQ1KhrEhD1QXDGR2Sao1qKG5hqvnsVGhTDTxrJvlfSn5UetP261FuHpHmTTQ",
"width" : 1350
}
],
"place_id" : "ChIJtwapWjeuEmsRcxV5JARHpSk",
"plus_code" : {
"compound_code" : "45HX+V4 Pyrmont, New South Wales, Australia",
"global_code" : "4RRH45HX+V4"
},
"price_level" : 2,
"rating" : 4.4,
"reference" : "ChIJtwapWjeuEmsRcxV5JARHpSk",
"scope" : "GOOGLE",
"types" : [ "restaurant", "food", "point_of_interest", "establishment" ],
"user_ratings_total" : 931,
"vicinity" : "3/50 Murray Street, Pyrmont"
},
{
"geometry" : {
"location" : {
"lat" : -33.8682215,
"lng" : 151.1953756
},
"viewport" : {
"northeast" : {
"lat" : -33.8670561697085,
"lng" : 151.1962794802915
}...
只需在上面看到的层次结构中导航即可。让我们调用整个 JSON 对象 response
...
response.results
是一个包含已找到的所有匹配项的数组。
您想保留此数组中的前 5 项,因此您可以这样做:
let top5 = response.results.slice(0, 5)
第一个匹配结果,经纬度为:
top5[0].geometry.location.lat
,
top5[0].geometry.location.lng
PS:抱歉,此答案使用 JavaScript 语法,而不是 PHP,但我希望这足以让您知道该怎么做!
kshetline 以您与 JavaScript 中的 JSON 对象交互的方式回答了您的问题,但是由于您从未提及 JavaScript 并且您的问题中只有 PHP标签我将尝试用 PHP.
来回答你要访问 PHP 中 JSON 对象的属性,您必须使用 arrow syntax:
$result = $djd->results;
for($i=0; $i<5; $i++){
// Do what you want with them from here
$lat = $result[$i]->geometry->location->lat;
$lng = $result[$i]->geometry->location->lng;
// Example of how to return them
echo json_encode($lat);
echo json_encode($lng);
}
我不知道返回的 JSON 是什么样子,所以我的 PHP 基于 kshetline 答案中的 JSON。我确定他们的 JSON 是正确的,所以这应该有效。