PHP:使用Google地图的2个地址之间的距离? [英] PHP: Distance between 2 addresses with Google Maps?

查看:107
本文介绍了PHP:使用Google地图的2个地址之间的距离?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图通过Google Maps API使用下面的PHP脚本获得两个地点之间的距离(显然,这些脚本可行(其托管测试网址的作品,下面添加),但是当我使用他们在我自己的服务器上提供的代码时它似乎没有做任何事情...... PHP的工作方式很好,它似乎没有做任何有趣的事情,需要我在我的ini文件中加入某些东西。



我不确定这个问题......一直都在这一天。

有什么想法?也许这是我的.ini?

我不确定我在这里错过了什么。我使用共享主机,但这不应该有所作为。它应该在技术上按原样工作,任何方式,这就是为什么我在这里 - 我需要一些见解。






源代码:
http ://www.codexworld.com/distance-between-two-addresses-google-maps-api-php/#comment-24117



他们的直播演示: http://demos.codexworld.com/ distance-between-two-addresses-google-maps-api-php /

我的完整测试代码:

 <?php 
/ **
*
*作者:CodexWorld
*函数名称:getDistance()
* $ addressFrom =>来自地址。
* $ addressTo =>讲话。
* $ unit =>单位类型。
*
** /

函数getDistance($ addressFrom,$ addressTo,$ unit){
//更改地址格式
$ formattedAddrFrom = str_replace ('','+',$ addressFrom);
$ formattedAddrTo = str_replace('','+',$ addressTo);

//发送请求并接收json数据
$ geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom '&安培;传感器=假');
$ outputFrom = json_decode($ geocodeFrom);
$ geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
$ outputTo = json_decode($ geocodeTo);

//从地理数据获取经度和纬度
$ latitudeFrom = $ outputFrom-> results [0] - > geometry-> location-> lat;
$ longitudeFrom = $ outputFrom-> results [0] - > geometry-> location-> lng;
$ latitudeTo = $ outputTo-> results [0] - > geometry-> location-> lat;
$ longitudeTo = $ outputTo-> results [0] - > geometry-> location-> lng;

//计算经纬度距离
$ theta = $ longitudeFrom - $ longitudeTo;
$ dist = sin(deg2rad($ latitudeFrom))* sin(deg2rad($ latitudeTo))+ cos(deg2rad($ latitudeFrom))* cos(deg2rad($ latitudeTo))* cos(deg2rad($ theta) );
$ dist = acos($ dist);
$ dist = rad2deg($ dist);
$ miles = $ dist * 60 * 1.1515;
$ unit = strtoupper($ unit);
if($ unit ==K){
return($ miles * 1.609344)。'km';
} else if($ unit ==N){
return($ miles * 0.8684)。'nm';
} else {
return $ miles。'mi';



if(!empty($ _ POST ['addrFrom'])&&!empty($ _ POST ['addrTo'])){
$ addressFrom = htmlspecialchars($ _ POST ['addrFrom']);
$ addressTo = htmlspecialchars($ _ POST ['addrTo']);
$ distance = getDistance($ addressFrom,$ addressTo,K);
$ success = true;
}
?>

<!DOCTYPE html>
< html>
< head>< / head>
< body>
< form method =post>
< p class =distance>< span>距离:<?php if($ success == true){echo''。 $距离; }?>< / span> < / p为H.
< p>< label>地址来自< / label>< input type =textname =addrFromvalue =>< / p>
< p>< label>地址到< / label>< input type =textname =addrTovalue =>< / p>
< p>< input type =submitname =submitvalue =计算距离>< / p>
< / form>
< / body>
< / html>


解决方案

试试这个 - 稍微修改一下做法。 。:

 <?php 
/ **
*作者:CodexWorld
*函数名称:getDistance()
* $ addressFrom =>来自地址。
* $ addressTo =>讲话。
* $ unit =>单位类型。
*
** /

函数getDistance($ addressFrom,$ addressTo,$ unit){
//更改地址格式
$ formattedAddrFrom = str_replace ('','+',$ addressFrom);
$ formattedAddrTo = str_replace('','+',$ addressTo);

//发送请求并接收json数据
$ geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom '&安培;传感器=假');
$ outputFrom = json_decode($ geocodeFrom);
$ geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
$ outputTo = json_decode($ geocodeTo);

//从地理数据获取经度和纬度
$ latitudeFrom = $ outputFrom-> results [0] - > geometry-> location-> lat;
$ longitudeFrom = $ outputFrom-> results [0] - > geometry-> location-> lng;
$ latitudeTo = $ outputTo-> results [0] - > geometry-> location-> lat;
$ longitudeTo = $ outputTo-> results [0] - > geometry-> location-> lng;

//计算经纬度距离
$ theta = $ longitudeFrom - $ longitudeTo;
$ dist = sin(deg2rad($ latitudeFrom))* sin(deg2rad($ latitudeTo))+ cos(deg2rad($ latitudeFrom))* cos(deg2rad($ latitudeTo))* cos(deg2rad($ theta) );
$ dist = acos($ dist);
$ dist = rad2deg($ dist);
$ miles = $ dist * 60 * 1.1515;
$ unit = strtoupper($ unit);
if($ unit ==K){
return($ miles * 1.609344)。'km';
} else if($ unit ==N){
return($ miles * 0.8684)。'nm';
} else {
return $ miles。'mi';



if(isset($ _ POST ['submit'])){
$ addressFrom = htmlspecialchars($ _ POST ['addrFrom']);
$ addressTo = htmlspecialchars($ _ POST ['addrTo']);
$ distance = getDistance($ addressFrom,$ addressTo,K);
echo $ distance;
}

?>

<!DOCTYPE html>
< html>
< head>< / head>
< body>
< form method =post>
< p>< label>地址来自< / label>< input type =textname =addrFromvalue =>< / p>
< p>< label>地址到< / label>< input type =textname =addrTovalue =>< / p>
< p>< input type =submitname =submitvalue =计算距离>< / p>
< / form>
< / body>
< / html>


I'm trying to get the distance between 2 locations through Google Maps API using the below PHP script, which apparently works (their hosted test url works, added below), but when I use the code they provide on my own server it doesn't seem to do anything... PHP is working just fine by the way, and it doesn't seem to be doing anything funny that would require me turning something on in my ini file.

I'm not sure what the issue is... been at this all day.

Any ideas? Maybe it is my .ini?

I'm not sure what I'm missing here. I'm using a shared host, but that shouldn't make a difference. It should technically work as is, any way that is why I'm here - I need some insight.


Website with source code: http://www.codexworld.com/distance-between-two-addresses-google-maps-api-php/#comment-24117

Their live demo: http://demos.codexworld.com/distance-between-two-addresses-google-maps-api-php/

My full test code:

<?php
/**
*
* Author: CodexWorld
* Function Name: getDistance()
* $addressFrom => From address.
* $addressTo => To address.
* $unit => Unit type.
*
**/

    function getDistance($addressFrom, $addressTo, $unit){
        //Change address format
        $formattedAddrFrom = str_replace(' ','+',$addressFrom);
        $formattedAddrTo = str_replace(' ','+',$addressTo);

        //Send request and receive json data
        $geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false');
        $outputFrom = json_decode($geocodeFrom);
        $geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
        $outputTo = json_decode($geocodeTo);

        //Get latitude and longitude from geo data
        $latitudeFrom = $outputFrom->results[0]->geometry->location->lat;
        $longitudeFrom = $outputFrom->results[0]->geometry->location->lng;
        $latitudeTo = $outputTo->results[0]->geometry->location->lat;
        $longitudeTo = $outputTo->results[0]->geometry->location->lng;

        //Calculate distance from latitude and longitude
        $theta = $longitudeFrom - $longitudeTo;
        $dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) +  cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        $unit = strtoupper($unit);
        if ($unit == "K") {
            return ($miles * 1.609344).' km';
        } else if ($unit == "N") {
            return ($miles * 0.8684).' nm';
        } else {
            return $miles.' mi';
        }
    }

    if (!empty($_POST['addrFrom']) && !empty($_POST['addrTo'])) { 
        $addressFrom = htmlspecialchars($_POST['addrFrom']);
        $addressTo = htmlspecialchars($_POST['addrTo']);
        $distance = getDistance($addressFrom, $addressTo, "K");
        $success = true;
    }
?>

<!DOCTYPE html>
<html>
<head></head>
<body>
    <form method="post">
        <p class="distance"><span>Distance:<?php if ($success == true) { echo ' ' . $distance; } ?></span> </p>
        <p><label>Address From</label><input type="text" name="addrFrom" value=""></p>
        <p><label>Address To</label><input type="text" name="addrTo" value=""></p>
        <p><input type="submit" name="submit" value="Calculate Distance"></p>
    </form>
</body>
</html>

解决方案

Try This - slightly modified your way of doing it..:

<?php
/**
* Author: CodexWorld
* Function Name: getDistance()
* $addressFrom => From address.
* $addressTo => To address.
* $unit => Unit type.
*
**/

    function getDistance($addressFrom, $addressTo, $unit){
        //Change address format
        $formattedAddrFrom = str_replace(' ','+',$addressFrom);
        $formattedAddrTo = str_replace(' ','+',$addressTo);

        //Send request and receive json data
        $geocodeFrom = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrFrom.'&sensor=false');
        $outputFrom = json_decode($geocodeFrom);
        $geocodeTo = file_get_contents('http://maps.google.com/maps/api/geocode/json?address='.$formattedAddrTo.'&sensor=false');
        $outputTo = json_decode($geocodeTo);

        //Get latitude and longitude from geo data
        $latitudeFrom = $outputFrom->results[0]->geometry->location->lat;
        $longitudeFrom = $outputFrom->results[0]->geometry->location->lng;
        $latitudeTo = $outputTo->results[0]->geometry->location->lat;
        $longitudeTo = $outputTo->results[0]->geometry->location->lng;

        //Calculate distance from latitude and longitude
        $theta = $longitudeFrom - $longitudeTo;
        $dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) +  cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        $unit = strtoupper($unit);
        if ($unit == "K") {
            return ($miles * 1.609344).' km';
        } else if ($unit == "N") {
            return ($miles * 0.8684).' nm';
        } else {
            return $miles.' mi';
        }
    }

    if (isset($_POST['submit'])) {
        $addressFrom = htmlspecialchars($_POST['addrFrom']);
        $addressTo = htmlspecialchars($_POST['addrTo']);
        $distance = getDistance($addressFrom, $addressTo, "K");
        echo $distance;    
    }

?>

<!DOCTYPE html>
<html>
<head></head>
<body>
    <form method="post">
        <p><label>Address From</label><input type="text" name="addrFrom" value=""></p>
        <p><label>Address To</label><input type="text" name="addrTo" value=""></p>
        <p><input type="submit" name="submit" value="Calculate Distance"></p>
    </form>
</body>
</html>

这篇关于PHP:使用Google地图的2个地址之间的距离?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆