1

Google ジオコーディング v3 を約 6 か月使用していますが、突然機能しなくなりました (610 エラーが発生します)。停止したのはここ 1 週間程度です。

次に、これに出くわしました(ページの上部にあるピンクのボックスを参照してください!):https://developers.google.com/maps/documentation/geocoding/v2/

すべてのドキュメントを読みましたが、どこから始めればよいかわかりません。

ここまで来るのに長い時間がかかったので、小さな変化であることを願っています。誰か助けてもらえますか?

[サイト全文はこちら][1]


アップデート:

require("database.php");
// Opens a connection to a MySQL server
$con = mysql_connect("localhost", $username, $password);

if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("teamwork_poh", $con);


    $company = get_the_title();
    $address = get_field('address_line_1');
    $city = get_field('town_/_city');
    $post_code = get_field('post_code');
    $link = get_permalink();
    $type = get_field('kind_of_organisation');

    $sql = sprintf("select count('x') as cnt from markers where `name` = '%s'", mysql_real_escape_string($company));
    $row_dup = mysql_fetch_assoc(mysql_query($sql,$con));
    if ($row_dup['cnt'] == 0) {
        mysql_query("INSERT INTO markers (`name`, `address`, `lat`, `lng`, `type`, `link`) VALUES ('".$company."', '".$address.", ".$city.", ".$post_code."', '0.0', '0.0', '".$type."', '".$link."')");
    }
wp_reset_query();

require("database.php");

define("MAPS_HOST", "maps.googleapis.com");
define("KEY", "(my key)");

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

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

$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

//Initialize delay in geocode speed

$delay=0;
$base_url = "http://" . MAPS_HOST . "/maps/api/geocode/json?address=";

while ($row = @mysql_fetch_assoc($result)) {
    if (!($row['lat'] * 1)) {
        $geocode_pending = true;

    while ($geocode_pending){

    $address = $row["address"];
    $id = $row["id"];

    $request_url = $base_url . "" . urlencode($address) ."&sensor=false";

    sleep(0.1);

$json = file_get_contents($request_url);
$json_decoded = json_decode($json);

$status = $json_decoded->status;

 if (strcmp($json_decoded->status, "OK") == 0) {

$geocode_pending = false;

      $lat = $json_decoded->results[0]->geometry->location->lat;
      $lng = $json_decoded->results[0]->geometry->location->lng;

// echo 'here';

      $query = sprintf("UPDATE markers " .
             " SET lat = '%s', lng = '%s' " .
             " WHERE id = '%s' LIMIT 1;",
             mysql_real_escape_string($lat),
             mysql_real_escape_string($lng),
             mysql_real_escape_string($id));
      $update_result = mysql_query($query);

      echo $id;

      if (!$update_result) {
        die("Invalid query: " . mysql_error());
      }
    }

   else {
 // failure to geocode
      $geocode_pending = false;
      echo "Address " . $address . " failed to geocode. ";
      echo "Received status " . $status . "\n";
    }

  //  usleep($delay);

    }
}

}
4

2 に答える 2

4

座標をデータベースに保存しているので、新しいレコードを挿入するときにジオコーディングするのが最善です。すなわち

require("dbinfo.php");//Your database parameters
//Connect to database
$dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    //Prepare query
    $name = "%".$company."%";//Wildcard for PDO paramerter
    $countSql = "SELECT COUNT(*) FROM markers WHERE `name` LIKE ?"; 
    $countStmt = $dbh->prepare($countSql);
    // Assign parameter
    $countStmt->bindParam(1,$name);
    //Execute query
    $countStmt->execute();  
    // check the row count  
    if ($countStmt->fetchColumn() == 0) { #1 EDIT changed >0 to ==0
        echo "No row matched the query."; //EDIT  From Row
        $q =$address.','.$city.','.$post_code.',UK'; 
        echo "\n";
        $base_url = "http://maps.googleapis.com/maps/api/geocode/xml?address=";
        $request_url = $base_url.urlencode($q)."&sensor=false";
        $xml = simplexml_load_file($request_url) or die("url not loading");
        if($xml->status=="OK"){#2
            // Successful geocode
            $lat = $xml->result->geometry->location->lat;
            $lng = $xml->result->geometry->location->lng; 
            $insertSql ="INSERT INTO markers (`name`, `address`, `lat`, `lng`, `type`, `link`) VALUES (?,?,?,?,?,?)";
            $insertStmt = $dbh->prepare($insertSql);
            // Assign parameter
            $insertStmt->bindParam(1,$company);
            $insertStmt->bindParam(2,$address); 
            $insertStmt->bindParam(3,$lat);
            $insertStmt->bindParam(4,$lng);
            $insertStmt->bindParam(5,$type);
            $insertStmt->bindParam(6,$link);
            //Execute query
            $insertStmt->execute();
        } #2
        else{
            "No rows inserted."; 
        }#2
    } #1
    else {#1
    echo "Rows matched the query."; //EDIT From No row
    } #1 
}// End try 


catch(PDOException $e) {
    echo "I'm sorry I'm afraid you can't do that.". $e->getMessage() ;// Remove or modify after testing 
    file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", myFile.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
 }

これらは非推奨であるため、 mysql_関数の使用を停止することをお勧めするため、コードを PDO に変換しました。

座標を返さないジオコーディングをどのように処理するかを実装する必要があります。また、以下のステータスコードを確認して対処することもできます

OVER_QUERY_LIMIT

ZERO_RESULTS

要求は拒否されました

無効なリクエスト

ステータス コードの実装については、 pastebinを参照してください

于 2013-03-15T14:45:53.827 に答える
2

以前のコメントを見ると、元の状態に戻すために必要な変更がいくつかあります。

これらは、v3 ジオコーディングの住所の変更です。

define("MAPS_HOST", "maps.googleapis.com");
$base_url = "http://" . MAPS_HOST . "/maps/api/geocode/xml?";
$request_url = $base_url . "address=" . urlencode($address) . "&sensor=false";

次に、緯度/経度を設定するために、返されたxmlファイルのパスを変更します

$coordinates = $xml->Response->Placemark->Point->coordinates;
$coordinatesSplit = split(",", $coordinates);
// Format: Longitude, Latitude, Altitude
$lat = $coordinatesSplit[1];
$lng = $coordinatesSplit[0];

完全に置き換え可能

$lat = $xml->result->geometry->location->lat;
$lng = $xml->result->geometry->location->lng;

ジオコーディングの制限を超えないようにするための次の部分。ジオコーディングを実行する前に、簡単なチェックを設定する必要があります。

while ($row = @mysql_fetch_assoc($result)) {
    if (!($row['lat'] * 1)) {// add this line
        $geocode_pending = true;
            while ($geocode_pending){
                //do geocoding stuff
            }
        }
    }// add this close
}
于 2013-03-17T21:32:25.583 に答える