[C#]如何抓取Google Static Map
要透過Google Map抓取靜態地圖,首先我們要了解一下Google Static Maps API要怎樣使用。這部分在Static Maps API 第 2 版開發人員指南這份官方文件介紹的已經很詳細了,這邊只稍稍的略帶一下。
Google Static Maps API 的網址格式如下:
http://maps.google.com/maps/api/staticmap?parameters
https://maps.googleapis.com/maps/api/staticmap?parameters
HTTP與HTTPS兩種協定都支援,可以自行選用合適的協定。
參數的部分可以帶的有centet、format、size、
zoom、maptype、markers、language
。
其中比較常用的像是center,可以指定地圖在顯示的中心位置。這邊可直接帶入中心點的經緯度位置(例如「40.714728,-73.998672」)或是
字串地址(例如「city hall, new york, ny」)。
size表示地圖圖片的矩形維度,可指定地圖的水平與垂直像素。
|
|
|
|
zoom則是可以指定地圖縮放的層級,縮放層級介於0~21。設的值越大地圖放的越大。
|
|
|
|
format可指定靜態地圖的圖片格式,目前支援GIF、JPEG、與PNG三種。預設不帶是吐回png格式的地圖,若有需要變更可設定不同的format。
|
|
|
|
|
|
|
|
|
|
maptype可定義地圖的類型,像是標準道路圖、衛星圖...等,預設不帶是吐回標準道路圖。
|
|
|
|
|
|
|
|
|
|
|
|
大概了解到這邊我們就可以對Google Static Maps API做些基本的應用了,進階的使用部分請自行參閱Static Maps API 第 2 版開發人員指南這份文件。回到本篇的主題,若是想用C#去抓取Google的靜態地圖,我們可以像下面這樣撰寫:
private void Form1_Load(object sender, EventArgs e)
{
DownloadStaticMap(40.714728, -73.998672, "map.jpg");
}
...
private void DownloadStaticMap(double latitude, double longitude, string file)
{
if (string.IsNullOrEmpty(file))
throw new ArgumentNullException("file");
if (File.Exists(file))
return;
var urlFormat = @"http://maps.google.com/maps/api/staticmap?center={0},{1}&size=640x640&format=jpg&sensor=false&markers=color:red%7Csize:mid%7Clabel:A%7C{0},{1}";
var url = String.Format(urlFormat, latitude.ToString(), longitude.ToString());
using (var wc = new WebClient())
{
wc.DownloadFile(url, file);
}
}
簡單的說也只是去兜Google Static Maps API的網址,然後交給WebClient去抓圖片下來而已,運行起來會在運行目錄下看到一個map.jpg,那就是我們透過程式抓取下來的靜態地圖。
Link
Link