前回、国が公開している日本全国の避難所リスト(PDF)をデータベース化を行いました。
日本全国の避難所データ(PDF)をデータ化して公開してみた(前編)
今回はGoogoleMapに避難所リストのデータを付加してマイマップを作成しました。
Googleマイマップ作成
グーグルアカウントでログイン後に、以下のリンクにあるGoogleマイマップのページに飛び、利用開始を押すと以下のページに遷移します。その画面の左上の『新しい地図を作成』を押し、自分の地図を作成します。
[Googleマイマップ リンク]
(https://www.google.com/intl/ja/maps/about/mymaps/)
インポートファイル
『新しい地図を作成』後に、以下のページに遷移し、マイマップに登録する避難所のデータをインポートさせます。インポートするファイルは以下のファイルが可能です。
- インポート可能ファイル
- CSV
- TSV
- KML
- KMZ
- GPX
- XLSX
- Google スプレッドシート
- Google ドライブまたは Google フォトに保存された写真
- KML(KMZ を zip 解凍したファイル)の最大サイズは 5 MB まで
- その他のファイルの最大サイズは 40 MB まで
- 必須項目
- 緯度と経度情報
- 住所
- 場所の名前
- 1ファイル2000行まで
- レイヤーは10枚まで
ということに注意して、インポート処理を行います。

インポートファイル生成
DBのデータからCSVファイルを生成します。今回はPHPからDBにアクセスして、CSVファイルを生成します。
<?php
//*データベースと接続するための処理
//データベースの設定.iniを読み込み
$DBConfigPath = "Config/DB.ini";
//パースした要素を全て追加
$DBini_array = parse_ini_file($DBConfigPath);
//パースした要素をひとつづつ追加
$url = array_values($DBini_array)[0]; //データベースサーバ
$user = array_values($DBini_array)[1]; //データベースユーザ(サーバと同じ)
$pass = array_values($DBini_array)[2]; //パスワード
$db = array_values($DBini_array)[3]; //データベース名
try{
// mysqliクラスのオブジェクトを作成
$mysqli = new mysqli($url, $user, $pass, $db);
if ($mysqli->connect_error) {
echo "NG!";
exit;
} else {
//trueの処理
echo "OK!";
$mysqli->set_charset("utf8");
}
//九州の県名を保持
$Prefectures_1 = "福岡県";
$Prefectures_2 = "大分県";
$Prefectures_3 = "佐賀県";
$Prefectures_4 = "長崎県";
$Prefectures_5 = "宮崎県";
$Prefectures_6 = "熊本県";
$Prefectures_7 = "沖縄県";
$Prefectures_8 = "鹿児島県";
//Query実行
//$SQL_SELECT = "SELECT * FROM Hinanjo_Location"; //全てのレコードを書き出す
$SQL_SELECT = "SELECT * FROM Hinanjo_Location WHERE Prefectures IN('{$Prefectures_1 }') //九州のみのレコードを書き出す
OR Prefectures IN('{$Prefectures_2 }')
OR Prefectures IN('{$Prefectures_3 }')
OR Prefectures IN('{$Prefectures_4 }')
OR Prefectures IN('{$Prefectures_5 }')
OR Prefectures IN('{$Prefectures_6 }')
OR Prefectures IN('{$Prefectures_7 }')
OR Prefectures IN('{$Prefectures_8 }') ";
$result = $mysqli->query($SQL_SELECT);
$count = 0; //行を書き出すカウンタ
$filenum = 1; //CSVファイル名に使用するユニークなID
$fileName = "Hinanjo_".$filenum.".csv";
$fp = fopen('Hinanjo_CSV/'.$fileName, 'w');
while ($data = mysqli_fetch_array($result,MYSQLI_BOTH)) {
//書き込めるのは2000行まで(GoogoleMapの仕様)
if($count<2000){
$name = str_replace(array(" ", " "), "", $data[1]);
$adress = str_replace(array(" ", " "), "", $data[2].$data[3].$data[4]);
//防災公園、家屋がないものを除外
if(!strstr($data[1], '公園') &&
!strstr($data[1], '緑地') &&
!strstr($data[1], '遊園') &&
!strstr($data[1], '園') &&
!strstr($data[1], '広場') &&
!strstr($data[1], '緑道') &&
!strstr($data[1], 'ラウンド')&&
!strstr($data[1], '駐車場')&&
!strstr($data[1], '球場')){
$list = array($name,$adress);
$line = implode(',' , $list);
fwrite($fp, $line . "\n");
$count++;
}else{
continue;
}
//2000回書き込みが終わった後の処理
}else{
$count= 0; //書き込み行数を一度0にする
$filenum ++; //ファイル名に付加するカウントをアップさせる
$fileName = "Hinanjo_".$filenum.".csv";
fclose($fp);
$fp = fopen('Hinanjo_CSV/'.$fileName, 'w');
}
}
// エラー(例外)が発生した時の処理を記述
} catch (PDOException $e) {
// 強制終了
exit;
}finally{
// 必ずクローズ処理する。
fclose($fp);
$result->close();
$mysqli->close();
}
この処理を実行すると以下のようなcsvファイルが生成されます。

生成されたCSVファイルをグーグルのマイマップにインポートしてあげれば、避難所マップが完成します。
CSVをインポートする際に①施設名②住所の順番で1行を生成してあげないと、まず施設名で検索をかけるため、指定の住所の施設ではなく、一番最初にヒットした施設にピンが置かれるため、注意が必要です。
完成したマップ
グーグルマップでは1ファイルにインポートできる行が2000行かつ、レイヤーが10枚までなので20,000施設しか登録できません。なので全国に施設を登録するのは難しそうです....(やり方があれば教えていただきたいです)。作成した避難所マップは公開しています。今後はこのマップと他のAPIなどを使って、アプリなどを作って行きたいと思っています。
[避難所マップ@九州]
(https://drive.google.com/open?id=1M9n0sq-a6DsFsYpw2qa3Mhf5P5M&usp=sharing)
