プログラム初心者のcakephp2.x・wordpress情報

プログラム初心者のcakephp2.xの技術情報・wordpressやAPI関連も覚書(PHP・mySQL)

google MAP API v3を利用してジオコーディングを作成してみた。

 google MAP API v3でジオコーディングを作成してみました。

 

●複数の住所から経度緯度が取得したい。

●複数の経度緯度情報から住所を取得したいから・・・。

 

google MAP公式サイトに情報が載っているからすぐ実現可能。

ただAPI制限で、1日2500件までしか取得が出来ない。

 

それぞれURLにパラメータを指定して、JSON形式のでたが返ってくるから、必要な値を取得すればできあがり!

 

あまりきれいなソースではありませんが、こんな感じでざっくりと作ればすぐに利用できました。

いろいろ便利なAPIがあるので、もっと有効的に活用していきたいと思います。

 

<?php

$urls = $_POST["urls"];

$modeType = $_POST["modeType"];

if($urls != ""){

$arr = split("\r\n",$urls);

for($i=0;$i<count($arr);$i++){

//Google Geocoding API制限 1日2500件まで

//初期場所データ

$ido = "";

$keido = "";

$address = "";

$textData = "";

 

if($modeType == 1){

$address = $arr[$i];

//ジオコーディング 住所→緯度経度

$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$address."&sensor=false&language=ja";

 

 $obj = distanceJson($url);

 $ido =      $obj->{'results'}[0]->{'geometry'}->{'location'}->{'lat'};

 $keido =    $obj->{'results'}[0]->{'geometry'}->{'location'}->{'lng'};

 $textData = $obj->{'results'}[0]->{'formatted_address'};

$textData = str_replace("日本, ","",$textData);

$textData = mb_convert_kana( $textData, "n", "utf-8" );

}else{

//逆ジオコーディング 経度緯度→住所

$setDeta = split("\t",$arr[$i]);

$ido = $setDeta[0];

$keido = $setDeta[1];

$url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=".$ido.",".$keido."&sensor=false&language=ja";

 

$obj = distanceJson($url);

$address =  $obj->{'results'}[0]->{'formatted_address'};

$textData = "他候補<br />".$obj->{'results'}[1]->{'formatted_address'}."<br />".$obj->{'results'}[2]->{'formatted_address'}."<br />".$obj->{'results'}[3]->{'formatted_address'}."<br />".$obj->{'results'}[7]->{'formatted_address'};

$address = str_replace("日本, ","",$address);

$address = mb_convert_kana( $address, "n", "utf-8" );

$textData = str_replace("日本, ","",$textData);

$textData = str_replace(", 日本","",$textData);

$textData = mb_convert_kana( $textData, "n", "utf-8" );

}

$strhtml .= "<tr><td>".$address."</td><td>".$ido."</td><td>".$keido."</td><td>".$textData."</td></tr>";

}

sleep(1);

}

 

function distanceJson($url){

$json = file_get_contents($url,true);

if ($json == false) {

echo "API制限のため取得できない";

return;

$obj = json_decode($json);

return $obj;

}

?>

<html>

<head>

<title>ジオコーディング</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

<h2>ジオコーディング</h2>

<p>[ 注意 ] Google Geocoding  API利用制限 1日2500件まで</p>

<form name="fm1" method="POST" action="">

<textarea cols=100 rows=30 name="urls"></textarea><br>

<select name="modeType">

<option value="1">Geocoding(住所→経度緯度)</option>

<option value="0">逆Geocoding(経度緯度→住所)</option>

</select>

<input type="submit" value="確認">

</form>

<table border="1"><tr><th>住所</th><th>経度</th><th>緯度</th><th>備考</th></tr>

<?php echo $strhtml; ?>

</table>

</body>

</html>