第一次在这里发帖,一直在这里找到我的疑问的答案。因此,我需要从最近的路线找到“real” nearest location
(坚持医院或商店)从特定点到医院或商店。
到目前为止,我已经使用我的PHP代码中的haversine’s formula
作为对我的数据库的查询,并且它以点和坐标的形式返回最近的位置。但我想要的是距离最近的路线最近的,所以它真的是最近的。
我需要最近的查询服务器端。由于最近的数据将传递给Arduino微控制器。 Arduino发送GPS坐标,然后接收最近的store/hospital
。这是我遇到的唯一问题。也许我可以通过参考资料获得一些关于如何解决这个问题的建议。谢谢:)
我唯一能想到的可能是在网络/网站上有谷歌地图,然后在那里传递MySQL结果,可能使用距离矩阵或方向API,然后将其返回到PHP文件。
编辑:到目前为止,我已经使用了谷歌地图的Distance Matrix API。现在我的问题是,我如何获得或是否可以将API的结果输出到我的JSON格式的PHP文件中?
喜欢this或类似,所以我可以在我的Arduino UNO和Android应用中解析它。
这是我的PHP文件的代码
<?PHP
//DLSUD
$CrashLat = 14.3234;$CrashLon = 120.959432;
//Pagamutan
$HosLat1 = 14.323003;$HosLon1 = 120.961666;
//St Paul
$HosLat2 = 14.323321;$HosLon2 = 120.962895;
?>
<script>
function init() {
var origin1 = new google.maps.LatLng(parseFloat('<?php echo $CrashLat;?
>'), parseFloat('<?php echo $CrashLon;?>'));
var destinationA = new google.maps.LatLng(parseFloat('<?php echo
$HosLat1;?>'), parseFloat('<?php echo $HosLon1;?>'));
var destinationB = new google.maps.LatLng(parseFloat('<?php echo
$HosLat2;?>'), parseFloat('<?php echo $HosLon2;?>'));
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix( {
origins: [origin1, origin1],
destinations: [destinationA, destinationB],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
durationInTraffic: true,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status == 'OK') {
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
var element = results[j];
var distance = element.distance.text;
var duration = element.duration.text;
var from = origins[i];
var to = destinations[j];
}
}
console.log(results[0].distance);
}
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?
key=API_KEY&callback=init">
</script>
答案 0 :(得分:0)
似乎回答了我自己的问题。这是代码。
<?PHP
//DLSUD
$CrashLat = 14.3234;$CrashLon = 120.959432;
//Pagamutan
$HosLat1 = 14.323003;$HosLon1 = 120.961666;
//St Paul
$HosLat2 = 14.323321;$HosLon2 = 120.962895;
$APIrequest="https://maps.googleapis.com/maps/api/distancematrix/json?
units=metric&origins=".$CrashLat.",".$CrashLon."&destinations=".$HosLat1.
",".$HosLon1."|".$HosLat2.",".$HosLon2."&mode=walking&key=API_KEY";
$DistanceMatrixResult = file_get_contents($APIrequest);
$Object = json_decode($DistanceMatrixResult, true);
$HospitalDistance1 = $Object['rows'][0]['elements'][0]['distance']['value'];
$HospitalDistance2 = $Object['rows'][0]['elements'][1]['distance']['value'];
if ($HospitalDistance1 > $HospitalDistance2) {
echo $HospitalDistance2;
}
else {
echo $HospitalDistance1;
}
?>
只需将医院的分配替换为数据库的SQL查询(使用Harvesine公式,然后设置LIMITS并对结果进行排序)。
注意:mode = driving(默认)是一种错误,在某些情况下会产生很长的不必要路线。更好地使用mode = walking / transit。