Google maps api



  • I've got this kind of geocoding of addresses from the base and updating them. I'm trying to bury 2,500 addresses. Why is this going on with the races, i.e., six addresses are geocoded, and then six passes and then everything in the same spirit. Maybe someone knows how to deal with this problem?

            <meta charset="UTF-8">
    <?php
    

    $sdb_name = "afanasy.mysql";
    $user_name = "afanasy_map";
    $user_password = ":k3FmCFb";
    $db_name = "afanasy_map";

    if(!$link = mysql_connect($sdb_name, $user_name, $user_password))
    {
    echo "<br>Не могу соединиться с сервером базы данных<br>";
    exit();
    }

    if(!mysql_select_db($db_name, $link))
    {
    echo "<br>Не могу выбрать базу данных<br>";
    exit();
    }

    mysql_query('SET NAMES utf8');

    $addresses = mysql_query('SELECT * FROM markers') or die('Ошибка при выполнении запроса к таблице markers": '.mysql_error());
    // Общее количество адресов и количество адресов, в обработке которых произошла ошибка
    $countGeocode = $countGeocodeFault = 0;
    // Обработка адресов
    $result = '<table style="width:600px">';
    while ($row = mysql_fetch_assoc($addresses)) {
    $countGeocode++;
    // Обращение к http-геокодеру
    $xml = simplexml_load_file('http://maps.google.com/maps/api/geocode/xml?address='.$row["address"].'&sensor=false');
    // Если геокодировать удалось, то записываем в БД
    $status = $xml->status;
    echo $xml;
    if ($status == 'OK') {
    $lat = $xml->result->geometry->location->lat;
    $lng = $xml->result->geometry->location->lng;
    $result .= '<tr><td>'.$row['address'].'</td><td>'.$lat.', '.$lng.'</td></tr>';
    mysql_query("UPDATE markers SET lat = '$lat', lng = '$lng' WHERE id = '$row[id]'") or die("Ошибка при обновлении данных в таблице: ".mysql_error());
    } else {
    $result .= '<tr style="color:red"><td>'.$row['address'].'</td><td>ошибка</td></tr>';
    $countGeocodeFault++;
    }
    };
    $result .= '</table>';
    // Вывод результата
    echo $result;
    // Закрытие соеденинения с сервером
    mysql_close($dp);
    // Вывод общего количество прогеокодированных результатов
    if ($countGeocode) {
    echo '<div style="margin-top:1em">Всего обработано адресов: '.$countGeocode.'</div>';
    if ($countGeocodeFault) {
    echo '<div style="color:red">Не удалось прогеокодировать: '.$countGeocodeFault.'</div>';
    }
    } else {
    echo '<div>Таблица с адресами пуста.</div>';
    }



  • Ooh. API Google maps There's a 10-second limit. You can't do anything, just do it. sleep() every 10 requests:

    $i = 0;
    while ($row = mysql_fetch_assoc($addresses)) {
        // Запрос к API и обновление строк в БД
        if ($i % 10 == 0) sleep(1);
    }
    

    In order to optimize the process, it may be possible to see how long it is requested and updated in bd and reduced sleep()




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2