2014-12-08 162 views
2

我有下面的代码将地址转换为经度和纬度,但它只适用于单输入给出输入,但我有一个表单,允许用户输入地址,城市,州和国家在不同的线路,谁能告诉我怎样可以转换和保存给定的地址为纬度和经度将地址转换为经度和纬度在php

<?php 
    ob_start(); 
    $con=mysqli_connect("localhost","root","","db"); 
    // Check connection 
    if (mysqli_connect_errno())  
     { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 

    if($_POST) 
     { 
      $data_arr = geocode($_POST['address']); // get latitude, longitude and formatted address 
      if($data_arr)// if able to geocode the address 
       { 
        $latitude = $data_arr[0]; 
        $longitude = $data_arr[1]; 
        $formatted_address = $data_arr[2]; 
       } 
       $address = mysqli_real_escape_string($con, $_POST['address']); 
       $sql="INSERT INTO register_office (co_address,latitude,longitude) VALUES ('$address', '$latitude', '$longitude')"; 
       if (!mysqli_query($con,$sql)) 
        { 
         die('Error: ' . mysqli_error($con)); 
        } 
     } 
    mysqli_close($con);  
    ?> 
    <!DOCTYPE html> 
    <html lang="en"> 
     <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <meta name="description" content=""> 
     <meta name="author" content=""> 
    </head> 

    <body > 
    <form action="" method="post"> 
     <input type='text' name='addressline1' placeholder='address line 1' /> 
     <input type='text' name='addressline2' placeholder='address line 2' /> 
     <input type='text' name='addressline3' placeholder='address line 3' /> 
     <input type='text' name='city' placeholder='city' /> 
     <input type='text' name='state' placeholder='state' /> 
     <input type='text' name='country' placeholder='country' /> 
     <input type='submit' value='Geocode!' /> 
    </form> 

    <?php 

    // function to geocode address, it will return false if unable to geocode address 
    function geocode($address){ 

     // url encode the address 
     $address = urlencode($address); 

     // google map geocode api url 
     $url = "http://maps.google.com/maps/api/geocode/json?sensor=false&address={$address}"; 

     // get the json response 
     $resp_json = file_get_contents($url); 

     // decode the json 
     $resp = json_decode($resp_json, true); 

     // response status will be 'OK', if able to geocode given address 
     if($resp['status']='OK'){ 

      // get the important data 
      $lati = $resp['results'][0]['geometry']['location']['lat']; 
      $longi = $resp['results'][0]['geometry']['location']['lng']; 
      $formatted_address = $resp['results'][0]['formatted_address']; 

      // verify if data is complete 
      if($lati && $longi && $formatted_address){ 

       // put the data in the array 
       $data_arr = array();    

       array_push(
        $data_arr, 
         $lati, 
         $longi, 
         $formatted_address 
        ); 

       return $data_arr; 

      }else{ 
       return false; 
      } 

     }else{ 
      return false; 
     } 
    } 
    ?> 
    </body> 
    </html> 

回答

3

你最好检查值是否为空,以及...在此之后,使用逗号,将它们连接起来,就像这样:

$addressFields = array(
    $_POST['addressline1'], 
    $_POST['addressline2'], 
    $_POST['addressline1'], 
    $_POST['city'], 
    $_POST['state'], 
    $_POST['country'],  
); 

$addressData = implode(', ', array_filter($addressFields)); 

在这个片段中,array_filter()是用来过滤全是空的从阵列中tr tr。 implode()使用逗号,作为'胶水'将数组项目连接在一起。
之后,使用geocode()方法,在你的榜样:

$data_arr = geocode($addressData); 
1

添加地址部分一起,形成一个单一的线,并提交给谷歌地图改为API。

$address_parts = array($addressline1, $addressline2, $addressline3, $city, $state, $country); 
$address = implode(", ", $address_parts); // join the parts together divided by comma 
1

这听起来像你应该能够连接你的地址部分,然后发送呢?

E.g.

$address = $_POST['addressline1'] .','. $_POST['addressline2'] <<snip>> $_POST['country']; 

$data_arr = geocode($address); 

如果谷歌有重复逗号麻烦你可能需要建立一个有点if语句只摆在那实际上是对位设置(此时建立一个数组和内爆,它可能会更好)