html5获取并使用坐标来获取没有地图的地址

时间:2015-07-12 08:47:27

标签: php html5 geocoding

我想比IP显示的更准确地获取用户的地址,所以我使用了HTML地理编码器,它让我得到了拉特和长期 - 到目前为止一直很好。但是我想从这里得到地址而不显示任何地图只是街道地址 - 城市 - 国家作为纯文本在后台做一些工作。到目前为止,我看到谷歌反向地理编码始终涉及显示地图。那么有办法解决这个问题吗?我可以使用下面的php函数,但我不能将html 5 var传递给php。

PHP

function GetAddress( $lat, $lng )
    {   
        // Construct the Google Geocode API call
        //
        $URL = "http://maps.googleapis.com/maps/api/geocode/json?latlng=${lat},${lng}&sensor=false";

        // Extract the location lat and lng values
        //
        $data = file( $URL );
        foreach ($data as $line_num => $line) 
        {
            if ( false != strstr( $line, "\"formatted_address\"" ) )
            {
                $addr = substr( trim( $line ), 22, -2 );
                break;
            }
        }

        return $addr;
    }

    $address = GetAddress();
    print_r($address);
?>

1 个答案:

答案 0 :(得分:2)

我采取的方法将类似于此......(经过测试和运作)

    <div id='geo_results'></div>
    <script type='text/javascript' charset='utf-8'>
        window.onload=function(){

            navigator.geolocation.getCurrentPosition( geo_success, geo_failure );

            function geo_success(pos){
                var lat=pos.coords.latitude;
                var lng=pos.coords.longitude;

                var xhr=new XMLHttpRequest();
                xhr.onreadystatechange = function() {
                    if( xhr.readyState==4 && xhr.status==200 ){
                        geo_callback.call( this, xhr.responseText );
                    }
                }
                xhr.open( 'GET', '/fetch.php?lat='+lat+'&lng='+lng, true );
                xhr.send( null );
            }
            function geo_failure(){
                alert('failed');
            }

            function geo_callback(r){
                var json=JSON.parse(r);
                /* process json data according to needs */
                document.getElementById('geo_results').innerHTML=json.results[0].formatted_address;
                console.info('Address: %s',json.results[0].formatted_address);

            }
        }
    </script>

并且php页面会通过curl将请求发送到谷歌

/* fetch.php */
<?php
    /* 
        Modified only to filter supplied variables to help avoid nasty surprises 
    */
    $options=array( 'flags' => FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_ENCODE_HIGH );
    $lat=filter_input( INPUT_GET, 'lat', FILTER_SANITIZE_ENCODED, $options );
    $lng=filter_input( INPUT_GET, 'lng', FILTER_SANITIZE_ENCODED, $options );

    $url="http://maps.googleapis.com/maps/api/geocode/json?latlng={$lat},{$lng}&sensor=false";

    $curl=curl_init( $url );
    /* 
        If CURLOPT_RETURNTRANSFER is set to FALSE 
        there is no need to echo the response 
        at the end
    */
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE );
    curl_setopt( $curl, CURLOPT_AUTOREFERER, TRUE );
    curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, TRUE );
    curl_setopt( $curl, CURLOPT_FRESH_CONNECT, TRUE );
    curl_setopt( $curl, CURLOPT_FORBID_REUSE, TRUE );
    curl_setopt( $curl, CURLINFO_HEADER_OUT, FALSE );
    curl_setopt( $curl, CURLOPT_USERAGENT, 'curl-geolocation' );
    curl_setopt( $curl, CURLOPT_CONNECTTIMEOUT, 15 );
    curl_setopt( $curl, CURLOPT_TIMEOUT, 90 );
    curl_setopt( $curl, CURLOPT_HEADER, FALSE );
    $response=curl_exec( $curl );

    echo $response;

?>