php - 如何使用谷歌距离矩阵获取两个位置之间的距离
问题描述
<html>
<body>
<form action="" method="post">
<label>Origin:</label> <input type="text" name="o" placeholder="Enter Origin location" required> <br><br>
<label>Destination:</label> <input type="text" name="d" placeholder="Enter Destination location" required> <br><br>
<input type="submit" value="Calculate distance & time" name="submit"> <br><br>
</form>
<?php
$con = mysqli_connect("localhost","root","","buspass");
if(isset($_POST['submit'])){
$origin = $_POST['o'];
$destination = $_POST['d'];
$api = file_get_contents("https://www.google.com/maps/search/?api=1&query=centurylink+field/distancematrix/json?units=imperial&origins=".$origin."&destinations=".$destination."&key=AIzaSyAWOoVKOdZ3xCEvoz735TBrggU0q7EgPsU");
$data = json_decode($api);
?>
<label><b>Distance: </b></label> <span>
<?php
if (is_object($data)) {
echo((int)$data->rows[0]->elements[0]->distance->value / 1000).' Km'; //line24
}
?>
</span> <br><br>
<label><b>Travel Time: </b></label> <span>
<?php
if (is_object($data)) {
echo $data->rows[0]->elements[0]->duration->text; //line 31
}
?>
</span>
<?php
}
?>
</body>
</html>
当我输入两个位置并发布时,它应该输出两个位置之间的距离和大约到达的时间
错误信息
注意:尝试在第 24 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“行”
注意:尝试在第 24 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“元素”
注意:尝试在第 24 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“距离”
注意:试图在 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“值”在第 24 行 0 公里
旅行时间:注意:尝试在第 31 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“行”
注意:尝试在第 31 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“元素”
注意:尝试在第 31 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“持续时间”
注意:尝试在第 31 行的 C:\xampp\htdocs\Bus Pass\distance.php 中获取非对象的属性“文本”
解决方案
我自己在使用 PHP 的 JSON 对象时遇到了一些困难,
1.替换$data = json_decode($api);
为$data = json_decode($api, true);
得到一个关联数组。
2. 删除任何对象检查(如if (is_object($data)) {
)。
3. 最后,使用数组样式调用而不是对象样式,例如,将您的代码更改为:
$data->rows[0]->elements[0]->distance->value
变成类似的东西:
$data['rows'][0]['elements'][0]['distance']['value']
推荐阅读
- android - Android Studio 序列化
- google-analytics - 是否有一种解决方法可以在 Google Analytics(分析)中为同一目标创建多个渠道?
- redis - Dovecot 无法初始化 dict: dict redis: Invalid IP
- mysql - Wordpress Docker“建立数据库连接时出错”
- imagemagick - 在 MacOS Catalina 上安装 Imagick 时出错
- c# - 如何将 Unity 中的屏幕截图保存到 Azure 存储?
- jquery - 在 iOS 下的 Fancybox 中播放 mp3 的问题
- python - 如何将多个整数作为一个输入的列表附加到列表中?
- java - 为什么这段代码会给我一个 NullPointerException?
- c# - Unity3D - 光线投射没有击中正确的位置