日本全国の避難所データ（PDF）をマップ化して公開してみた（後編）

前回、国が公開している日本全国の避難所リスト(PDF)をデータベース化を行いました。
[日本全国の避難所データ（PDF）をデータ化して公開してみた（前編）](https://qiita.com/Yuta_Fujiwara/items/251ba6c6e48d9f668e73)
今回はGoogoleMapに避難所リストのデータを付加してマイマップを作成しました。
#Googleマイマップ作成
グーグルアカウントでログイン後に、以下のリンクにあるGoogleマイマップのページに飛び、利用開始を押すと以下のページに遷移します。その画面の左上の『新しい地図を作成』を押し、自分の地図を作成します。

[Googleマイマップ リンク]
(https://www.google.com/intl/ja/maps/about/mymaps/)
<img width="1103" alt="スクリーンショット 2017-10-25 8.53.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/b4bdf20c-cb7c-3311-f13b-abe08c483659.png">

##インポートファイル
『新しい地図を作成』後に、以下のページに遷移し、マイマップに登録する避難所のデータをインポートさせます。インポートするファイルは以下のファイルが可能です。

- インポート可能ファイル
    - CSV
    - TSV
    - KML
    - KMZ
    - GPX
    - XLSX
    - Google スプレッドシート
    - Google ドライブまたは Google フォトに保存された写真
- KML（KMZ を zip 解凍したファイル）の最大サイズは 5 MB まで
- その他のファイルの最大サイズは 40 MB まで
- 必須項目
    - 緯度と経度情報
    - 住所
    - 場所の名前
- 1ファイル2000行まで
- レイヤーは10枚まで

ということに注意して、インポート処理を行います。

<img width="941" alt="スクリーンショット 2017-10-25 9.01.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/6ffc8b1c-dc1a-6342-0578-1aa400cbbe8c.png">

##インポートファイル生成
DBのデータからCSVファイルを生成します。今回はPHPからDBにアクセスして、CSVファイルを生成します。

```php:CreateCSV.php
<?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ファイルが生成されます。

<img width="811" alt="スクリーンショット 2017-10-26 22.17.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/b171113b-e22f-8c18-5140-b134b80a6a14.png">

生成されたCSVファイルをグーグルのマイマップにインポートしてあげれば、避難所マップが完成します。
CSVをインポートする際に①施設名②住所の順番で1行を生成してあげないと、まず施設名で検索をかけるため、指定の住所の施設ではなく、一番最初にヒットした施設にピンが置かれるため、注意が必要です。

##完成したマップ
グーグルマップでは1ファイルにインポートできる行が2000行かつ、レイヤーが10枚までなので20,000施設しか登録できません。なので全国に施設を登録するのは難しそうです....(やり方があれば教えていただきたいです)。作成した避難所マップは公開しています。今後はこのマップと他のAPIなどを使って、アプリなどを作って行きたいと思っています。

[避難所マップ＠九州]
(https://drive.google.com/open?id=1M9n0sq-a6DsFsYpw2qa3Mhf5P5M&usp=sharing)

<img width="1108" alt="スクリーンショット 2017-10-26 22.21.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/147291/8b0472e2-a32c-ceeb-8588-7f00a24ad450.png">