PowerShell で GoogleStreetView Image を取得
仕事で GoogleStreetView Image を大量に取得する必要があり、PowerShell のスクリプトを作成した。
スクリプトで一括して取得するため StreetView Image は以下の条件とした。
- 一つの場所につき、真北(0度)、真東(90度)、真南(180度)、真西(270度)の4つの方位角で StreetView Image を取得
- いかなる場所も size(画素数)600x300、600fov(水平視野角)100度、pitch(俯角)10度
また、UI を簡潔にするため
- StreetView の撮影ポイントは、ID(ファイル名のベースとなる)、経度、緯度の値を、Unicode Text(UTF-16LE、Tab区切り、拡張子 .txt)のテキストファイルとして与える
- 上記テキストファイルは、スクリプトファイルと同じフォルダのサブフォルダ PointList に置かれるものとする
- 上記テキストファイルでは、先頭行は見出し、もしくは空行とする(スクリプトは読み飛ばす)
- 実行結果(テキストファイルの1レコードの情報に対して、4つの StreetView Image 取得)は、スクリプトファイルと同じフォルダのサブフォルダ Result に保存される
以上とした。
<# getStreetViewAtNEWS.ps1 準備 このスクリプトファイルと同じフォルダの子フォルダ:pointList に、 1列目 pointId、2列目 latitude、3列目 longitude を記載し UnicodeText(UTF-16LE )として保存する ※ Excel から保存する場合は、ファイル形式 UnicodeText を指定すると UTF-16LE で保存される ※ スクリプトからは一行目を無視するので、見出し行が無い場合は先頭に改行コードを置くこと 実行結果 このスクリプトファイルと同じフォルダの子フォルダ:result に、 pointList.txt の id,lon の位置から東西南北の street view image を取得してそれぞれ pointId_[EWNS].jpg ファイルが保存される。 #> function getStreetViewNEWS( $fileName, $lat, $lon ){ function getAStreetView($head){ $dstFolder = join-path $pwd result switch($head){ 0{ $fp = join-path $dstFolder $($fileName + "_N.jpg");break } 90{ $fp = join-path $dstFolder $($fileName + "_E.jpg");break } 180{ $fp = join-path $dstFolder $($fileName + "_S.jpg");break } default{ $fp = join-path $dstFolder $($fileName + "_W.jpg") } } if( test-path $fp){ remove-item $fp } $fov = 100; $pitch =10 $url = "https://maps.googleapis.com/maps/api/streetview?size=600x300&location=$lat,$lon&fov=$fov&heading=$head&pitch=$pitch" [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } (New-Object System.Net.WebClient).DownloadFile($url, $fp) #> <# forDebug # write-host "$url`n$fp`n" #> $now = get-date -format g ;write-host "$now`t【処理開始】`t$fileName" start-sleep 1 } # end of function (0,90,180,270)|%{ getAStreetView($_)} } $dummy = chcp 65001 $ScriptBase = Split-Path $MyInvocation.MyCommand.Path -parent pushd $ScriptBase $xluniTxt = join-path $(join-path $pwd pointList ) pointList.txt $queue = gc $xluniTxt | ConvertFrom-CSV -delimiter " " -header pointId,lat,lon | select -skip 1 <# forDebug # $queue #> $queue | % { getStreetViewNEWS $_.pointId $_.lat $_.lon } $now = get-date -format g ;write-host "$now`t【処理完了】" popd