13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-26

前回、国が公開している日本全国の避難所リスト(PDF)をデータベース化を行いました。
日本全国の避難所データ(PDF)をデータ化して公開してみた(前編)
今回はGoogoleMapに避難所リストのデータを付加してマイマップを作成しました。

Googleマイマップ作成

グーグルアカウントでログイン後に、以下のリンクにあるGoogleマイマップのページに飛び、利用開始を押すと以下のページに遷移します。その画面の左上の『新しい地図を作成』を押し、自分の地図を作成します。

[Googleマイマップ リンク]
(https://www.google.com/intl/ja/maps/about/mymaps/)
スクリーンショット 2017-10-25 8.53.47.png

インポートファイル

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

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

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

スクリーンショット 2017-10-25 9.01.47.png

インポートファイル生成

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

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ファイルが生成されます。

スクリーンショット 2017-10-26 22.17.11.png

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

完成したマップ

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

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

スクリーンショット 2017-10-26 22.21.09.png
13
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?