google maps — функция геокода php не возвращает долготу и широту

Я хочу взять адреса из базы данных SQL, поместить их в функцию геокодера, чтобы получить долготу и широту каждого местоположения, а затем отобразить информацию о местоположении в формате XML, прежде чем наносить их на карту. Однако долгота и широта оказываются пустыми. Что я делаю неправильно?

 <? $sqlLink = mysqli_connect($host, $sqlusername, $sqlpassword, $db_name);
$sqlLinkError = mysqli_connect($host, $sqlusername, $sqlpassword, $db_name);
$mysqli = new mysqli($host, $sqlusername, $sqlpassword, $db_name);
if ($mysqli->connect_errno)
{
print "Error Connecting to Database";
exit();
}
if (mysqli_connect_errno())
{
print "Error Connecting to Database";
exit();
}function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&#39;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
return $xmlStr;
}

// Opens a connection to a MySQL server
$connection=mysql_connect ('localhost', $sqlusername, $sqlpassword);
if (!$connection) {
die('Not connected : ' . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($db_name, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}

// Select all the rows in the markers table
$query = "SELECT id, address1, city, state, zipcode FROM client_information LIMIT 0,12";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}

header("Content-type: text/xml");

// Start XML file, echo parent node
echo '<markers>';

// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){

$data_arr = geocode($row['address1']);

if($data_arr){

$latitude = $data_arr[0];
$longitude = $data_arr[1];
$formatted_address = $data_arr[2];
}
else{
echo "Error";
}

// ADD TO XML DOCUMENT NODE
echo '<marker ';
echo 'address="' . parseToXML($row['address1']) . '" ';
echo 'lat="' . $latitude . '" ';
echo 'lng="' . $longitude . '" ';
echo '/>';}

// End XML file
echo '</markers>';
?>

<?
// 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?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;
}
}
?>

-1

Решение

Линия: $url = "http://maps.google.com/maps/api/geocode/json?address={$address}";

я использовал, я думаю, что сейчас устарел, я изменил его на тот, который используется сейчас

$url = "https://maps.googleapis.com/maps/api/geocode/json?address={$address}&key="MY API KEY";

и теперь это работает.

1

Другие решения

Кто-нибудь еще читает это, потому что у них похожая проблема, я поделюсь своим решением, потому что у меня была похожая проблема при использовании аналогичной техники при подключении к Google Geocode. Оказывается, если вы используете PHP версии 5.4, то $resp_json = file_get_contents($url); не вернет объект. Он выдаст ошибку вместо возврата false. Обновление до версии 5.6 исправило это для меня.

1

По вопросам рекламы [email protected]