[英]convert address to latitude and longitude in 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>
你最好檢查值是否為空,以及...在這之后,用逗號將它們連接起來,
像這樣:
$addressFields = array(
$_POST['addressline1'],
$_POST['addressline2'],
$_POST['addressline1'],
$_POST['city'],
$_POST['state'],
$_POST['country'],
);
$addressData = implode(', ', array_filter($addressFields));
在此代碼段中, array_filter()
用於過濾數組中的所有空字符串。 implode()
使用逗號在字符串加入數組項一起,
作為“膠水”。
然后,如示例所示,使用geocode()
方法:
$data_arr = geocode($addressData);
將地址部分加在一起形成一行,然后將其提交給Google Maps API。
$address_parts = array($addressline1, $addressline2, $addressline3, $city, $state, $country);
$address = implode(", ", $address_parts); // join the parts together divided by comma
聽起來您應該能夠將地址部分連接在一起,然后再發送呢?
例如
$address = $_POST['addressline1'] .','. $_POST['addressline2'] <<snip>> $_POST['country'];
$data_arr = geocode($address);
如果google在重復逗號時遇到麻煩,則可能需要構建一個if
語句,僅放入實際設置的位(此時,構建數組並進行內爆可能會更好)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.